操作数的寻址方式(非常重要)

时间:2021-07-13 01:19:07
形成操作数的有效地址的方法叫操作数的寻址方式。
      指令中的操作数字段的地址码由形式地址和寻址方式特征位等组合形成。一般的指令中所给出的地址码并不是操作数的有效地址。
      形式地址也叫偏移量,是指令字结构中给定的地址量。寻址过程就是把操作数的形式地址变换成有效地址的过程。
                       形式地址      寻址方式          有效地址

寻址方式:

1、隐含寻址方式
     不明显给出操作数的地址,在指令中隐含着操作数的地址。如单地址指令,不明显指出第二个操作数的地址,而规定AC累加器做位第二操作数地址。
2、立即寻址方式
(1)地址字段给出的是可以立即使用的操作数实际值,称立即寻址方式。
(2)优缺点:
提供操作数最快,但精度较低,可采用变字长格式解决。           
      例如:在IBM-PC指令系统中
                       MOV        AX,05FFH
3、直接寻址方式
   (1) 含义:地址字段直接指明操作数在存储器内的位置的寻址方法。即形式地址等于有效地址,
   (2) 缺点:直接寻址方式中指令字长限制了一条指令所能够访问的最大主存空间,可以使用可变字长指令格式来解决此局限性。利用扩大了的操作数地址码就能全部访问主存储器的所有的存储单元。
    例如:在IBM-PC指令系统中  MOV        AX,[3000H]
4、间接寻址方式
(1)含义:指令字中地址码字段D给出的不是操作数的真正地址,而是操作数地址的指示器,或者说D单元的内容才是操作数的有效地址。
  (2)优缺点:
         A、优点:实现简便,对编程带来较大的灵活性
          B、缺点:
           (a)多次访问内存,增加了指令的执行时间;
        (b)占用主存储器单元多。
         对程序编制能带来较大的灵活性表现在:
         (I)间接寻址方式的指令可以访问大的存储空间,扩大了指令的寻址能力。
         (II)当操作数地址改变时,只需修改间接地址指示器的单元内容,而不必修改指令,原指令的功能照样实现。这给程序编制带来很大方便。
5、寄存器寻址方式和寄存器间接寻址方式
        当操作数不放在内存中而放在CPU的通用寄存器中时,采用寄存器寻址方式。
        指令中给出的操作数地址不是内存的地址单元号,而是通用寄存器的编号。

寄存器间接寻址方式与寄存器寻址方式区别:
      指令格式中的寄存器内容不是操作数,而是操作数的地址,该地址指明的操作数在内存中。
6、相对寻址方式
     把程序计数器PC作为基本地址寄存器,指令字中的形式地址码D作为位移量,则有效地址EA=(PC)+D。相对寻址主要用于转移指令。
相对寻址就是相对于当前的指令地址的意思。
   
    ⑴ 位移量可正、可负,通常用补码表示。
    ⑵  位移量是操作数位置与本指令之间的相对距离。
    ⑶ 无须用指令的绝对地址变成,所编程序可以放在内存的任何地方。
、基址寻址方式
      将CPU中的基址寄存器的内容加上指令格式中的形式地址形成有效地址。EA=D+X。其中,X是基址R,D是偏移量。

            基址寻址方式主要用以解决程序在存储器中的定位和扩大寻址空间等问题。
8、变址寻址方式
     把CPU中的某个变值寄存器的内容与偏移量D相加形成有效地址。

使用的目的在于实现程序块的规律变化。不改变指令本身就可以实现变址寄存器中内容的有规律变化。如自动加1,减1等等。
9、复合寻址方式:
      (A) 变址间址寻址方式
                其含义是先将变址寄存器的内容X和形式地址A相加得到A+X,然后再作间接寻址,得到操作数的有效地址。故操作数的有效地址为:
EA=(A+X)
      (B)  间址变址寻址方式
                含义是先将形式地址取间接变换(A)=N,然后把N和变址寄存器的内容X相加,得到操作数的有效地址。故操作数的有效地址为:
EA=N+X=(A)+X
      (C)  Intel 8086/8088中基址变址寻址方式
                基址寄存器可以采用BX或BP,变址寄存器可以用SI或DI,有效地址是通过将基址寄存器中的值、变址寄存器中的值和位移量三这相加而求得的。
D)分页寻址方式
                若计算机中欲采用直接寻址方式,但由于其访问的内存地址空间受指令中地址码字段长度的制约,若内存空间较大,则可采用分页寻址方式来解决。将指令中操作数地址码可以访问到的内存地址空间称为一页,则整个内存空间可以按页的大小分为多个页面。
                例如设内存储器容量为64K个单元,而指令中地址码长度为9位,则每一页有512个单元,可将内存空间划分为64K/512=128页。为访问128页,需要7位代码来表示页号。若预先将页号送入页号寄存器,把页号寄存器的内容与指令寄存器中形式地址两者拼接起来,就能获得一个可以访问整个内存空间的有效地址。
(E)段寻址方式

   20根地址线220=1M,将1M以64K为单位
   分成若干段,由一个基地址加上某些寄
   存器提供的16位偏移量来形成实际的20
   位物理地址。