问题
IA32 to Y86
ATT Assembly
I have the following IA32 assembly code:
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
I'm trying to convert it to Y86 assembly code. I'm having trouble translating the compare instruction:
cmpl %ebx, %ecx
Thanks.
回答1:
It seems that Y86 does not have cmp
instruction. However, it has sub
, push
and pop
.
So cmpl %ebx, %ecx
can be converted to the following code:
pushl %ecx
subl %ebx, %ecx
popl %ecx
cmp
is exactly the same as sub
, with the difference that cmp
does not store the result, it only updates the flags. So cmp
can always be replaced with push
, sub
, pop
(if there's enough space in the stack).
来源:https://stackoverflow.com/questions/15098073/how-to-convert-ia32-cmp-instruction-to-y86