跳转至

第03章 程序的机器级表示

3. 2 程序编码

编译:将源代码转化成可执行代码 就是说程序能够让机器看得懂

希望能来张图

gcc -Og -o p p1.c p2.c

存储器:临时存储数据和指令的硬件

寄存器:CPU暂存指令、数据和地址的存储器

//mstor.c
long mult2(long, long);

void multstore(long x, long y, long *dest){
    long t = mult2(x, y);
    *dest = t;
}
//GCC运行编译器,产生一个汇编文件mstore.s
gcc -Og -S mstore.c
#查看汇编文件内容
type mstore.c

        .file   "mstore.c"

        .text
        .globl  multstore
        .def    multstore;      .scl    2;      .type   32;     .endef
        .seh_proc       multstore
multstore:
        pushq   %rbx
        .seh_pushreg    %rbx
        subq    $32, %rsp
        .seh_stackalloc 32
        .seh_endprologue
        movq    %r8, %rbx
        call    mult2
        movl    %eax, (%rbx)
        addq    $32, %rsp
        popq    %rbx
        ret
        .seh_endproc
        .ident  "GCC: (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0"
        .def    mult2;  .scl    2;      .type   32;     .endef
#产生目标代码文件mstore.c,二进制格式
gcc -Og -c .\mstore.c

#反汇编:将机器语言代码转换成汇编语言代码的过程
objdump -d mstore.o