2013-02-26 46 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

相關問題