fbpx
维基百科

汇编语言

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

汇编语言
编程范型指令式編程
发行时间1949年,​73年前​(1949

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

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

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

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

工具

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

现状

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

相关著作

王爽的《汇编语言》一书为汇编语言的教程,已经被一些大学当作教程使用。[2]类似的教程还包括《Windows环境下32位汇编语言程序设计》等等。

注释

  1. ^ 組合語言,英語:assembly language,assembler language

参考文献

  1. ^ Assembler language (页面存档备份,存于互联网档案馆), IBM Knowledge center
  2. ^ 王爽. 汇编语言. 汇编语言 第三版. 北京: 清华大学出版社. 2013. ISBN 978-7-302-33314-2. OCLC 910380574. 

参閱

外部連結

汇编语言, 此條目需要擴充, 2016年2月12日, 请協助改善这篇條目, 更進一步的信息可能會在討論頁或扩充请求中找到, 请在擴充條目後將此模板移除, 英語, assembly, language, 組合語言, 是任何一种用于电子计算机, 微处理器, 微控制器, 或其他可编程器件的低级语言, 在不同的设备中, 对应着不同的机器语言指令集, 一种专用于某种计算机系统结构, 而不像许多高级语言, 可以在不同系统平台之间移植, 编程范型指令式編程发行时间1949年, 73年前, 1949, 使用编写的源代码, 然后通过. 此條目需要擴充 2016年2月12日 请協助改善这篇條目 更進一步的信息可能會在討論頁或扩充请求中找到 请在擴充條目後將此模板移除 汇编语言 英語 assembly language 組合語言 註 1 1 是任何一种用于电子计算机 微处理器 微控制器 或其他可编程器件的低级语言 在不同的设备中 汇编语言对应着不同的机器语言指令集 一种汇编语言专用于某种计算机系统结构 而不像许多高级语言 可以在不同系统平台之间移植 汇编语言编程范型指令式編程发行时间1949年 73年前 1949 使用汇编语言编写的源代码 然后通过相应的汇编程序将它们转换成可执行的机器代码 这一过程被称为汇编过程 汇编语言使用助记符 Mnemonics 来代替和表示特定低级机器语言的操作 特定的汇编目标指令集可能会包括特定的操作数 许多汇编程序可以识别代表地址和常量的标签 Label 和符号 Symbols 这样就可以用字符来代表操作数而无需采取写死的方式 普遍地说 每一种特定的汇编语言和其特定的机器语言指令集是一一对应的 许多汇编程序为程序开发 汇编控制 辅助调试提供了额外的支持机制 有的汇编语言编寫工具经常会提供巨集 它们也被称为宏汇编器 现在汇编语言已不像其他大多數的程序設計語言一樣被廣泛用于程序設計 在今天的實際應用中 它通常被應用在底層硬件操作和高要求的程序優化的场合 驅動程序 嵌入式操作系统和實時運行程序中都会需要汇编語言 目录 1 工具 2 现状 3 組譯風格 4 相关著作 5 注释 6 参考文献 7 参閱 8 外部連結工具 编辑典型的現代組譯器 assembler 建造目的碼 由解譯組語指令集的助记符 Mnemonics 到操作碼 英语 OpCode 並解析符號名稱 Symbolic names 成為記憶體位址以及其它的實體 使用符號參考 symbolic references 是組譯器的一個重要特徵 它可以節省修改程式後人工轉址 manual address updates 的乏味耗時計算 基本就是把机器码变成一些字母而已 编译的时候再把输入的指令字母替换成为晦涩难懂的机器码 现状 编辑随着现代软件系统越来越庞大复杂 大量经过了封装的高级语言如C C Pascal Object Pascal也应运而生 这些新的语言使得程序员在开发过程中能够更简单 更有效率 使软件开发人员得以应付快速的软件开发的要求 而汇编语言由于其复杂性使得其适用领域逐步减小 但这并不意味着汇编已无用武之地 由于汇编更接近机器语言 能够直接对硬件进行操作 生成的程序与其他的语言相比具有更高的运行速度 占用更小的内存 因此在一些对于时效性要求很高的程序 许多大型程序的核心模块以及工业控制方面大量应用 因此 虽然有众多编程语言可供选择 但汇编依然是各大學计算机科学类专业学生的必修课 以讓學生深入了解计算机的运行原理 組譯風格 编辑 汇编语言图解 x86 amd64汇编指令的两大风格分别是Intel汇编与AT amp T汇编 分别被Microsoft Windows Visual C 与GNU Gas采用 Gas也可使用Intel汇编风格 项目 Intel风格 AT amp 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为伸缩量相关著作 编辑王爽的 汇编语言 一书为汇编语言的教程 已经被一些大学当作教程使用 2 类似的教程还包括 Windows环境下32位汇编语言程序设计 等等 注释 编辑 組合語言 英語 assembly language assembler language参考文献 编辑 Assembler language 页面存档备份 存于互联网档案馆 IBM Knowledge center 王爽 汇编语言 汇编语言 第三版 北京 清华大学出版社 2013 ISBN 978 7 302 33314 2 OCLC 910380574 参閱 编辑 计算机科学主题 计算机程序设计主题 編譯器 高階組合語言 指令集架構 組合語言列表 計算機科學課程列表 X86 x86指令格式外部連結 编辑从维基百科的姊妹计划了解更多有关 汇编语言 的内容 维基词典上的字词解释 维基共享资源上的多媒体资源 维基新闻上的新闻 维基教科书上的教科书和手册 维基学院上的學習资源 英文 NASM編譯器 英文 Linux Assembly 页面存档备份 存于互联网档案馆 英文 MASM32 页面存档备份 存于互联网档案馆 用MASM寫Win32程式的小型SDK Assembly組合教學 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title 汇编语言 amp oldid 71629707, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。