对于一项分配,我应该研究每个汇编命令如何对应于此给定的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
在此特定功能的上下文中,这三行是做什么的?