题6

题目

Q:程序 中有两个变量 ,被分别分配在寄存器 eax 和 edx 中, 中语句 “if j){…} ”对应的指令序列如下 (左边为指令地址, 中间为机器代码, 右边为汇编指令), 其中 jle 指令的偏移量为

804846a  39 c2        cmp     dword ptr [edx], eax
804846c  7d ed        jle     xxxxxxxx

若执行到 处的 指令时, ,则 指令执行后将会转到 ( ) 处的指令执行。
A.
B.
C.
D.

分析

A:jle是jump if less or equal的缩写,即小于等于时跳转。
这里要注意的是,这里的cmp指令是比较edx和eax的值,而不是eax和edx,所以这里是比较j和i的值。这里是i<j,所以应该跳转。

,即 edx 的内容为 100,eax 的内容为 指令就是对这两个数做减法, 显然 ,满足 jle 指令小于或等于的条件,jle 指令长度为 2 字节,所以 jle 指令执行后将转移到当前 值 + 偏移量 处执行。