机器指令
2机器指令是CPU能直接识别并执行的指令,它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。
基本信息
- 中文名
机器指令
- 外文名
Machine Instructions
基本内容
机器指令是CPU能直接识别并执行的指令,它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。
由于机器指令与CPU紧密相关,所以,不同种类的CPU所对应的机器指令也就不同,而且它们的指令系统往往相差很大。但对同一系列的CPU来说,为了满足各型号之间具有良好的兼容性,要做到:新一代CPU的指令系统必须包括先前同系列CPU的指令系统。只有这样,先前开发出来的各类程序在新一代CPU上才能正常运行。
机器语言是用来直接描述机器指令、使用机器指令的规则等。它是CPU能直接识别的唯一一种语言,也就是说,CPU能直接执行用机器语言描述的程序。
用机器语言编写程序是早期经过严格训练的专业技术人员的工作,普通的程序员一般难以胜任,而且用机器语言编写的程序不易读、出错率高、难以维护,也不能直观地反映用计算机解决问题的基本思路。
由于用机器语言编写程序有以上诸多的不便,现在几乎没有程序员这样编写程序了。1
基本指令
80x86 CPU系列根据定义机器指令的不同方式提供了大量不同的机器指令。幸运的是,您不必知道所有的机器指令。事实上,大多数汇编语言程序可能只用到大约30条不同的机器指 令[6]。您只用少量的机器指令就完全可以编写一些有意义的程序。本节的目的在于提供一些机器指令,由此马上就可以开始编写简单的HLA汇编语言程序。
毫无疑问,mov指令是最常用的语句。在一个程序中,25%~40%的指令都是mov指令。顾名思义,该指令是将数据从一个位置移到另一个位置。该指令的HLA语法如下所示:
mov( source_operand, destination_operand );
s ource_operand可以是一个寄存器、内存变量或者一个常量。destination_operand可以是一个寄存器或者内存变量。从技术上来讲,80x86指令集不允许两个操作数都为内存变量。但是,HLA会自动将一条两字(two-word)或者说双字(double word)的内存操作数的mov指令翻译为一对指令,它们将数据从一个位置复制到另一个位置。在Pascal或C/C++等高级语言中,mov指令严格等效于下面的赋值语句:
destination_operand = source_operand;
也许,对mov指令操作数的主要限制是它们必须具有相同的长度。也就是说,您可以在两个字节(8位),两个字(16位)或者两个双字(32位)对象之间移动数据。但两个操作数的长度必须相同。表1-1列出了mov指令的所有合法组合。
表1-1 合法的80x86 MOV指令操作数
源 操 作 数 | 目的操作数 |
Reg 8 | Reg 8 |
Reg 8 | Mem 8 |
Mem 8 | Reg 8 |
constant1 | Reg 8 |
1 该常量必须足够小以适合指定的目的操作数。
您应该仔细地研究这个表格。大多数通用80x86指令都使用与此相同的语法。注意,除了上面所提到的形式以外,HLA的mov指令允许您将两个存储器操作数指定为源操作数和目的操作数。但是,HLA所提供的这种特殊的翻译方式只适用于mov指令;它不能推广到其他的指令。
80x86的add和sub指令分别将两个操作数相加和相减。它们的语法与mov指令几乎一致:
add( source_operand, destination_operand );