汇编中,子程序设计时,参数的传递一般是用寄存器传递,这里我们讨论另一种方法,用栈传递。
比如,有这样一个题目,计算(a-b)^3,a、b为字型数据,设a=3,b=1。
程序如下:
assume cs:code
code segment
start: mov ax,3
push ax
mov ax,1
push ax
call cube
mov ax,4c00h
int 21h
cube: push bp
mov bp,sp
mov ax,[bp+6]
sub ax,[bp+4]
mov bp,ax
mul bp
mul bp
pop bp
ret 4
code ends
end start
这个原理呢,就是利用bp来定位栈中的参数,获得参数后,进行运算,运算结束后返回。
返回这里呢,用的是指令ret 4,这个指令的作用是:pop ip,add sp,4
结果呢?结果放在哪里?这个问题的回答是,需要放到哪里,就放到哪里。需要放到寄存器中,就放到寄存器中,需要放到内存空间中,就放到内存空间中。