本文介绍的是目前最常见的x86汇编语言,即Intel公司的CPU使用的那一种
寄存器种类
早期的x86 CPU只有8个寄存器,而且每个都有不同的用途。现在的寄存器已经有100多个了,都变成通用寄存器,不特别指定用途了,但是早期寄存器的名字都被保存了下来
EAX EBX ECX EDX
EDI ESI
EBP ESP
除了ESP之外,其他寄存器都是通用的,ESP有特定用途,用来保存当前Stack地址
伪指令
示例 | 含义 |
---|---|
.section .text | 把以下代码放入.text节 |
.string "foobar" | 定义包含"foobar"的ASCII字符串 |
.long 0x12345678 | 定义一个双字0x12345678 |
代码与数据分离
编译器通常将代码和数据分为不同的节,这在反汇编或分析二进制文件的时候非常方便,因为这样就知道程序中哪些字节被解释为代码,哪些字节被解释为数据。但是,x86架构本质上并没有阻止在同一个节中混合代码和数据,实际上某些编译器或者手写汇编程序也确实将数据和代码混合在同一个节