我已经给出了这些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
答案 0 :(得分:3)
我要做的是将上面的att语法翻译成英特尔语法作为第一步,因为分析更加直观。
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]
即使您对汇编语法一无所知,您也可以看一下上面的内容,可以找出它们的含义。您可以在心理上将此映射为您喜欢的编程语言中的赋值语句:您分配给的东西位于左侧,值被分配位于右侧。现在只需用您的x
和y
值替换寄存器:
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