概述
计算机能够识别并执行的二进制代码固定在计算机硬件中。每种处理器都有自己专用的机器指令集合。CPU的电子器件能够识别并执行这些指令。由于指令数量有限,所以在设计处理器时,设计师首先列出所有指令,给每个指令分配一个二进制代码,用来表示它们,然后设计硬件来完成该指令的功能。起初,人们只能直接用这些二进制代码编写程序控制计算机,这些二进制代码称为机器语言。计算机能够执行用机器语言编写的程序。
使用机器语言的程序员必须记住每组二进制数对应的是什么指令。
每条机器语言指令只能执行一个非常小的任务。在机器语言中,处理过程中每个微小步骤都必须有明确的编码。即使是求两个数的和,也需要用3条二进制指令来编写。
例如,在8086/8088兼容机上,用机器语言完成求5+6的程序代码如下。
10110000 00000101;将5放进累加器acc中
00101100 00000110;累加器的值与6相加,结果仍然在累加器中
11110100;停机结束
将它输入以8086微处理器为CPU的计算机中,就能直接执行它。机器语言是唯一不必经过翻译而能直接识别的语言,它与具体的计算机有关。不同的计算机识别的机器语言不同,程序员不仅要非常熟悉硬件的组成及其指令系统,还必须熟记计算机的指令代码。
用机器语言编写的程序难以阅读和理解,程序员必须记住复杂的指令系统,书写、辨认冗长的二进制代码,很难在程序编写方法和算法上下功夫,这极大地限制了程序的质量和应用范围。而且每个程序只能在特定类型的计算机上运行,要想在其他计算机上运行,必须重新编写,造成了重复工作。1
特点机器语言有如下特点,
1.机器语言与计算机硬件结构密切相关
不同的汁算机硬件结构有着不同的机器语言,在以CPU为核心的计算机硬件结构中,不同CPU有着不同的机器语言,机器语言与计算机硬件结构密切相关。
2.二进制数表示
机器语言中,指令操作码、存放操作数的存储单元的地址、操作数等都用二进制数表示,CPU将以程序计数器的值为地址访问存储器渎到的内容作为指令,以指令中给出的操作数地址。或以地址寄存器B的值为地址访问存储器渎到的内容作为操作数。由CPU负责区分指令和操作数,表示指令和操作数的二进制数本身是无法区分二者的。
3.设计程序时需同步安排指令和操作数在存储器中的存放位置
由于运算指令需要指定存放另一个操作数的存储单元的地址,控制指令需要指定不顺序执行指令的情况下,存放另一段程序或循环体中第一条指令的存储单元的地址,因此,设计程序过程也是安排指令和操作数在存储器中存放位置的过程。
4.每一条指令只能完成简单运算功能
机器语言的每一条指令只能完成简单的运算功能。用机器语言编写完成复杂运算过程的程序是比较困难的,一个完成只包含四则运算表达式的运算过程的机器语言程序都是比较复杂的。可以尝试用模型机机器指令编写完成表达式:7*8+(21—1 7)*5一(7+21)÷6运算过程的机器语言程序。2
局限性机器语言的局限性很明显:机器指令是用二进制编码的,不容易记忆和阅读。为了克服这种局限性,人们引入一种替代方法:用助记符来代替操作码,用符号代替地址。助记符是缩写的英文字符,与操作码的功能相对应;表示地址的符号即符号地址,由用户根据需要来定。这种由助记符和符号组成的指令集合称为汇编语言。
汇编语言程序必须经过翻译,转变为机器语言程序,才能被计算机执行。人们把完成这一翻译任务的程序称为汇编程序,它是系统软件,一般是和计算机设备一起配置的。把利用汇编程序将汇编语言程序翻译为机器语言程序的过程称为汇编。把汇编语言程序称源代码,把翻译后的机器语言程序称为目标代码。
机器语言的另一个局限性是对计算机系统结构的依赖,在一种机器上开发的机器语言程序在另一种机器上一般是不能执行的。汇编语言克服了这个局限性,因为汇编程序是和计算机设备一起配置的系统软件,它可以把汇编语言程序翻译为相应的机器语言程序。
机器语言还有一个局限性吗,机器指令与硬件结构相联,它对数据的操作很简单,等同于最简单的机械动作,这使得对一个像求和一样的简单汁算,都需要多条机器指令才能完成。随着算法越来越复杂,用这种简单的机器指令来描述算法肯定越来越困难,而且阅读、修改和维护也越来越不容易。这个矛盾在汇编语言中依然存在,因为汇编指令不过是符号化的机器指令而已。要有效地解决这种矛盾,就要超越计算机硬件结构,建立面向算法处理对象的程序语言。于是走进高级语言。3