指令系统
tip
指令(机器指令)是指示计算机执行某种操作的命令。一台计算机中所有指令的集合构成指令系统,或称指令集。
指令基本格式
指令是一串而二进制代码,通常包括 操作码字段 和 地址码字段。
根据长度可以分为半字长指令、单字长指令或双字长指令。
根据操作数地址码的数量可以分为零地址指令、一地址指令、二地址指令和三地址指令等。
info
这些指令可能会有某些 隐含操作,如对于零地址指令其将两个操作数从栈顶弹出再将结果入栈等。
若在一个指令系统中所有操作码的长度相同,则成为 定长指令,其执行识别 速度快,控制简单。
扩展操作码指令格式
为了在字长有限的情况下增加指令种类,可以采用 可变长度操作码,但会增加指令译码和分析的难度。
最常见的变长操作码方法就是 扩展操作码,具体方法为短码占用一定的前缀,而长码的前缀不能和短码重复,这样译码时可以根据前缀判断是短码还是长码。
一般对使用频率高的指令分配短的操作码,使用频率低的指令分配长的操作码,后面会有分配方法。
指令的操作 类型
按照功能可以分为一下几类:
- 数据传送,通常有寄存器间的传送(MOV)、内存读取到寄存器(LOAD)、寄存器写入内存(STORE)等;
- 算术和逻辑运算,加(ADD)、减(SUB)、乘(MUL)、除(DIV)、比较(CMP)、加一(INC)、减一(DEC)、与(AND)、或(OR)、非(NOT)、异或(XOR)等;
- 移位操作,算术移位、逻辑移位、循环移位等;
- 转移操作,无条件转移(JMP)、条件转移(BRANCH)、调用(CALL)、返回(RET)、陷阱(TRAP)等;
- 输入输出操作,用于完成 CPU 和外部设备之间的交换数据或传送控制命令及状态信息。
指令寻址方式
指令中地址码字段并不是操作数的真实地址,这种地址被称为 形式地址(A),通过寻址才能找到其在存储器中的真实地址,被称为 有效地址(EA).
(A) 表示地址为 A 的数值,即该地址中所存放的数据内容。
指令寻址
指令寻址有两种方式:
- 顺序寻址,即程序计数器加一,自动形成下一条指令的地址;
- 跳跃寻址,通过转移类指令实现,跳跃地址分为 绝对地址(由标记符直接得到) 和 相对地址(相对于当前指令的偏移量),跳跃的结果是当前指令修改 PC 值,因此下条指令还是由程序计数器给出。