鱼游四海 发表于 2013-4-3 13:11:32

为啥不能够正常返回值?如何避免?

在无意中遇到一个问题,无法正常从栈中取出AX值,AX、BX都等与栈中CS值,这是为什么?求大神解释,如何要避免?代码如下:
assume cs:code,ss:stack
   
    stack segment
        db 16 dup(0)
        stack ends
       
   code segment
      
       start:   mov ax,stack
                      mov ss,ax         
                      mov sp,10h
                          
                          mov ax,0
                          call tiaoz
               
                      sub sp,4
                          pop ax
                          mov bx,ax
                          
                          mov ax,4c00h
                          int 21h
                          
          tiaoz:mov bx,0
                      mov ax,5h
                          push ax
                          add sp,2h
                          ret
                          
        code ends
end start       
C:\Documents and Settings\Administrator\桌面\clip_image001.jpg
                          
                     

dagger 发表于 2013-4-3 14:12:34

也许是因为系统不会保存超过栈顶的值?

小小小小鱼 发表于 2013-4-3 14:18:22

CALL 的时候 CPU 会帮你执行 PUSH IP PUSH CS解释完毕

鱼游四海 发表于 2013-4-3 15:48:29

以上两位仁兄,估计没哟运行过该程序吧,此处CALL执行PUSH IP,不是CS和IP,所以采用修改SP值来改变栈的指向

小小小小鱼 发表于 2013-4-3 16:58:36

你用真正的DOS 会成功的~~!
页: [1]
查看完整版本: 为啥不能够正常返回值?如何避免?