鱼C论坛

 找回密码
 立即注册
查看: 1767|回复: 4

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

[复制链接]
发表于 2013-4-3 13:11:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在无意中遇到一个问题,无法正常从栈中取出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
                          
                       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-3 14:12:34 | 显示全部楼层
也许是因为系统不会保存超过栈顶的值?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-3 14:18:22 | 显示全部楼层
CALL 的时候 CPU 会帮你执行 PUSH IP PUSH CS  解释完毕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-3 15:48:29 | 显示全部楼层
以上两位仁兄,估计没哟运行过该程序吧,此处CALL执行PUSH IP,不是CS和IP,所以采用修改SP值来改变栈的指向
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-3 16:58:36 | 显示全部楼层
你用真正的DOS 会成功的~~!  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 21:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表