Assembly TASM中带参数的函数

Assembly TASM中带参数的函数,assembly,tasm,function-parameter,Assembly,Tasm,Function Parameter,你能用汇编语言发布一个使用带参数函数的例子吗。一些简单的东西,比如返回两个元素之和的函数 谷歌搜索不到任何足够简单的例子 增加: .model small .data .stack 320h .code extrn writer:near add_numbers PROC ARG number1:WORD ARG number2:WORD MOV ax, number1 MOV bx, numbe

你能用汇编语言发布一个使用带参数函数的例子吗。一些简单的东西,比如返回两个元素之和的函数

谷歌搜索不到任何足够简单的例子

增加:

.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

这取决于您使用的TASM版本。在现代版上,你可以写下如下内容:

add_numbers PROC
    ARG number1:DWORD
    ARG number2:DWORD

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

我使用的是涡轮汇编程序4.1。由于寄存器名的原因,您的示例未编译。将eax替换为ax,将ebx替换为bx,我仍然得到一个关于行“MOV eax,[number1]”的错误:操作数类型不匹配。将DWORD更改为WORD后,它就工作了。但是我现在如何调用这个过程呢?使用
call
指令:
PUSH,PUSH,call add\u numbers
。返回值将在
ax
中。已尝试此操作,但某些操作仍然无效。。。我在问题中添加了我的代码。@sergey:你需要学习使用调试器,这样你就可以单步执行代码了。你可以发布
writer
的代码吗?也许问题就出在那里。