【问题标题】:How does leal instruction work?真实教学如何运作?
【发布时间】:2013-11-04 01:17:56
【问题描述】:

我收到了这些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

【问题讨论】:

  • 我会使用 intel 语法,这样更容易阅读。例如。 lea edx, [eax + 6].
  • lea assembly instruction的可能重复
  • @phuclv:如果您想在非指针值上为 LEA 提供规范副本,Using LEA on values that aren't addresses / pointers? 是我的尝试。 (但更多的是关于 LEA 与 MOV,而不是如何实际将其用于数学)。如果有的话,我比你链接的那个更喜欢这个问答。答案和问题,我可能会考虑将其复制。这么多 LEA 问题,这是一片混乱的荒地,有这么多分散的小答案来解释一个部分。您必须真正了解 CPU 和 asm 才能完全理解。

标签: assembly x86


【解决方案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

【讨论】:

  • +1 表示英特尔语法。 AT&T 语法扼杀了汇编编程。 :)
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 2011-12-26
  • 1970-01-01
相关资源
最近更新 更多