汇编语言

汇编语言（或）Assembler language , IBM Knowledge center是任何一种用于电子计算机、微处理器、微控制器，或其他可编程器件的低级语言。在不同的设备中，汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构，而不像许多高级语言，可以在不同系统平台之间移植。

使用汇编语言编写的源代码，然后通过相应的汇编程序将它们转换成可执行的机器代码。这一过程被称为汇编过程。

汇编语言使用助记符（）来代替和表示特定低级机器语言的操作。特定的汇编目标指令集可能会包括特定的操作数。许多汇编程序可以识别代表地址和常量的标签（）和符号（），这样就可以用字符来代表操作数而无需采取寫死的方式。普遍地说，每一种特定的汇编语言和其特定的机器语言指令集是一一对应的。

许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编寫工具经常会提供巨集（），它们也被称为-{zh-cn:宏; zh-tw:巨;}-汇编器。

现在汇编语言已不像其他大多數的程序設計語言一樣被廣泛用于程序設計，在今天的實際應用中，它通常被應用在底層硬件操作和高要求的程序優化的场合。驅動程序、嵌入式操作系统和實時運行程序中都会需要汇编語言。

 工具 
典型的現代組譯器（）建造目的碼，由解譯組語指令集的-{zh-hans:助记符; zh-hant:易記碼;}-（）到操作碼，並解析符號名稱（）成為記憶體位址以及其它的實體。使用符號參考（）是組譯器的一個重要特徵，它可以節省修改程式後人工轉址（）的乏味耗時計算。基本就是把机器码变成一些字母而已，编译的时候再把输入的指令字母替换成为晦涩难懂的机器码。

 现状 
随着现代软件系统越来越庞大复杂，大量经过了封装的高级语言如C/C++，Pascal/Object Pascal也应运而生。这些新的语言使得程序员在开发过程中能够更简单，更有效率，使软件开发人员得以应付快速的软件开发的要求。而汇编语言由于其复杂性使得其适用领域逐步减小。但这并不意味着汇编已无用武之地。由于汇编更接近机器语言，能够直接对硬件进行操作，生成的程序与其他的语言相比具有更高的运行速度，占用更小的内存，因此在一些对于时效性（）要求很高的程序以及工业控制方面大量应用。

因此，虽然有众多编程语言可供选择，但汇编依然是各大學计算机科学类专业学生的必修课，以讓學生深入了解计算机的运行原理。

 組譯風格 
x86/amd64汇编指令的两大风格分别是Intel汇编与AT&T汇编，分别被Microsoft Windows/Visual C++与GNU/Gas采用（Gas也可使用Intel汇编风格）：
 项目  Intel风格  AT&T风格 操作数顺序  目标操作数在前  源操作数在前 寄存器  原样  加%前缀 立即数  原样  加$前缀 16进制立即数  用后缀B与H分别表示二进制与十六进制对于16进制字母开头的要加前缀0  加前缀0x 访问内存长度的表示  前缀BYTE PTR, WORD PTR, DWORD PTR
和QWORD PTR表示字节,字,双字和四字 后缀b,w,l,q表示字节,字,双字和四字 引用全局或静态变量var的值  [var]  var 引用全局或静态变量var的地址 var $var 引用局部变量  需要基于栈指针（rsp）绝对寻址[imm]imm 间接寻址 [reg] (%reg) 基址相对寻址 [reg +imm] imm(%reg) 变址寻址 [base+index] (base,index)变址寻址[base+index+imm]imm(base,index) 比例变址寻址  [base + index * scale + imm] imm(base, index, scale)scale只能是1,2,4,8其中的一个数字(1省略不写就是普通变址寻址)代码注释单行注释用;+注释内容。例如:
mov    rax, rdx    ;这里是注释注意这里imm为立即数,base和index为寄存器,scale为伸缩量

 相关著作 
王爽的《汇编语言》一书为汇编语言的教程，已经被一些大学当作教程使用。类似的教程还包括《Windows环境下32位汇编语言程序设计》等等。
美国Duntemann, Jeff于2000年著作《组合语言步步学》 Assembly Language Step-by-Step。
澳洲Jorgensen, Ed 《x86-64架构组合语言于Ubuntu系统》x86-64 Assembly Language Programming with Ubuntu。
美国Waldron, John 的1998年著作《RISC系统下组合语言概论》 Introduction to RISC Assembly Language Programming. (ISBN 0-201-39828-1)

 参考文献 

 参閱 

 編譯器
 高階組合語言
 指令集架構
 組合語言列表
 計算機科學課程列表
X86#x86指令格式

 外部連結 

 NASM編譯器
 Linux Assembly 
 MASM32  用MASM寫Win32程式的小型SDK
 Assembly組合教學 

Category:程序設計語言


pl:Asembler#Język asemblera