一、寻址方式(7种)
1、方式字段:通常是不同的操作码使用不同的寻址方式。指令格式中的一位或几位能用做方式字段,方式字段的值确定使用哪种寻址方式。
2、立即寻址:操作数实际出现在指令中。优点是,获得操作数不要求另外的存储器访问,节省了一个存储器或高速缓存(cache)周期。缺点是操作数的大小受限于地址字段的长度。
3、直接寻址:地址字段含有操作数的有效地址。
4、间接寻址:让地址字段指示一个存储器字地址,而此地址处保存有操作数的全长度地址。
5、寄存器寻址:类似于直接寻址,唯一不同的是地址字段指的是寄存器不是一个主存地址。
6、寄存器间接寻址:类似于间接寻址,唯一不同的是地址字段指示的是一个寄存器地址。
7、偏移寻址:要求指令有两个字段,至少其中一个是显示的,保存在一个地址字段中的值直接被使用(值=A),另一个地址字段,或者一个基于操作码的隐含引用,指向一个寄存器,此寄存器内容加上A产生有效地址。有以下三种偏移寻址:
(1)相对寻址:隐含引用的寄存器是程序计数器(PC),因此也叫PC相对寻址。即当前PC的值(此指令后续的下一条指令的地址),加上地址字段的值(A),产生有效地址;
(2)基址寄存器寻址:被引用的寄存器含有一个存储器地址,地址字段含有一个相对于那个地址的偏移量。
(3)变址:指令地址字段引用一个主存地址,被引用的寄存器含有对于那个地址的一个正的偏移量。
8、栈寻址:栈指针保存在寄存器中,于是对存储器中栈位置的访问实际上是一种寄存器间接寻址方式。
二、指令格式
1、一个指令格式必须包括一个操作码,以及隐式或显示的、零个或多个操作数。
2、指令长度:指令长度决定与存储器尺寸、存储器组织、总线结构、CPU复杂程度和CPU速度等相互影响。它决定了汇编语言编程人员所看到的机器指令的丰富性和灵活程度。指令长度通常是字符长度(8位)或定点长度的整数倍。
3、位的分配:越多的操作码意味着减少了寻址可用的位数。PDP-8使用12位指令和12位的字,有一个单一的通用寄存器,即累加器。PDP-10以空间利用率低为代价,使得程序员编程相对容易。
4、变长指令:提供大的操作码清单,而操作码具有不同的长度。寻址方式也能更灵活,指令格式能将各种寄存器和存储器引用加上寻址方式予以组合。
5、x86配备了各种指令格式;ARM的所有指令都是32位长,并有规整的格式。