【问题标题】:IA32 assembly code to Y86 assembly code: leal instructionIA32汇编代码转Y86汇编代码:leal指令
【发布时间】:2012-11-24 21:05:31
【问题描述】:

我正在研究如何将 IA32 汇编代码转换为 Y86 汇编代码,我被困在 IA32 代码中的以下指令中:

 leal(%edx, %eax), %eax

我找不到 Y86 代码的等效指令。我有以下两个版本,但我不确定哪个是正确的:

版本 1:

 mrmovl (%edx), %ebx
 mrmovl (%eax), %esi
 addl %ebx, %esi
 rrmovl %esi, 5eax

版本 2:

 addl %edx, %eax

有人有更好的主意吗?

【问题讨论】:

    标签: assembly x86 y86


    【解决方案1】:

    LEA 不访问内存,它只进行(地址)算术运算。因此,您的版本 #2 是正确的。

    请注意,在 x86 上 LEA 不会影响标志,而 ADD 会。 LEA 还支持更复杂的有效地址语法,不过将其转换为 y86 非常简单。例如,

    leal offset(%eax, %ebx, 4), %edx
    

    变成:

    rrmovl %ebx, %edx
    addl %edx, %edx
    addl %edx, %edx
    addl %eax, %edx
    pushl %eax           # save eax which used as temporary for adding the offset
    irmovl $offset, %eax
    addl %eax, %edx
    popl %eax            # restore eax
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多