|
发表于 2021-7-8 20:32:48
|
显示全部楼层
汇编语言版本
- $ gcc -S main.c
- $ cat main.s
- .file "main.c"
- .text
- .globl ya_log
- .def ya_log; .scl 2; .type 32; .endef
- .seh_proc ya_log
- ya_log:
- pushq %rbp
- .seh_pushreg %rbp
- movq %rsp, %rbp
- .seh_setframe %rbp, 0
- subq $80, %rsp
- .seh_stackalloc 80
- .seh_endprologue
- movsd %xmm0, 16(%rbp)
- pxor %xmm0, %xmm0
- movsd %xmm0, -8(%rbp)
- jmp .L2
- .L3:
- movsd -8(%rbp), %xmm1
- movsd .LC1(%rip), %xmm0
- addsd %xmm1, %xmm0
- movsd %xmm0, -8(%rbp)
- .L2:
- movsd -8(%rbp), %xmm0
- movq .LC2(%rip), %rax
- movapd %xmm0, %xmm1
- movq %rax, -40(%rbp)
- movsd -40(%rbp), %xmm0
- call pow
- movapd %xmm0, %xmm1
- movsd 16(%rbp), %xmm0
- ucomisd %xmm1, %xmm0
- ja .L3
- movsd .LC3(%rip), %xmm0
- movsd %xmm0, -16(%rbp)
- movq $0, -24(%rbp)
- jmp .L4
- .L11:
- movsd -8(%rbp), %xmm0
- movq .LC2(%rip), %rax
- movapd %xmm0, %xmm1
- movq %rax, -40(%rbp)
- movsd -40(%rbp), %xmm0
- call pow
- movq %xmm0, %rax
- movq %rax, -32(%rbp)
- movsd 16(%rbp), %xmm0
- ucomisd -32(%rbp), %xmm0
- jbe .L14
- movsd -8(%rbp), %xmm0
- addsd -16(%rbp), %xmm0
- movsd %xmm0, -8(%rbp)
- jmp .L7
- .L14:
- movsd -32(%rbp), %xmm0
- ucomisd 16(%rbp), %xmm0
- jbe .L15
- movsd -8(%rbp), %xmm0
- subsd -16(%rbp), %xmm0
- movsd %xmm0, -8(%rbp)
- jmp .L7
- .L15:
- movsd -8(%rbp), %xmm0
- jmp .L10
- .L7:
- movsd -16(%rbp), %xmm0
- movsd .LC4(%rip), %xmm1
- divsd %xmm1, %xmm0
- movsd %xmm0, -16(%rbp)
- addq $1, -24(%rbp)
- .L4:
- cmpq $99, -24(%rbp)
- jbe .L11
- movsd -8(%rbp), %xmm0
- .L10:
- addq $80, %rsp
- popq %rbp
- ret
- .seh_endproc
- .def __main; .scl 2; .type 32; .endef
- .section .rdata,"dr"
- .LC5:
- .ascii "%.20lf\12\0"
- .text
- .globl main
- .def main; .scl 2; .type 32; .endef
- .seh_proc main
- main:
- pushq %rbp
- .seh_pushreg %rbp
- movq %rsp, %rbp
- .seh_setframe %rbp, 0
- subq $64, %rsp
- .seh_stackalloc 64
- .seh_endprologue
- call __main
- movq $0, -8(%rbp)
- jmp .L17
- .L22:
- movq -8(%rbp), %rax
- testq %rax, %rax
- js .L18
- cvtsi2sdq %rax, %xmm0
- jmp .L19
- .L18:
- movq %rax, %rdx
- shrq %rdx
- andl $1, %eax
- orq %rax, %rdx
- cvtsi2sdq %rdx, %xmm0
- addsd %xmm0, %xmm0
- .L19:
- call log
- movq %xmm0, %rax
- movq %rax, %rdx
- movq %rdx, -24(%rbp)
- movsd -24(%rbp), %xmm0
- movapd %xmm0, %xmm1
- movq %rax, %rdx
- leaq .LC5(%rip), %rcx
- call printf
- movq -8(%rbp), %rax
- testq %rax, %rax
- js .L20
- cvtsi2sdq %rax, %xmm0
- jmp .L21
- .L20:
- movq %rax, %rdx
- shrq %rdx
- andl $1, %eax
- orq %rax, %rdx
- cvtsi2sdq %rdx, %xmm0
- addsd %xmm0, %xmm0
- .L21:
- call ya_log
- movq %xmm0, %rax
- movq %rax, %rdx
- movq %rdx, -24(%rbp)
- movsd -24(%rbp), %xmm0
- movapd %xmm0, %xmm1
- movq %rax, %rdx
- leaq .LC5(%rip), %rcx
- call printf
- movl $10, %ecx
- call putchar
- addq $1, -8(%rbp)
- .L17:
- cmpq $49, -8(%rbp)
- jbe .L22
- movl $0, %eax
- addq $64, %rsp
- popq %rbp
- ret
- .seh_endproc
- .section .rdata,"dr"
- .align 8
- .LC1:
- .long 0
- .long 1072693248
- .align 8
- .LC2:
- .long 2333366121
- .long 1074118410
- .align 8
- .LC3:
- .long 0
- .long 1071644672
- .align 8
- .LC4:
- .long 0
- .long 1073741824
- .ident "GCC: (GNU) 7.4.0"
- .def pow; .scl 2; .type 32; .endef
- .def log; .scl 2; .type 32; .endef
- .def printf; .scl 2; .type 32; .endef
- .def putchar; .scl 2; .type 32; .endef
- $
复制代码 |
|