1_汇编程序员眼中的系统结构

汇编程序员眼中的系统结构

汇编程序员眼中的系统结构_

如何从 C 代码生成汇编代码

int sum(int x, int y)
{
    int t = x + y;
    return t;
}

很简单的代码, 下面就是生成的对应的 X86-32 汇编代码 (AT&T 汇编指令)

sum :
    pushl %ebp
    movl %exp, %ebp
    movl 12(%ebp), %eax
    addl 8(%ebp), %eax
    movl %ebp, %esp
    popl %ebp
    ret

如何生成汇编代码 ?

gcc -o2 -S code.c -m32 -fno-omit-frame-pointer -S 就是把源代码序编译成一个 .s 汇编代码. -m32 是让编译器生成 32 位代码.

汇编语言的数据格式

AT&T 汇编代码, 刚才的指令后面加上了 l. 这就是说, 我这条指令的操作数, 可以是字节, 也可以是字, 也可以是双字.

在 X86-32 中, 使用 "字(word)" 来表示 16 位整数类型, "双字" 表示 32 位.

汇编语言指令所处理的数据类型, 一般是采用汇编指令后缀来进行区分.