基本概念:
指令字长:一条指令中所包含的二进制码的位数。主要取决于操作码长度、地址长度和操作数地址的个数
机器字长:计算机依次能够处理的二进制数据的位数。
一般情况下,机器字长是8的整数倍。指令字长不一定和机器字长一致。指令的字长可以小于机器字长,称为短格式指令,反之称为长格式指令;
早期指令和机器字长相等,控制方式简单,指令字长固定;随着计算机发展,逐渐出现了变字长的指令。一台计算机可以兼容多种长度的指令
-----
指令一般由操作码和地址码两个部分组成 操作码+地址码
1)操作码:说明该指令要执行的动作,也就是命令 长度可以是固定的,也可以是可变的
2)地址码:三地址/二地址/一地址和零地址指令
存在不同地址数的情况是因为不同指令要处理的情况不同。例如,三地址指令可能是需要将地址B、C的数相加再放入地址A,一地址指令可能是因为计算机隐含了另一个地址。如果操作数的地址隐含在SP这些指针里面,那么零地址也是可能的。
此外,地址部分除了主存地址,放置寄存器地址也可用。 对于arm指令集,它拥有load/stored架构,在读写数据方面还有一些区别。
----------以16位机为例
对于一套指令,操作码的长度影响指令条数。如果一套指令集只允许4位操作码,那它只可能有15种三地址指令,但是允许操作码变长,它还可拥有15条二地址/15条一地址和16条零地址指令
-----------
指令的寻址方式:
1.指令寻址
1)顺序寻址
指令在主存中按顺序排列,依次执行。由PC寄存器记录地址,每次+1;
2)跳跃寻址
部分指令执行后需要跳转。此时需要用该指令携带的地址去替换PC寄存器的内容
2.数据寻址
1)立即数寻址 指令中自带数据
2)直接寻址 指令里面有所需数据的直接地址
3)间接寻址 指令里面带有间接地址,先在存储器中取出该地址内数据,再用数据作为地址取到所需数据
4)寄存器寻址
5)寄存器间接寻址
6)变址寻址 指令中指定一个寄存器和偏移量 寄存器的值+偏移量形成地址
7)基址寻址
8)基址变址寻址
9)相对寻址 PC寄存器的值加上偏移量构成实际地址
10)堆栈寻址通过SP指针访问堆栈获取操作数,获得地址