x86 汇编的基础知识
x86 汇编器编程 基于x86 实现编译器首先得了解x86 平台的指令调度, 以下是一些我在实现编译器过程中用到的基础知识! 大部分内容参考了 青木的自制编译器, 基于GNU汇编器 c语言使用gcc 编译, 而gcc 编译器将c代码转化为汇编之后, 也是用的GNU as 的汇编器将汇编语言 .s 转化为.o,然后再连接, 因此如果自制编译器, 也是做到汇编这一步, 所以又得学x86 汇编器的使用方法! gcc 用的 GNU, 那我就直接使用gcc! 基本使用 编译: as hello.s //默认生成 a.out 也可以指定名字: as - o hello . o hello . s 生成目标文件后还要连接才可以执行。 gcc hello.o -o hello 最后就是 . / hello 语法 指令 指令包括 助记符 和 操作数 组成,比如 movl %esp, %ebp , movl 助记符, 后面两个为操作数, 操作数可以为多个!逗号分隔。 这个是由cpu直接执行的指令 汇编伪操作 以点 “.” 开头的, 末尾没有冒号 “:” 的 行 都是汇编伪操作行。 由汇编器执行,记录元数据和设定指令的属性。 汇编的首行缩进是没有影响的 标签 以冒号“:” 结尾的 行 都是标签行 冒号是语法, 标签名为冒号前面的值。 一般命名加上 . ,避免和代码里面的名字重复。 助记符后缀 后缀 大小