登录站点

用户名

密码

寄存器与7种寻址方式

已有 267 次阅读  2016-10-09 15:13   标签寄存器 

一、寄存器  总共有1416位寄存器,88位寄存器   

 通用寄存器:  

   数据寄存器:  

   AH(8)  AL(8)  AX(16)   (AXAL又称累加器)  

    BH(8)  BL(8)  BX(16)   (BX又称基址寄存器,唯一作为存储器指针使用寄存器)    

   CH(8)  CL(8)  CX(16)   (CX用于字符串操作,控制循环的次数,CL用于移位)   

   DH(8)  DL(8)  DX(16)   (DX一般用来做32位的乘除法时存放被除数或者保留余数)     

    指针寄存器:   

          SP 堆栈指针 (存放栈顶地址)  

          BP 基址指针 (存放堆栈基址偏移)     

    变址寄存器:主要用于存放某个存储单元地址的偏移,或某组存储单元开始地址的偏移,   

    即作为存储器()指针使用。

    作为通用寄存器,它们可以保存16位算术逻辑运算中的操 作数和运算结果,有时运算结果就是需要的存储单元地址的偏移.     

    SI 源地址  (源变址寄存器)  

    DI 目的地址 (目的变址寄存器)    

    控制寄存器:   IP 指令指针   FLAG 标志寄存器    

     进位标志 CF,记录运算时最高有效位产生的进位值。

     符号标志 SF,记录运算结果的符号。结果为负时置1,否则置0  

     零标志  ZF,运算结果为0ZF位置1,否则置0   

     溢出标志 OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0   

     辅助进位标志 AF,记录运算时第3位(半个字节)产生的进位值。   

     奇偶标志 PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。

      当结果操作数中1的个数为偶数时置1,否则置0 

     段寄存器    CS 代码段  IP 

                 DS 数据段    

                 SS 堆栈段  SP BP  

                 ES 附加段

 

二、七种寻址方式:

  1、立即寻址方式操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。 这种操作数成为立即数。立即数可以是8位的,也可以是16位的。

例如:      指令: MOV AX,1234H      

          : AX = 1234H  

 2、寄存器寻址方式操作数在CPU内部的寄存器中,指令指定寄存器号。  对于16位操作数,寄存器可以是:AXBXCXDXSIDISPBP等。 对于8位操作数,寄存器可以是AL AHBLBHCLCHDLDH 这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数 因而可以取得较高的运算数度。

 3、直接寻址方式操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址) 注:操作数一般存放在数据段  所以操作数的地址由DS加上指令中直接给出的16位偏移得到。如果采用 段超越前缀,则操作数也可含在数据段外的其他段中。

    例如:  MOV AX,[8054] (DS) = 2000H,

   则执行结果为(AX) = 3050H (物理地址=20000+8054=28054H) 28054H里的内容为3050H   

 在汇编语言指令中,可以用符号地址代替数值地址

      :MOV AX,VALUE  此时VALUE为存放操作数单元的符号地址。       

如写成:MOV AX,[VALUE]也是可以的,两者是等效的。

      VALUE在附加段中,则应指定段超越前缀如下: MOV AX,ES:VALUE MOV AX,ES:[VALUE]   

  4、寄存器间接寻址方式操作数在寄存器中,操作数有效地址在SIDIBXBP 这四个寄存器之一中。

     在一般情况下,如果有效地址在 SIDIBX中,则以DS段寄存器中的内容为段值。如果 有效地址在BP中,则以SS段寄存器中的内容为段值

      例如: MOV AX,[SI]  如果(DS) = 5000H (SI) = 1234H  则物理地址 =  50000 + 1234 = 51234H 51234H地址中的内容为:6789H

       

  执行该指令后,(AX) = 6789H   

  5、寄存器相对寻址方式操作数在存储器中,操作数的有效地址是一个基址寄存器(BXBP) 或变址寄存器(SIDI)的内容加上指令中给定的8位或16位位移量之和       

     BX  8 位移量 EA(有效地址) =  BP  +      SI  16 位移量    

      DI  在一般情况下,如果SIDI、或BX中的内容作为有效地址的一部分,那么 引用的段寄存器是DS;如果BP中的内容作为有效地址的一部分,那么引用的 段寄存器是SS   

       物理地址 = 16d × (DS) + (BX) + 8           

       (SI)16位位移量           

       (DI)  物理地址 = 16d × (SS) + (BP) + 8位位移量           16位位移量  在指令中给定的8位或16位位移量采用补码形式表示。

       在计算有效地址时,如 位移量是8位,则被带符号扩展成16位。

        例如:  MOV AX,[DI+1223H]  假设,(DS) = 5000H(DI) = 3678H  则物理地址 = 50000 + 3678 + 1233 = 5489BH 5489BH地址中的内容:55AAH 执行该指令后AX = 55AAH 

    下面指令中,源操作数采用寄存器相对寻址,引用的段寄存器是SS: MOV BX,[BP-4]

下面指令中,目的操作数采用寄存器相对寻址,引用的段寄存器是ES: MOV ES:[BX+5],AL 

指令:MOV AX,[SI+3]MOV AX,3[SI]是等价的   

6、基址加变址寻址方式操作数在寄存器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容相加   

BX   SI : EA =    +     BP   DI 

在一般情况下,如果BP之内容作为有效地址的一部分,则以SS之内容为段值,否则已DS 为段值。

例如:  MOV AX,[BX][DI]

:(DS)=2100H,    (BX)=0158H,    (DI)=10A5H

 EA=0158 + 10A5 = 11FD

物理地址=21000 + 11FD = 221FDH 221FDH地址中的内容:1234H 执行该指令后AX = 1234H   

下面指令中,目的操作数采用基址加变址寻址, 引用的段寄存器是DS: MOV DS:[BP+SI],AL   

下面指令中,源操作数采用基址加变址寻址, 引用的段寄存器ES: MOV AX,ES:[BX+SI]  

这种寻址方式使用与数组或表格处理。用基址寄存器存放数组首地址,而用变地寄存器  来定位数组中的各元素,或反之。由于两个寄存器都可改变,所以能更加灵活地访问数  组或表格中的元素。 

下面的两种表示方法是等价的: MOV AX,[BX+DI] MOV AX,[DI][BX]   

7、相对基址加变址寻址方式:  操作数在存储器中,操作数的有效地址由于基址寄存器之一的内容与变址寄存器之一的 内容及指令中给定的8位或16位位移量相加得到。          BX    SI    8  : EA =     +     +      位移量   

BP    DI    16  在一般情况下,

如果BP中的内容作为有效地址的一部分,则以SS段寄存器中的内容为段  值,否则以DS段寄存器中的内容为段值。  在指令中给定的8位或16位位移量采用补码形式表示。  在计算有效地址时,如果位移量是8位,那么被带符号扩展成16位。 当所得的有效地址操作FFFFH时,就取其64K的模

例如:  MOV AX,[BX+DI-2]  假设,(DS) = 5000H, (BX) = 1223H, DI = 54H, (51275) = 54H, (51276) = 76H 物理地址= 50000 + 1223 + 0054 + FFFE(-2 各位取反末位加一) = 51275H 执行该指令后 (AX) = 7654H   

相对基址加变址这种寻址方式的表示方法多种多样,以下四种方法均是等价的:

 MOV AX,[BX+DI+1234H],

 MOV AX,1234H[BX][DI]

MOV AX 1234H[BX+DI], 

MOV AX,1234H[DI][BX]

 

上一篇: spi协议及工作原理分析 (一)(来自网络) 没有了

分享 举报