1)
.LC0:
.string "%d\n"
.section .text.startup,"ax",@progbits
.p2align 4,,15
.globl main
.type main, @function
2)把$5变成相应的寄存器就行。
movl $5, %esi
leaq .LC0(%rip), %rdi
call printf@PLT
3)
.file "b6.array.c"
.text
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "%d\n"
.section .text.startup,"ax",@progbits
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB23:
.cfi_startproc
pushq %r13
.cfi_def_cfa_offset 16
.cfi_offset 13, -16
pushq %r12
.cfi_def_cfa_offset 24
.cfi_offset 12, -24
movl $1116, %edi
pushq %rbp
.cfi_def_cfa_offset 32
.cfi_offset 6, -32
pushq %rbx
.cfi_def_cfa_offset 40
.cfi_offset 3, -40
movl $1717986919, %ebp # 啥意思?
subq $424, %rsp # 堆栈指针
movl %eax, %esi
leaq .LC0(%rip), %rdi
call printf@PLT
.cfi_def_cfa_offset 464
movq %rsp, %rbx
movq %fs:40, %rax
movq %rax, 408(%rsp)
xorl %eax, %eax
movl %eax, %esi
leaq .LC0(%rip), %rdi
call printf@PLT
leaq 400(%rbx), %r12 # 100个,4*100
movq %rbx, %r13 # 此时r13-r12=400, 即100个数组
call srand@PLT
movl $5, %esi
leaq .LC0(%rip), %rdi
call printf@PLT
.p2align 4,,10
.p2align 3
.L2:
xorl %eax, %eax
addq $4, %r13 # r13是i*4的值,相当于i
call rand@PLT # 可能保存在eax中,
movl %eax, %ecx # CX:计数暂存器
movl %eax, %esi
leaq .LC0(%rip), %rdi
call printf@PLT
imull %ebp # 单操作数格式将乘积存放在 AX、DX:AX 或 EDX:EAX 中:
movl %ecx, %eax
sarl $31, %eax # sarl k,D . D = D >> k . 算数右移
sarl $2, %edx #
subl %eax, %edx
leal (%rdx,%rdx,4), %eax
addl %eax, %eax
subl %eax, %ecx #
movl %ecx, -4(%r13) # r13=arr[]
cmpq %r12, %r13 # r12代表100,
jne .L2
pxor %xmm0, %xmm0
.p2align 4,,10
.p2align 3
.L3:
paddd (%rbx), %xmm0
addq $16, %rbx
cmpq %rbx, %r13
jne .L3
movdqa %xmm0, %xmm1
movq 408(%rsp), %rax
xorq %fs:40, %rax
psrldq $8, %xmm1
paddd %xmm1, %xmm0
movdqa %xmm0, %xmm1
psrldq $4, %xmm1
jne .L10
addq $424, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 40
paddd %xmm1, %xmm0
leaq .LC0(%rip), %rsi
popq %rbx
.cfi_def_cfa_offset 32
popq %rbp
.cfi_def_cfa_offset 24
popq %r12
.cfi_def_cfa_offset 16
popq %r13
.cfi_def_cfa_offset 8
movd %xmm0, %edx
movl $1, %edi
xorl %eax, %eax
jmp __printf_chk@PLT
.L10:
.cfi_restore_state
call __stack_chk_fail@PLT
.cfi_endproc
.LFE23:
.size main, .-main
.ident "GCC: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0"
.section .note.GNU-stack,"",@progbits