鱼C论坛

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

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

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

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

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

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

这个程序是将程序本身的代码复制到0:200地址的内存
  1. assume cs:code
  2. code segment
  3.         mov ax, cs
  4.         mov ds, ax
  5.         mov ax, 0020h
  6.         mov es, ax
  7.         mov bx, 0
  8. s:        mov al, [bx]
  9.         mov es:[bx], al
  10.         inc bx
  11.         loop s       
  12.        
  13.         mov ax, 4c00h
  14.         int 21h
  15. code ends
  16. end
复制代码

我用dosbox,debug打开程序,如果用p命令跳过循环,结果最后21变成了3

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

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

为什么用p命令会得到不同的结果
~VRI{)Y70(O`(7JWGAI3.png
{7TKHGRQ1D{1Z[VPVH8F`_Q.png
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 18:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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