IA32 至 Y86
ATT大会
我有以下IA32汇编代码:
Bubble:
.LFB0:
pushl %esi
pushl %ebx
movl 16(%esp), %esi
movl 12(%esp), %edx
subl $1, %esi
andl %esi, %esi
jle .L1
.L7:
xorl %eax, %eax
.L5:
movl 4(%edx,%eax,4), %ecx
movl (%edx,%eax,4), %ebx
cmpl %ebx, %ecx
jge .L4
movl %ebx, 4(%edx,%eax,4)
movl %ecx, (%edx,%eax,4)
.L4:
addl $1, %eax
cmpl %eax, %esi
jg .L5
subl $1, %esi
jne .L7
.L1:
popl %ebx
popl %esi
ret
我正在尝试将其转换为Y86汇编代码。我在翻译比较指令时遇到了麻烦:
cmpl %ebx, %ecx
感谢。
答案 0 :(得分:9)
似乎Y86没有cmp
指令。但是,它有sub
,push
和pop
。
因此cmpl %ebx, %ecx
可以转换为以下代码:
pushl %ecx
subl %ebx, %ecx
popl %ecx
cmp
与sub
完全相同,区别在于cmp
不存储结果,它只更新标志。因此cmp
始终可以替换为push
,sub
,pop
(如果堆栈中有足够的空间)。