从内容上来看,一条二进制机器码指令实际上就是一组按照一定规则组织的二进制位,不同位置上的二进制位具有不同的含义,如图3-1所示。一般来讲,一条二进制机器指令由指令码(或者叫操作码)和操作数两部分组成,操作码用来说明指令的功能和执行的操作,操作数则表明操作所涉及的源和目的数据的位置。在微处理器中,指令码将被用于控制电路的指令译码,译码后的操作数将产生一系列的控制信号,以控制处理器的操作动作。
图3-1 一个简单程序的十六进制代码
在微处理器中,一条指令的操作数可以有几种不同的来源:立即数(即在指令中包含的常量)、寄存器、存储器、I/O端口等,指令的操作数部分将以特定的方式来描述这条指令相关的操作数在何处和如何寻址。不同的操作数来源被称作不同的“寻址方式”,而不同微处理器支持的寻址方式也是不同的。
和其他的系列微处理器一样,X86系列微处理器具有“向下兼容”的特性,以保证各种软件,包括操作系统、编译程序和应用软件都能够在硬件升级的时候不受影响地平滑过渡,这就要求后推出的微处理器的指令集是先推出的微处理器指令集的超集。虽然微处理器的性能提高了上万倍,但今天的X86系列微处理器依旧保持着对8086/8088微处理器的指令级兼容,即在8086/8088上能够正常运行的程序,在今天的微处理器上依然能够正确运行。(www.xing528.com)
二进制机器码对于微处理器来讲是非常易于“理解”的,但对于程序的设计者来讲却是一场灾难。在图3-1中,我们展示了一个调试的片断,一个简单的用来在屏幕上显示“Hello,World!”的程序,就需要用“48 65 6C 6C 6F 2C 20 77 6F 72 6C 64 2E 0D 0A 24 8C C8 8E D8 B4 09 BA 00 00 CD 21 B8 00 4C CD 21”这样一大串十六进制数字来表示用来实现这些操作的七条指令和相关的数据。用二进制机器码来书写这样一段程序,对于任何一个程序员都不会是一件愉快的事情。为此,人们将机器语言,也就是二进制机器码符号化,使其便于理解和记忆,再加上一些其他特性,形成了汇编语言。汇编语言用有意义的助记符代替难以理解和记忆的指令字,提高了编程的速度,减少了编程的错误,同时助记符和机器指令字之间的一一对应关系也保持了机器语言快速高效的特点。
和我们所熟知的高级语言不同,汇编语言本质上只是用助记符替代指令字的机器语言,因而汇编语言不可避免地和平台相关,不同的处理器具有不同的汇编语言。同时,汇编语言直接对计算机的CPU、存储器、I/O接口等硬件进行编程,所以汇编语言是一种低级语言。
虽然是低级语言,但汇编语言所编写的程序也不是能够被微处理器直接执行的,需要汇编程序将用汇编语言编写的程序转换成为二进制机器码(或称目标码)。目前被普遍使用的X86汇编程序有MASM和TASM。和高级语言相比,汇编语言形成的目标代码简短高效,在对于速度、空间敏感的应用领域以及需要直接控制硬件的时候,汇编语言的优势是非常明显的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。