2013-11-04 254 views
1

我给这个leal命令,我必须填写他们的意思。 我一直在努力研究leal命令如何操作,但我一直在Web上找到相关材料时遇到困难。我发现的是leal(src1,src2),dst // dst = src2 + src1。 此信息不能提供足够的信息,因为leal命令比这更复杂。汇编语言IA32

这是怎么看?

假设%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

我会使用英特尔的语法所以它更容易阅读。例如。 'lea edx,[eax + 6]'。 – greatwolf

回答

1

我会做的是在翻译上述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 
+0

英特尔语法+1。 AT&T语法杀死了汇编编程。 :) – johnfound