鱼C论坛

 找回密码
 立即注册
查看: 3112|回复: 2

debug调试中p命令得到的结果与用t命令和直接在dosbox中执行结果不同

[复制链接]
发表于 2017-2-1 20:47:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 阎秋落 于 2017-2-3 11:10 编辑

这个程序是将程序本身的代码复制到0:200地址的内存
assume cs:code
code segment
        mov ax, cs
        mov ds, ax
        mov ax, 0020h
        mov es, ax
        mov bx, 0
s:        mov al, [bx]
        mov es:[bx], al
        inc bx
        loop s        
        
        mov ax, 4c00h
        int 21h
code ends
end
我用dosbox,debug打开程序,如果用p命令跳过循环,结果最后21变成了3

如果用t命令一条一条执行到最后就正确,图片张数限制就不传这个情况的图片了,结果和第三种情况一样

如果在dosbox直接执行程序,然后debug查看内存情况也正确

为什么用p命令会得到不同的结果
~VRI{)Y70(O`(7JWGAI3.png
{7TKHGRQ1D{1Z[VPVH8F`_Q.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-2 14:53:12 | 显示全部楼层
花了一点时间,我终于明白了
因为debug要想让程序执行一条指令后停下了,所以使用中断
你在loop指令哪里使用p命令,debug修改loop指令后面那条指令,
0xcc 正是 int 3中断,软件断点中断
http://blog.sina.com.cn/s/blog_495c65790100dpgv.html
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-2-3 11:12:40 | 显示全部楼层
人造人 发表于 2017-2-2 14:53
花了一点时间,我终于明白了
因为debug要想让程序执行一条指令后停下了,所以使用中断
你在loop指令哪里 ...

明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-25 12:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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