如何将IA32'cmp'指令转换为Y86?

amo*_*luc 2 x86 assembly cmp y86

IA32Y86

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其转换为Y86汇编代码.我在翻译比较指令时遇到问题:

 cmpl    %ebx, %ecx
Run Code Online (Sandbox Code Playgroud)

谢谢.

nrz*_*nrz 10

似乎Y86没有cmp指令.但是,它有sub,pushpop.

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

pushl %ecx
subl  %ebx, %ecx
popl  %ecx
Run Code Online (Sandbox Code Playgroud)

cmpsubcmp存储结果的差异完全相同,它只更新标志.因此,cmp可以随时被替换push,sub,pop(如果在堆栈中的足够的空间).