检测点2.3
修改cs:ip的值使它指向代码段首地址 第一次更改mov ax, bx; 执行完指令,ip + 2 第二次更改
sub ax, ax; 执行完指令,ip + 2 第三次更改
jmp as; 执行完指令,ip= 0 第四次更改 答:一共修改四次
第一次:读取mov ax,bx之后
第二次:读取sub ax,ax之后
第三次:读取jmp ax之后
第四次:执行jmp ax修改IP
最后IP的值为0000H,因为最后ax中的值为0000H,所以IP中的值也为0000H
应该是这样 2515504707 发表于 2020-3-30 23:21
答:一共修改四次
第一次:读取mov ax,bx之后
你要先修改cs:ip的值让他指向这个代码的第一句话呀
不然这个源程序怎么运行 就是要努力呀 发表于 2020-3-31 10:24
你要先修改cs:ip的值让他指向这个代码的第一句话呀
不然这个源程序怎么运行
假如我的代码放在内存中的1000:0位置
cs:ip初始化指向2000:0
那肯定要先修改cs:ip让它指向1000:0呀 就是要努力呀 发表于 2020-3-31 10:25
假如我的代码放在内存中的1000:0位置
cs:ip初始化指向2000:0
那肯定要先修改cs:ip让它指向1000:0呀
有道理 2515504707 发表于 2020-3-30 23:21
答:一共修改四次
第一次:读取mov ax,bx之后
为什么jump ax之后ip=0了 (1)mov ax,bx
(2)sub ax,ax //sub,减法指令
(3)jmp ax
第一次修改,ip指向即读取指令(1)
第二次修改,(1)执行完成,ip+2
第三次修改,(2)执行完成,ip+2,ax==0
第四次修改,(3)执行完成,ip==ax==0 朔风刀 发表于 2020-4-3 09:38
为什么jump ax之后ip=0了
因为第二条指令 sub ax,ax ,表示寄存器ax中的值自身做减法存入ax寄存器,即寄存器归0。
第三条指令 jmp ax,表示段地址CS值不变,只改变IP值。第二条指令ax已经归0,所以jmp ax 指令完成ip==0.
第三条指令你可以理解为 mov ip,ax 即mov ip,0000H
希望有所帮助 adamhex 发表于 2020-4-12 21:52
因为第二条指令 sub ax,ax ,表示寄存器ax中的值自身做减法存入ax寄存器,即寄存器归0。
第三条指令 jm ...
牛逼,懂了 我觉得第一次直线代码段地址不算,因为题目说代码执行后,所以不考虑执行第一行代码之前的更改。所以我觉得二楼的答案是正确的 执行 jmp as ,ip 不需要加2嘛
页:
[1]