王爽 汇编语言 检测点3.1 已验证

初学汇编,在阅读王爽的汇编语言的同时,也在做着书上的检测点。刚刚做完检测点3.1后,上网搜了一下检测点3.1的答案,发现第2题的搜到的答案和我自己做的答案,总是有点出入,而且连搜几个,有出入的地方还都不一样。执着的我始终相信自己的答案没有错误!!于是为了证明自己,把题目敲到了dos系统里跑了一下。下面就将题目和跑出的结果奉上给各位。

题目:

王爽 汇编语言 检测点3.1 已验证

王爽 汇编语言 检测点3.1 已验证

答案:

指令 CS IP 相关寄存器
mov ax,6622 2000 0003

AX=6622

jmp 0ff0:0100 0FF0 0100  
mov ax,2000 0FF0 0103 AX=2000
mov ds,ax 0FF0 0105 DS=2000
mov ax,[0008] 0FF0 0108 AX=C389
mov ax,[0002] 0FF0 010B AX=EA66

【注】1.上述数据都是16进制形式

           2.网上搜到的大部分答案错误地方在,jmp指令执行之后CS应该始终保持着0FF0不变,而IP做相应的增加。例如在执行               mov ax,2000时,指令执行的地址在10000H处,该地址是通过“段地址(CS)左移一位+偏移地址(IP)”得到的,即                           FF00H+0100H=10000H。当然对于我们人类来说10000H,我们更习惯于把它看作是“1000H左移一位+0”,然而对于计算             机来说,10000H就是通过“CS寄存器里的值左移一位+IP寄存器里的值”得到的。而CS寄存器里的值在执行完jmp指令后就             一直是0FF0H,并没有发生过改变。所以之后执行的指令地址都是以0FF0作为段地址得到的。

 

下图为网上找到的一种错误的答案:

王爽 汇编语言 检测点3.1 已验证

          

下面我将题目整个的运行过程贴出来:

初始状态:

王爽 汇编语言 检测点3.1 已验证

 

mov ax,6622

王爽 汇编语言 检测点3.1 已验证

 

jmp 0ff0:0100

王爽 汇编语言 检测点3.1 已验证

 

mov ax,2000

王爽 汇编语言 检测点3.1 已验证

 

mov ds,ax

王爽 汇编语言 检测点3.1 已验证

 

mov ax,[0008]

王爽 汇编语言 检测点3.1 已验证

 

mov ax,[0002]

王爽 汇编语言 检测点3.1 已验证

 

感谢您的阅读,初学汇编,若有说得不当之处,敬请各位大佬指正。