现在,能够静下心来去读一段汇编代码的程序员已经不多,因为大多数人的工作中基本用不到。但是能够读懂汇编代码能够提高程序员对程序如何在机器上跑起来的理解和提高程序员的基本功。
想要看懂汇编语言,首先就要熟悉汇编语言各种寻址方式。汇编语言不同的代码格式,本文主要介绍AT&T。Linux 内核使用的就是这样格式,linux 上的工具如gcc和objdump默认生成的代码也是AT&T格式。
简单说一下AT&T汇编,"#"井号开头的是注释行,"."点开始的指令一般都是伪指令,"$"美元符号修饰立即数,"%"修饰寄存器。AT&T 和Intel格式的对比可以参考这篇文章 https://www.ibm.com/developerworks/cn/linux/l-assembly/
汇编语言寻址方式主要有下表几种方式:
1. 立即数寻址
把常数放到寄存器或存储器中
movl $2, %ebx # 把2放到寄存器ebx中