鱼C论坛

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

请教16位汇编语言,栈的问题。

[复制链接]
发表于 2013-4-17 10:23:30 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code
code segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0,0,0,0

  start: mov ax,cs
         mov ss,ax
         mov sp,32
         mov bx,0

         mov cx,8
    s:   push cs:[bx]
         add bx,2
         loop s

     mov bx,0
     mov cx,8
   so: pop cs:[bx]
       add bx,2
      loop so

     mov ax,4c00h
     int 21h
code ends
end start

如上指令,为什么我用T指令单步跟踪的时候结果会是错误的,而用P指令和G指令直接跳过去,结果是正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-17 21:05:35 | 显示全部楼层
经本菜鸟测试:程序会在循环过程中自动修改dw,0……0之外的内容,导致入栈的数据发生变化。
犯罪嫌疑人:push、add、loop
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-17 21:09:14 | 显示全部楼层

我也发现了,程序应该没有什么错误,直接执行是正确的,但是单步不行,谢谢你的意见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-18 12:10:00 | 显示全部楼层
用debug进行t命令单步调试的话,会影响ss里的值的。因为在执行过t命令后,程序就停止了。相当于在那条指令之后加了一个断点,而如果有断点存在的话,程序会在执行断点之前保存现场,将一些数据,代码压入栈中,所以栈里的值会发生变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-18 16:30:05 | 显示全部楼层
1971827035 发表于 2013-4-18 12:10
用debug进行t命令单步调试的话,会影响ss里的值的。因为在执行过t命令后,程序就停止了。相当于在那条指令之 ...

强烈支持楼主ing……谢谢兄弟,问题解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-17 18:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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