Aegis 发表于 2014-10-29 00:40:45

Debug32奇怪的问题

我用Debug32在Windows 7 x86下作这个实验
将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令就算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003

当执行完mov ax,1这条指令之后,就出现Trace Interrupt,然后内存中的指令全部消失了,为何会这样的呢?


风之残月 发表于 2014-10-29 00:40:46

第一张图 0x2000:0x0000里的代码是mov ax, 00001h, 机器码是0xB80100 (3个字节),但是执行后ax的值没有改变,而IP加的是2,不是3
第二张图,你写入的代码出现在了1FFF:0010后面,试下-u 2000:0000,看有没有你写入的代码,把图贴出来

moonjer 发表于 2014-10-29 15:44:10

我刚看过这个视频,在这个网站注册了,但是权限不够提问题。借这位提问者楼层问下我的问题。如图,汇编语言入门视频12集的内容,小甲鱼用-e命令修改fff0:00f5的值得时候,用了 -e ffff:05。这里问题就来了,为什么不是写成-e fff0:f5呢?我试了貌似都可以,但是不懂小甲鱼的怎么理解它们的转换

黄志伟 发表于 2014-10-29 18:19:59

楼主辛苦了

Aegis 发表于 2014-10-29 19:32:43

回2楼,都是可以的。
对CPU来说效果是一样的,用-e ffff:5明显简洁得多!
怎样分段是人的思想,同一个地址会有不同的分段方式可以到达,所以有多个过程得出同一个结果,不过你注重的过程,CPU只看结果,CPU才不在乎你这个地址是怎么来的……

moonjer 发表于 2014-10-29 20:35:21

Aegis 发表于 2014-10-29 19:32
回2楼,都是可以的。
对CPU来说效果是一样的,用-e ffff:5明显简洁得多!
怎样分段是人的思想,同一个地 ...

-e ffff:5确实更简洁。可是我初学,不太懂,你能不能给我讲讲怎么转换,怎么用,ffff和fff0不是不一样的段吗

Aegis 发表于 2014-10-29 21:01:38

fff0:00f5 = fff0*16 + 00f5 = fff00 + 00f5 = ffff5
ffff:5       = ffff*16 + 0005 = ffff0 + 0005 = ffff5

道理跟12345可以是12340+5或者是12300+45一样的

大个的糖果 发表于 2014-10-30 17:45:08

Aegis 发表于 2014-10-30 20:22:39

风之残月 发表于 2014-10-30 20:13
第一张图 0x2000:0x0000里的代码是mov ax, 00001h, 机器码是0xB80100 (3个字节),但是执行后ax的值没有改 ...

你好,谢谢你的回复!
2000:0中的代码是正常的,因为1FFF:0010其实就是2000:0
我后来想起来32位的Win 7是有自带Debug的,用自带的就好了
用Debug32确实有点奇怪,不过这个软件本来就是为64位Windows而设的,不应该用在32位系统上!
谢谢!

风之残月 发表于 2014-10-30 20:28:18

Aegis 发表于 2014-10-30 20:22
你好,谢谢你的回复!
2000:0中的代码是正常的,因为1FFF:0010其实就是2000:0
我后来想起来32位的Wi ...

:sweat:忘了1FFF:0010就是2000:0000,建议楼主在虚拟机里面安装一个DOS吧,windows虚拟的DOS有时候会出问题

Aegis 发表于 2014-10-30 21:57:24

风之残月 发表于 2014-10-30 20:28
忘了1FFF:0010就是2000:0000,建议楼主在虚拟机里面安装一个DOS吧,windows虚拟的DOS有时候会出问 ...

我有纯DOS的虚拟机,编辑起来不是太方便,屏幕太小了点,再说迟早得要向Windows或者其他有界面有编辑器的操作系统上进行汇编的发展。

moonjer 发表于 2014-10-31 00:12:14

Aegis 发表于 2014-10-29 21:01
fff0:00f5 = fff0*16 + 00f5 = fff00 + 00f5 = ffff5
ffff:5       = ffff*16 + 0005 = ffff0 + 0005 = ff ...

也就是,只要最终是ffff5的结果就行是吧,有点懂了。谢谢你的回答!
额,但是,那个,看图片左边那些地址吧,fff0:0000~fff0:00f0,总共有16*16个地址(是这个意思吧?),最后一个应该就是fff0:00ff吧?这个跟ffff:000f是同一个地址吗?

Aegis 发表于 2014-10-31 09:04:24

moonjer 发表于 2014-10-31 00:12
也就是,只要最终是ffff5的结果就行是吧,有点懂了。谢谢你的回答!
额,但是,那个,看图片左边那些地 ...

是的
是的
是的

如果还没完全弄明白,建议还是看看课本和视频,8086的汇编没有一个代码例子不在使用 CS、DS、SS+偏移地址 的,不懂这个简直就等于不懂呼吸一样,没法活!当然,弄清楚这个简直就等于学懂呼吸一样,没难度!

moonjer 发表于 2014-11-4 16:55:02

Aegis 发表于 2014-10-31 09:04
是的
是的
是的


谢谢,谢谢!好好学着。。。

黄家酱油 发表于 2014-12-22 19:49:53

moonjer 发表于 2014-10-29 15:44
我刚看过这个视频,在这个网站注册了,但是权限不够提问题。借这位提问者楼层问下我的问题。如图,汇编语言 ...

就是因为都可以啊   前面是段地址 后面是偏移只要加起来一样你想怎么写怎么写如ff00:0ff5这样也是可以的
页: [1]
查看完整版本: Debug32奇怪的问题