从fibonacci数列对比C语言和其对应的汇编代码

来源:互联网 发布:mac os x10.11安装 编辑:程序博客网 时间:2024/06/05 03:27

C源码

[master][~/GitProjects/test/fibonacci]$ cat fib.c                                              [2:59:06]#include <stdio.h>int main(void){    int x,y,z;    while(1){        x = 0;    y = 1;    do {            printf("%d\n", x);        z = x + y;        x = y;        y = z;    }while(x < 255);    }}

汇编代码

[master][~/GitProjects/test/fibonacci]$ cat fib.disass                                         [2:59:10]fib:(__TEXT,__text) section_main:0000000100000f30    pushq   %rbp0000000100000f31    movq    %rsp, %rbp0000000100000f34    subq    $0x20, %rsp0000000100000f38    movl    $0x0, -0x4(%rbp)0000000100000f3f    movl    $0x0, -0x8(%rbp)0000000100000f46    movl    $0x1, -0xc(%rbp)0000000100000f4d    leaq    0x56(%rip), %rdi0000000100000f54    movl    -0x8(%rbp), %esi0000000100000f57    movb    $0x0, %al0000000100000f59    callq   0x100000f880000000100000f5e    movl    -0x8(%rbp), %esi0000000100000f61    addl    -0xc(%rbp), %esi0000000100000f64    movl    %esi, -0x10(%rbp)0000000100000f67    movl    -0xc(%rbp), %esi0000000100000f6a    movl    %esi, -0x8(%rbp)0000000100000f6d    movl    -0x10(%rbp), %esi0000000100000f70    movl    %esi, -0xc(%rbp)0000000100000f73    movl    %eax, -0x14(%rbp)0000000100000f76    cmpl    $0xff, -0x8(%rbp)0000000100000f7d    jl  0x100000f4d0000000100000f83    jmp 0x100000f3f

可能这是AT&T的风格,不太好看,使用gdb来intel的风格。

[master][~/GitProjects/test/fibonacci]$ gdb ./fib                                              [3:00:10]GNU gdb (GDB) 7.12(gdb) set disassembly-flavor intel(gdb) disassembleNo frame selected.(gdb) disassemble mainDump of assembler code for function main:   0x0000000100000f30 <+0>: push   rbp   0x0000000100000f31 <+1>: mov    rbp,rsp   0x0000000100000f34 <+4>: sub    rsp,0x20   0x0000000100000f38 <+8>: mov    DWORD PTR [rbp-0x4],0x0   0x0000000100000f3f <+15>:    mov    DWORD PTR [rbp-0x8],0x0   0x0000000100000f46 <+22>:    mov    DWORD PTR [rbp-0xc],0x1   0x0000000100000f4d <+29>:    lea    rdi,[rip+0x56]        # 0x100000faa   0x0000000100000f54 <+36>:    mov    esi,DWORD PTR [rbp-0x8]   0x0000000100000f57 <+39>:    mov    al,0x0   0x0000000100000f59 <+41>:    call   0x100000f88   0x0000000100000f5e <+46>:    mov    esi,DWORD PTR [rbp-0x8]   0x0000000100000f61 <+49>:    add    esi,DWORD PTR [rbp-0xc]   0x0000000100000f64 <+52>:    mov    DWORD PTR [rbp-0x10],esi   0x0000000100000f67 <+55>:    mov    esi,DWORD PTR [rbp-0xc]   0x0000000100000f6a <+58>:    mov    DWORD PTR [rbp-0x8],esi   0x0000000100000f6d <+61>:    mov    esi,DWORD PTR [rbp-0x10]   0x0000000100000f70 <+64>:    mov    DWORD PTR [rbp-0xc],esi   0x0000000100000f73 <+67>:    mov    DWORD PTR [rbp-0x14],eax   0x0000000100000f76 <+70>:    cmp    DWORD PTR [rbp-0x8],0xff   0x0000000100000f7d <+77>:    jl     0x100000f4d <main+29>   0x0000000100000f83 <+83>:    jmp    0x100000f3f <main+15>End of assembler dump.
阅读全文
0 0
原创粉丝点击