作业题求助汇编大佬,如下图
机器码和汇编指令如下图所示,第六条机器码的偏移值为什么是F7?机器码 汇编指令
40 s:inc ax
90 nop
90 nop
BB0200 mov bx,2
43 inc,bx
EBF7 jmp s
90 nop 通过DEBUG就很明显的可以发现规律,指令也是存储在内存单元中的数据,每条指令虽然长短不一,但是都是8字节存放;
jmp s翻译之后是EB 相对当前IP长度
又因为8086采用的是小端法(低地址存数据低位),从标号s到jmp s指令一共占据了9个内存单元,而一般指令执行顺序是从前到后,但是现在却是向前跳
所以就需要计算一共向前跳几个内存单元(jmp指令本身也算);所以请楼主自行计算下-9的补码。
换言之,我们知道,IP指向的是下一条指令所在内存单元,所以也可以理解成通过jmp指令控制IP跳跃的步数。
最好的体会还是自行修改程序,比如测试不同的s标号点,从后往前或者从前往后跳。 CodingCat_k 发表于 2020-6-28 15:32
通过DEBUG就很明显的可以发现规律,指令也是存储在内存单元中的数据,每条指令虽然长短不一,但是都是8字节 ...
高手说的很对
40 s:inc ax
90 nop
90 nop
BB0200 mov bx,2
43 inc,bx
EBF7 jmp s
jmp s 的两个字节 到 S:标记处往上数 需要9个字节 所以跳转 -9
补码 9取反加一(二进制)F7 jhanker 发表于 2020-6-28 16:02
高手说的很对
40 s:inc ax
90 nop
高手谈不上,就是看过一点点汇编{:10_284:} CodingCat_k 发表于 2020-6-28 15:32
通过DEBUG就很明显的可以发现规律,指令也是存储在内存单元中的数据,每条指令虽然长短不一,但是都是8字节 ...
666学习了~ jhanker 发表于 2020-6-28 16:02
高手说的很对
40 s:inc ax
90 nop
都是高手 我是弟弟~
页:
[1]