个人工具
名字空间
变换
操作

汇编语言

来自站长百科
2010年10月21日 (四) 07:34Jiaomh (讨论 | 贡献)的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到: 导航, 搜索
汇编语言(英语:Assembly language),是一种与硬件紧密相关的程序设计低级语言。汇编语言是机器语言便于记忆和理解的符号形式(又称为助记符)。
结构图

汇编语言的语句与机器语言 (机器语言操作码)存在对应关系,但这并不意味着汇编语言语句与机器操作对应。在CISC (复杂指令集)结构CPU上,汇编语言(或一个机器语言操作码)可能被汇编器解译成多个“微指令”。因此有多少种CPU,甚至有多少单芯片,就有多少种汇编语言。

汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计;在今天的实际应用中,它通常被应用在底层硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。


概况

汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。

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

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



汇编器

典型的现代汇编器(Assembler)建造目标代码,由解译组语指令集的易记码(mnemonics)到操作码(OpCode),并解析符号名称(symbolic names)成为存储器地址以及其它的物理。使用符号参考是汇编器的一个重要特征,它可以节省修改程序后人工转址的乏味耗时计算。基本就是把机器码变成一些字母而已,编译的时候再把输入的指令字母替换成为晦涩难懂机器码。


现状

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

此外,虽然有众多编程语言可供选择,但汇编依然是各大学计算机科学类专业学生的必修课。因为只有学习了汇编,学生才能深入了解计算机的运行原理,为今后的计算机研究与应用打下良好的基础。

留言