汇编语言

汇编语言英語:[註 1][1]是任何一种用于电子计算机微处理器微控制器,或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。

汇编语言
指令式編程
1949年1949

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

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

许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编寫工具经常会提供巨集,它们也被称为汇编器。

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

工具

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

现状

随着现代软件系统越来越庞大复杂,大量经过了封装的高级语言如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为伸缩量

注釋

  1. 組合語言,英語:

参考文献

  1. Assembler language 页面存档备份,存于, IBM Knowledge center

参见

外部連結

从维基百科的姊妹计划
了解更多有关
汇编语言”的内容
维基词典上的字词解释
维基共享资源上的多媒体资源
维基新闻上的新闻
维基教科书上的教科书和手册
维基学院上的學習资源
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.