call
当执行call指令的时候,会将call fun的下一条指令的偏移地址ip入栈。每次ret的时候,会执行一次出栈操作。 相当于将栈顶元素的值赋给ip。
所以,如果在调用的函数中栈平衡有问题,即入栈后没有出栈,将导致返回时ip出现问题,从而无法继续执行call fun的下一条指令。
assume:ds:data,cs:code ,ss:stack
data segment
db 20 dup(2)
str db "hello world$"
data ends
stack segment
db 20 dup(1)
stack ends
code segment
start:
mov ax,data
mov ds,ax
call print
mov ax,1234h
print:
mov dx,offset str
mov ah,9h
int 21h
;mov bx,1234h
;push bx ;执行此步操作,栈平衡被打破,程序将出现问题。
ret
mov ah, 0
int 16h
end start
ret
code ends