2013-02-26 40 views
2

IA32Y86如何将IA32'cmp'指令转换为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 

谢谢。

回答

9

看来Y86没有cmp指令。但是,它有sub,pushpop

所以cmpl %ebx, %ecx可转换为下面的代码:

pushl %ecx 
subl %ebx, %ecx 
popl %ecx 

cmp是完全一样sub,与cmp不存储结果的差异,只更新标志。所以cmp总是可以用pushsub,pop(如果堆栈中有足够的空间)来代替。

+0

有道理,谢谢! – amorimluc 2013-02-26 20:23:31

相关问题