汇编基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DlMmU/article/details/79956694

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

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试