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

博主在学习汇编过程中遇到检测点3.1,对网上找到的不同答案产生疑惑。通过实际在DOS系统中运行验证,确认了自己的解答正确。文中详细解释了 jmp 指令执行后CS和IP的变化,并指出常见错误理解,同时分享了完整的运行过程。

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

题目:

答案:

指令CSIP相关寄存器
mov ax,662220000003

AX=6622

jmp 0ff0:01000FF00100 
mov ax,20000FF00103AX=2000
mov ds,ax0FF00105DS=2000
mov ax,[0008]0FF00108AX=C389
mov ax,[0002]0FF0010BAX=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作为段地址得到的。

 

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

          

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

初始状态:

 

mov ax,6622

 

jmp 0ff0:0100

 

mov ax,2000

 

mov ds,ax

 

mov ax,[0008]

 

mov ax,[0002]

 

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

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值