1.指令的基本格式:操作码+地址码
- 零地址:OP;不需要操作数的指令,如关中断指令。
- 一地址:OP+A1;只有一个目的操作数的指令如自增1,自减1,求反等操作指令。隐含一个地址的指令,比如加法不用指定目的地址ACC,默认为ACC。
- 二地址:OP+A1+A2;常见的格式,一般的运算操作都是有一个目的地址和一个源操作数地址。
- 三地址:OP+A1+A2+A3;一般A1,A2为两个源操作数的地址,A3为目的地址。
- 四地址:OP+A1+A2+A3+A4;和三地址不同的地方在于A4为下一条执行的指令地址。
2.操作码的个数
2.1定长操作码:操作码有几位就有2^n个指令操作码
2.2扩展操作码:高阶的操作码留出一条来作为低阶操作码的扩展,例:0000 0000 0000是一个指令格式,地址为4位,可以有2^4个二地址指令,则可以把1111留下作为操作码的扩充,则可以扩充出16个一地址指令。也可以多留出几位作为低阶而多流出一个就会多出很多(2的n次方个低阶指令)。
3.常见的指令操作类型
3.1 数据传送:寄存器之间传送MOV,从内存单元读取数据到CPU寄存器LOAD,从CPU到主存STORE.
3.2 算术运算:加ADD,减SUB,乘MUL,比较CMP……。
3.3 移位运算:逻辑移位,算术移位,循环移位。
3.4 转移操作:跳转
3.5 输入输出操作
4.指令的十大寻址方式
4.1 指令的两大寻址方式:根据指令寻址,根据指令中数据寻址。指令寻址一般为顺序寻址或指令给出下一跳计算方式的跳跃寻址。数据寻址一般在指令中会有一段专门标记寻址方式。
4.2数据寻址方式
4.2.1隐含寻址:指令中不给出操作数的地址,在指令中暗含了操作数的地址,例如ACC累加器的地址。
4.2.2立即数寻址:指令的地址字段直接给出了操作数本身,不需要访存。
4.2.3直接寻址:指令的地址直接给出操作数的地址,需要访问一次主存。
4.2.4间接寻址:按照指令中给出的地址可以找到一个地址,再根据这个地址可以找到操作数,这是一次间接寻址,可以无限嵌套,访存次数为间接次数+1.
4.2.5寄存器寻址:按照指令中给出的寄存器编号可找出一个寄存器,该寄存器中保存着操作数。访存次数为0次。
4.2.6寄存器间接寻址:按照指令中给出的寄存器编号可找出一个寄存器,该寄存器中保存着一个地址,该地址为操作数的地址。访存次数为1次。
4.2.7相对寻址:将PC中的地址加上指令格式中的形式地址形成有效地址,常用于跳转指令。
4.2.8基址寻址:将CPU中的基址寄存器的内容加上指令格式中的形式地址A形成操作数的有效地址,基址寄存器的内容不会变,可给出不同的指令来改变形式地址,所以有利于编制浮动程序,扩大寻址范围。
4.2.9变址寻址:将指令字的地址和变址寄存器的内容加和形成有效地址,和基址寻址的区别在于变址寻址是面向用户的所以其变址寄存器的值是可以变化的而指令中的数值不能变化。
4.2.10堆栈寻址:一般以0地址指令的形式出现,指令中SP(堆栈指针)所指栈顶为所操作数的地址。