0

我正在阅读我的一门课程的练习考试。该问题的体系结构是x86。问题:

Which of the following lines of pseudo C code performs the same operation as the 
assembly statement 
    lea 0xffffffff(%esi), %eax ?

选项:

a) *(esi-1) = eax
b) esi = eax + 0xffffffff
c) eax = esi - 1
d) eax = *(esi -1)

因为它是一个“lea”操作,我觉得答案应该是(c),但显然答案键是(a)。这是一个错字吗?还是我只是理解不好。谢谢你。

4

2 回答 2

2

答案c是对的。

这种代码通常由编译器(和一些人:-))生成,以利用lea非破坏性版本的事实add,它允许最多 3 个输入操作数并且保持标志不变。

于 2012-05-10T07:24:56.763 回答
1

最正确的解释是:

eax = (esi + 0xFFFFFFFF) & 0xFFFFFFFF;

当然这可以简化为:

c) eax = esi - 1;

做相反的事情(将伪 C 转换回 AT&T):

a) movl %eax,0xffffffff(%esi)
b) lea 0xffffffff(%eax),%esi
c) lea 0xffffffff(%esi), %eax
d) movl 0xffffffff(%esi), %eax
于 2012-05-10T04:30:52.040 回答