汇编基础

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

你可能感兴趣的:(汇编)