IA32汇编代码到Y86汇编代码:leal指令

时间:2012-11-24 21:05:32

标签: assembly x86 y86

我正在研究如何将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

有没有人有更好的主意?

1 个答案:

答案 0 :(得分:4)

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