x86汇编:“ xorl”和“ cmpl”有什么作用?

时间:2018-11-18 03:58:34

标签: c assembly x86

对于一项分配,我应该研究每个汇编命令如何对应于此给定的C代码:

    int bubblePass(int V[], int n) {
    int i ;
    int swappedCount = 0 ;
    for (i=0; i < n-1; ++i) {
        if (V[i] > V[i+1]) {
            int tmpSwapVar;
            tmpSwapVar = V[i] ;
            V[i] = V[i+1] ;
            V[i+1] = tmpSwapVar ;
            swappedCount++ ;
        }
    }
    return swappedCount ;
}    

组装代码:

    .file   "bubblepass.c" 
    .text
    .p2align 4,,15
    .globl  bubblePass
    .type   bubblePass, @function
bubblePass:
.LFB0:
    .cfi_startproc
    subl    $1, %esi 
    testl   %esi, %esi
    jle .L5 
    xorl    %edx, %edx 
    xorl    %eax, %eax
    .p2align 4,,10
    .p2align 3
.L4:
    movl    (%rdi,%rdx,4), %ecx
    movl    4(%rdi,%rdx,4), %r8d
    cmpl    %r8d, %ecx
    jle .L3
    movl    %r8d, (%rdi,%rdx,4)
    movl    %ecx, 4(%rdi,%rdx,4) 
    addl    $1, %eax
.L3:
    addq    $1, %rdx
    cmpl    %edx, %esi
    jg  .L4
    rep ret
.L5:
    xorl    %eax, %eax
    ret
    .cfi_endproc
.LFE0:
    .size   bubblePass, .-bubblePass
    .ident  "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4"
    .section    .note.GNU-stack,"",@progbits

我对汇编代码了解不多,一直在试图弄清这一点。大部分看起来很简单,但是我在理解这三行的含义方面很挣扎:

[在.LFB0中]

xorl %edx, %edx
xorl %eax, %eax

[in .L4]

cmpl %r8d, %ecx

在此特定功能的上下文中,这三行是做什么的?

0 个答案:

没有答案