1

我收到了这些leal说明,我必须填写它们的意思。我一直在努力研究leal指令的作用,但我一直很难在网上找到相关材料。我发现的是

leal (src1, src2), dst  //dst = src2 + src1

该信息没有提供足够的信息,因为leal指令远比这复杂。

这看起来怎么样?

假设%eax保存值 x 并%ecx保存值 y。填在表格中。

%edx =  x + 6___________leal 6(%eax),%edx
%edx =  x + y___________leal (%eax,%ecx),%edx
%edx =  x * 5y___________leal (%eax,%ecx,4),%edx
%edx =  9x + 7___________leal 7(%eax,%eax,8),%edx
%edx =  4y + 10___________leal 0xA(,%ecx,4),%edx
%edx =  x + 3y + 9___________leal 9(%eax,%ecx,2),%edx
4

1 回答 1

4

我要做的是将上述 att 语法转换为 intel 语法作为第一步,因为这样分析起来更直观。

lea edx, [eax + 6]            
lea edx, [eax + ecx]          
lea edx, [eax + ecx * 4]      
lea edx, [eax + eax * 8 + 7]  
lea edx, [ecx * 4 + 10]       
lea edx, [eax + ecx * 2 + 9]  

即使您对汇编语法一无所知,您也可以通过查看上面的内容来弄清楚它们的含义。您可以在脑海中将其映射为您喜欢的编程语言中的赋值语句:您要分配的东西在左侧,被分配的值在右侧。现在只需用您的xy值替换寄存器即可:

edx = x + 6
edx = x + y
edx = x + y*4
edx = x + x*8 + 7 => x*9 + 7
edx = y*4 + 10
edx = x + y*2 + 9
于 2013-11-04T01:50:43.913 回答