近来工作和学习的时候多少会遇到一些汇编代码,特在此总结一些简单的汇编语言知识点。以能看懂常见的汇编代码为目的,不做深入探究。
语法
x86汇编语言主要有两个语法分支: AT&T和Intel。我们平常接触到的GNU系的工具(包括GCC,OBJDUMP等)都是使用AT&T语法,若无特别说明,下面的汇编代码例子也是如此。
AT&T | Intel | 注释 | |
---|---|---|---|
寄存器前缀 | %eax | eax | |
立即数前缀 | $5 | 5 | |
指令后缀 | movl | mov | 操作数长度[3] |
参数次序 | movl $5, %eax | mov eax, 5 | R[eax] = 5 |
取址1 | var | [var] | 变量 |
取址2 | 0x8(%eax) | [eax + 0x8] | 偏移 |
取址3 | arr(, %eax, 4) | [eax * 4 + arr] | 数组 |