操作系统指令系统—寻址方式
指令和数据的寻址方式
操作数或指令在存储器中的地址:某个操作数或某条指令存放在某个存储单元时其存储单元的编号
在存储器中,操作数或指令字写入或读出的方式,有地址指定方式、相联存储方式和堆栈存取方式。
寻找方式:当采用地址指定方式时,形成操作数或指令地址的方式。
寻址方式分为两类:指令寻址和数据寻址。
指令寻址
确定下一条预执行指令的指令地址
- 顺序寻址:(PC)+1->PC 程序计数器自动加1
- 跳跃寻址:由转移指令指出
数据寻址
确定本条指令的操作数地址
指令中所给出的地址码,并不一定是操作数的有效地址。
寻址过程就是把操作数的形式地址,变换为操作数的有效地址。
例如:一种单地址指令的结构如下所示,其中用X I D各字段组成该指令的操作数地址。
寻址方式
隐含寻址(操作数在累加寄存器中)
在指令中不明显的给出,而是隐含着操作数的地址
例如:单地址的指令格式,没有在地址字段指明第二操作数地址,而是规定累加寄存器AL或AX作为第二操作数地址,AL或AX对单地址指令格式来说是隐含地址。比如
MOV AL,LSRC_BYTE
MUL RSRC_BYTE
ADD 寻址特征 A
操作数地址隐含在操作码中,(寻址特征指明寻址类型)。
另一个操作数隐含在ACC中
先在内存中地址为A的地方找到一个操作数,另一个操作数隐含在寄存器ACC里,从ACC里取出另外一个操作数,然后和给出的A地址中的数相加暂存在ACC中。
立即寻址
操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。这种方式中形式地址A就是操作数本身。这样的寻址方式不必再次訪问主存去取操作数,当然也无须改动操作数(这样的方式获得操作数的速度最快)
OP 立即寻址特征# A
- 指令执行阶段不访存
- A的位数限制了立即数的范围
直接寻址
指令所要的操作数存放在内存中,直接根据读内存找到操作数,形式地址不需要经过任何处理。这种寻址方式为直接寻址方式。
在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成。但这样的地址方式的不足之处在于寻址范围有限。
-
执行阶段访问一次存储器
-
A的位数决定了该指令操作数的寻址范围
MOV AX, [2222H]: 将有效地址为2222H的内存单元的内容读到累加器AX中
间接寻址
在指令的地址码部分直接给出的既不是操作数(直接给出操作数的是马上寻址),也不是操作数的地址(直接给出操作数地址的是直接寻址),而是操作数的地址的地址。
这样的方式提高了寻址的灵活性。扩大了寻址的范围。可是因为多次訪问主存。速度大为减少。
EA=(A)
有效地址由形式地址间接提供,形式地址是操作数的地址的地址
OP 间接寻址标识 A
根据A的内容到内存中寻找到的是操作的数地址,再根据这个地址去找操作数。
- 执行指令阶段2次访存
- 可扩大寻址范围
寄存器寻址
地址码的地址是寄存器的地址,和内存地址而言。訪问寄存器的速度是很快的,所以使用寄存器寻址有很快的速度。不足之处在于寄存器的数量有限。
EA=R1
形式地址是寄存器的编号,直接去寄存器中寻址操作数。
- 执行阶段不访存,只访问寄存器,执行速度快
寄存器间接寻址
地址码保存的是寄存器的地址,相应的寄存器中保存的是操作数在主存中的地址。这样既快又有灵活性,是一种广泛使用的寻址方式。
- 有效地址在寄存器中,操作数在存储器中,执行阶段访存。
偏移寻址
一种强有力的寻址方式
EA=A+(R)
形式地址需要和另一个寄存器中的地址相加,形式地址A是显示的
另一个地址字段隐含在某个专用的寄存器R中。
常用的三个偏移寻址方式是:相对寻址 基址寻址 变址寻址(根据寄存器的不同类型来区分的)
相对寻址
A是相对于当前指令的位移量(可正 可负 补码)
EX=A+(PC) ----PC程序计数器 PC存储当前正在执行指令的地址
- A的位数决定操作数的寻址范围
基址寻址
採用专用寄存器或通用寄存器作为基址寄存器,主要作用是扩大寻址空间和再定位。
EA=A+(BR)
BR为基地址寄存器 (Base Register)
- 可扩大寻址范围
变址寻址
是将地址码和变址寄存器内容相加后形成的数据地址,对数组运算、字符串操作等批量数据的处理很有效。
EA=A+(IX)
IX为变址寄存器(专用) 通用寄存器也可以作为变址寄存器
- 可扩大寻址范围
- 在程序执行的过程中IX内容可变,形式地址A不变
- 便于处理数组问题