阎秋落 发表于 2017-2-1 20:47:47

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

本帖最后由 阎秋落 于 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,
        mov es:, al
        inc bx
        loop s       
       
        mov ax, 4c00h
        int 21h
code ends
end
我用dosbox,debug打开程序,如果用p命令跳过循环,结果最后21变成了3

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

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

为什么用p命令会得到不同的结果

人造人 发表于 2017-2-2 14:53:12

花了一点时间,我终于明白了
因为debug要想让程序执行一条指令后停下了,所以使用中断
你在loop指令哪里使用p命令,debug修改loop指令后面那条指令,
0xcc 正是 int 3中断,软件断点中断
http://blog.sina.com.cn/s/blog_495c65790100dpgv.html

阎秋落 发表于 2017-2-3 11:12:40

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

明白了
页: [1]
查看完整版本: debug调试中p命令得到的结果与用t命令和直接在dosbox中执行结果不同