汇编语言的英语是Assembly language,台湾、港澳称之为组合语言,汇编语言是一种与硬件紧密相关的程序设计低级语言,汇编语言是机器语言便于记忆和理解的符号形式(又称为助记符)。

编辑摘要

目录

[隐藏 ]
1 简介
2 简述
  1. 2.1 符号语言
  2. 2.2 汇编
  3. 2.3 不能通用
3 特点
4 优点与缺点
  1. 4.1 优点
  2. 4.2 缺点
5 应用
  1. 5.1 编写
  2. 5.2 最有效途径
6 Linux 汇编语言
  1. 6.1 汇编代码
  2. 6.2 Linux 程序员
  3. 6.3 优点
  4. 6.4 缺点
  5. 6.5 两种不同的形式
7 应用举例
  1. 7.1 用汇编语言实现RESET启动和热启动
8 视频教程

汇编语言 - 简介

汇编语言 汇编语言

汇编语言(AssemblyLanguage)是面向机器的程序设计语言。汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASMTASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。[1]

汇编语言 - 简述

汇编语言 汇编语言

符号语言

在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。因此汇编语言亦称为符号语言。

汇编

使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言编译器把汇编程序翻译成机器语言的过程称为汇编。

不能通用

汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植

汇编语言 - 特点

1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。

2.保持了机器语言的优点,具有直接和简捷的特点。

3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。

4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。

5.经常与高级语言配合使用,应用十分广泛。

6.对于不同型号的计算机,有着不同的结构的汇编语言。

7.汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。

8.汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。

9.汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。

10.汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的"汇编程序"中进行加工和翻译,才能变成能够被计算机直接识别和处理的二进制代码程序。

11.用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,当它被安置在内存的预定位置上,就能被计算机的CPU处理和执行。[2]

汇编语言 - 优点与缺点

优点

汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点:

(1)能够直接访问与硬件相关的存储器或I/O端口;

(2)能够不受编译器的限制,对生成的二进制代码进行完全的控制;

(3)能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁;

(4)能够根据特定的应用对代码做最佳的优化,提高运行速度;

(5)能够最大限度地发挥硬件的功能。

(6)汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。

缺点

同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点:

(1)编写的代码非常难懂,不好维护;

(2)很容易产生bug,难于调试;

(3)只能针对特定的体系结构和处理器进行优化;

(4)开发效率很低,时间长且单调。

(5)汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。

汇编语言 - 应用

编写

70%以上的系统软件是用汇编语言编写的。某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写的。某些高级绘图程序、视频游戏程序是用汇编语言编写的。

最有效途径

汇编语言是我们理解整个计算机系统的最佳起点和最有效途径。人们经常认为汇编语言的应用范围很小,而忽视它的重要性。其实汇编语言对每一个希望学习 计算机科学与技术的人来说都是非常重要的,是不能不学习的语言。所有可编程计算机都向人们提供机器指令,通过机器指令人们能够使用机器的逻辑功 能。所有程序,不论用何种语言编制,都必须转成机器指令,运用机器的逻辑功能,其功能才能得以实现。机器的逻辑功能,软件系统功能构筑其上,硬件系统功能 运行于下。汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统 的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。学习汇编语言,向上可以理解软件,向下能够感知硬件,是我们理解整个计算机系统 的最佳起点和最有效途径。

汇编语言 - Linux 汇编语言

汇编代码

作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿 Linux 内 核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 Linux 的启动部分。由于这部分代码 与硬件的关系非常密切,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能。

Linux 程序员

大多数情况下 Linux 程序员不 需要使用汇编语言,因为即便是硬件驱动这样的底层程序在 Linux 操作系统中也可以用完全用 C 语言来实现,再加上 GCC 这一优秀的编译器目前 已经能够对最终生成的代码进行很好的优化,的确有足够的理由让我们可以暂时将汇编语言抛在一边了。但实现情况是 Linux 程序员有时还是需要使用汇 编,或者不得不使用汇编,理由很简单:精简、高效和 libc 无关性。假设要移植 Linux 到某一特定的嵌入式硬件环境下,首先必然面临如何减少系 统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了。

优点

汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点: 
•能够直接访问与硬件相关的存储器或 I/O 端口; 
•能够不受编译器的限制,对生成的二进制代码进行完全的控制; 
•能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁; 
•能够根据特定的应用对代码做最佳的优化,提高运行速度; 
•能够最大限度地发挥硬件的功能。

缺点

同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点: 
•编写的代码非常难懂,不好维护; 
•很容易产生 bug,难于调试; 
•只能针对特定的体系结构和处理器进行优化; 
•开发效率很低,时间长且单调。

两种不同的形式

Linux 下用汇编语言编写的代码具有两种不同的形式。第一种是完全的汇编代码,指的是整个程序全部用汇编语言编写。尽管是完全的汇编代 码,Linux 平台下的汇编工具也吸收了 C 语言的长处,使得程序员可以使用 #include、#ifdef 等预处理指令,并能够通过宏定义来简 化代码。第二种是内嵌的汇编代码,指的是可以嵌入到C语言程序中的汇编代码片段。虽然 ANSI 的 C 语言标准中没有关于内嵌汇编代码的相应规定,但 各种实际使用的 C 编译器都做了这方面的扩充,这其中当然就包括 Linux 平台下的 GCC。[3]

汇编语言 - 应用举例

用汇编语言实现RESET启动和热启动

程序名: RESET.ASM/BOOT.ASM 程序类别: 完整的汇编语言程序

功能: 用程序完成RESET启动和热启动

使用说明: 汇编连接以后转换为com文件运行

程序说明:

在日常用机过程中,如果出现了异常情况常常需要重新启动系统 .对于IBM PC 以及其兼容机,除了开机冷启动外,还有热启动和R ESET开关 复位启动,他们的共同特点是转入BIOS的入口点(即ROM 的起始单元FFFF:0处),执行该处的跳转指令,转向启动程序,该启 动程序在执行过程中 需检测复位标志字(在地址0040:0072处,占2 个字节)的值,若为1234则启动是不检测内存;若非1234则启动先检 测内存,再启动系统.热 启动和RESET启动的不同之处在于热启动时 不检测内存,而RESET启动是需要检测内存.

下面的俩个程序分别实现RESET启动和热启动.经过汇编,连接再转 换成文件后才能运行.

RESET.ASM (RESET开关复位启动程序)

RESET.ASM (RESET开关复位启动程序) RESET.ASM (RESET开关复位启动程序)

 

 

 

 

BOOT.ASM (热启动程序)

BOOT.ASM (热启动程序) BOOT.ASM (热启动程序)

  


[4]

汇编语言 - 视频教程

 

 
 

相关文献

 

附图

 

为本词条添加视频组图相关影像

参考资料:
[1] ^ 编程入门 引用日期:2011-12-02
[2] ^ 灯火互联网 引用日期:2011-12-02
[3] ^ IBM 引用日期:2011-12-02
[4] ^ 编程入门网 引用日期:2011-12-02