.静待彼岸 发表于 2012-3-2 12:20:33

第三章 段的综述 里的代码在debug中运行出现的问题

为什么在执行 mov bx ,却显示的是mov bx, ,然后执行的也是错的

莫名其妙 发表于 2012-3-2 12:20:34

本帖最后由 莫名其妙 于 2012-3-2 13:51 编辑

不知道你编写的代码是什么 但是就图上的看确实你[]写的应该是C804因为哪一行后面写着   ds:=0000 要不你发个完整的代码上来

-a
0B25:0100 mov bx,
0B25:0104 mov es,
0B25:0106
-r
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0B25ES=0B25SS=0B25CS=0B25IP=0100   NV UP EI PL NZ NA PO NC
0B25:0100 8B1E0400      MOV   BX,                        DS:0004=9A00
-t
AX=0000BX=9A00CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=0B25ES=0B25SS=0B25CS=0B25IP=0104   NV UP EI PL NZ NA PO NC
0B25:0104 8E00          MOV   ES,                         DS:9A00=0000
-


这是我在debug里写出來的你对比下你的图

key2046 发表于 2017-1-11 18:14:34

沙发沙发为什么在执行 mov bx ,却显示的是mov bx, ,然后执行的也是错的

击壤歌者 发表于 2017-2-6 22:05:13

这段代码应该写在10000H~1001FH这块内存上,怎么变成mov bx, ,谁帮我解答一下,怎么都弄不明白了

击壤歌者 发表于 2017-2-7 19:50:28

终于知道怎么回事了,因为用T命令进行调试的时候,会产生中断。那么肯定会进行现场保护,CPU会依次将标志寄存器、当前CS的值、IP的值压到10000~1001FH这个栈中,当然在执行push ax之前ax这个值也会提前压栈一次,这样就把前面的代码覆盖了。mov bx, 中的c8就是提前压栈的那个ax的低8位,它把04 后面的00覆盖了。
页: [1]
查看完整版本: 第三章 段的综述 里的代码在debug中运行出现的问题