2011-12-10 4 views
0

매개 변수가있는 함수를 사용하는 어셈블리 언어로 예제를 게시 할 수 있습니까? 두 가지 요소의 합을 반환하는 함수와 같이 단순한 것입니다.TASM의 매개 변수가있는 함수

Google은 어떤 간단한 예도 할 수 없습니다.

로 볼 수 있습니다 :

.model small 
.data 

.stack 320h 
.code 
    extrn writer:near 

    add_numbers PROC 
     ARG number1:WORD 
     ARG number2:WORD 

     MOV ax, number1 
     MOV bx, number2 
     ADD ax, bx 
     CALL writer ; this procedure prints the contents of ax 

     RET 
    add_numbers ENDP 

    .startup 
    PUSH 1 
    PUSH 2 
    CALL add_numbers ; instead of 3 it prints -11602 
    call writer ; instead of 3 it prints 0 
.EXIT 
    END 
+0

'writer' 코드를 게시 할 수 있습니까? 어쩌면 문제가 거기에서 오는 것일 수 있습니다. –

답변

2

사용중인 TASM의 버전에 따라 달라질 수있다. 현대에 대해서는 다음과 같이 쓸 수 있습니다 :

add_numbers PROC 
    ARG number1:DWORD 
    ARG number2:DWORD 

    MOV eax, [number1] 
    MOV ebx, [number2] 
    ADD eax, ebx 
    RET 
add_numbers ENDP 
+0

Turbo Assembler 4.1을 사용하고 있습니다. 예제가 레지스터 이름 때문에 컴파일되지 않았습니다. eax를 ax, ebx로 바 꾸었습니다. "MOV eax, [number1]"행에 오류가 있습니다. 피연산자 유형이 일치하지 않습니다. – Sergey

+1

DWORD를 WORD로 변경하면 효과적입니다. 그런데 어떻게이 절차를 호출 할 수 있습니까? – Sergey

+1

'CALL' 명령을 사용하십시오 :'PUSH <첫 번째 인수>, PUSH <두 번째 인수>, CALL add_numbers'. 반환 값은'ax'입니다. –

관련 문제