3.3 用0和1表达机器能够完成的动作(指令):一种形式的编码

若要使算法能够被机器执行,则需要用机器指令来编写。机器指令是机器可以直接分析并执行的命令,机器指令也可以由0和1的编码表示,机器所能完成的所有指令被称为“指令系统”。不同的机器,其指令系统可能是不同的,但不管怎样,它其实就是一种形式的编码。只要给出指令系统,就都能理解和应用,例如,表3.2所示即为指令系统示意。指令系统无须记忆,使用时查看相应的手册即可。

机器指令与机器级程序

表3.2 一个简单的机器指令系统示意

通常,一条指令由两部分构成:操作码和地址码。操作码告诉机器所要完成的操作类别,而地址码告诉机器所要操作的数据在哪里。典型的数据可以存储在运算器中,也可以存储在存储器中。例如:000001 0000001000是一条机器指令,其中前6位000001表示该指令是从存储器中取数的指令,而后10位则给出了将要读取的数据在存储器中的地址。

表3.2所示的指令系统给出了典型的机器指令,如000001为取数指令,000010为存数指令,000011为加法指令,000100为乘法指令,000101为打印指令,000110为停机指令。机器指令有不同的操作数读取机制,比如操作数可以直接出现在指令的地址码部分,即地址码就是实际的操作数;也可以在地址码部分给出操作数被保存在存储器中的地址,访问该地址便可获取到操作数;还可以在地址码部分给出存放某操作数的存储单元地址的地址,即访问地址码给出地址的存储单元,得到的不是具体的操作数,而是存放实际操作数的存储单元的地址,必须将其作为地址,再访问存储器才能获得到真正的操作数,这就是立即数、直接地址和间接地址,本部分对其不做详细讨论,关于详细内容,读者可通过深入学习汇编语言相关课程获得。

示例20 参照表3.2所示指令系统,解析指令码相同、地址码不同的指令。

解:000001 0000001000表示将存储器中0000001000号(8号)单元的内容读到运算器中。

000001 0000001100表示将存储器中0000001100号(12号)单元的内容读到运算器中。

000001 0000111000表示将存储器中0000111000号(56号)单元的内容读到运算器中。

000001 0000000011表示将存储器中0000001011号(3号)单元的内容读到运算器中。

示例21 参照表3.2所示指令系统,解析指令码不同的指令。

解:000001 0000001000表示将存储器中0000001000号(8号)单元的内容读到运算器中。

000010 0000001000表示将运算器中的数存储到存储器0000001000号(8号)单元中。

000011 0000001000表示将运算器中的数与存储器0000001000号(8号)单元的内容相加,结果仍保留在运算器中。

000100 0000001000表示将运算器中的数与存储器0000001000号(8号)单元的内容相乘,结果仍保留在运算器中。

000100 0000001100表示将运算器中的数与存储器0000001100号(12号)单元的内容相乘,结果仍保留在运算器中。

这里特别注意,指令系统不同,对01编码解释出的功能也是不同的。