早期的计算机很不灵活,每个设备要执行的步骤都作为机器的一部分内置在控制单元中了。为了提高灵活性,一些早期的电子计算机将CPU设计为可以方便地重新布线。这种灵活性是通过插拔装置体现的,类似于老式电话交换台,跳线的端子插到接线孔中。
意识到程序可以像数据一样编码并存储到主存中,这是一个重大的突破。如果控制单元被设计为从存储器中获取程序,解码指令并执行指令,那么只要更改计算机主存的内容,就可以改变计算机运行的程序,而不需要重写CPU。
将计算机程序存入主存的想法被称为存储程序概念(Stored-Program Concept)。
为了应用存储程序概念,CPU被设计为可以识别编码成位模式的指令。这组指令及相应的编码系统被称为机器语言(Machine Language)。用机器语言表达的指令就叫作机器级指令,或机器指令(Machine Instruction)。
CPU所能完成的操作是由其执行的指令决定的,这些指令称为机器指令。CPU能执行的所有机器指令的集合称为该CPU的指令系统。指令系统设计的好坏、功能的强弱,会对整个计算机产生很大的影响,指令系统是计算机中硬件与软件之间的接口。
1 指令系统指令格式指令是指挥计算机完成各种操作的基本命令,一般来说,一条指令包括两个基本组成部分:操作码和地址码。
操作码说明指令的功能及操作性质。地址码用来指出指令的操作对象,它指出操作数或操作数的地址及指令执行结果的地址,类似于C语言的表达式及赋值语句。
按照指令中地址码的数量,指令格式分为以下几种:
三地址指令格式:OP A B C
A OP B → C
二地址指令格式:OP A B
A OP B → A
一地址指令格式:OP A
OP A → A
零地址指令格式:OP
2 寻址方式如何对指令中的地址字段进行解释,以获得操作数的方法或转移地址的方法,操作数的位置可能在指令中、寄存器中、存储器中或I/O端口中,常用的寻址方式有立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址等。
2.1 立即数寻址方式
操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。
在汇编语言中,规定:立即数不能作为指令中的第二操作数。该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
如: MOV AX,2346H ;将16位立即数2346H送入寄存器AX。
2.2 寄存器寻址方式
指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。
指令中可以引用的寄存器及其符号名称如下:
8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;
16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;
32位寄存器有:EAX、EBX、ECX、EDX、ESI、edi、ESP和EBP等。
寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。
2.3 直接寻址方式
直接寻址方式是指操作数在存储器中,操作数的有效地址(16位偏移量)直接包含在指令中。