寄存器与七种寻址方式

发布者:SereneMelody最新更新时间:2020-03-20 来源: eefocus关键字:寄存器与  寻址方式 手机看文章 扫描二维码
随时随地手机看文章

一、寄存器


总共有14个16位寄存器,8个8位寄存器


通用寄存器:


  数据寄存器:


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


  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,运算结果为0时ZF位置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位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。


对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。


这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数


因而可以取得较高的运算数度。


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、寄存器间接寻址方式:


操作数在寄存器中,操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。在一般情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器中的内容为段值。如果有效地址在BP中,则以SS段寄存器中的内容为段值


例如:


MOV AX,[SI]


如果(DS) = 5000H (SI) = 1234H


则物理地址 =  50000 + 1234 = 51234H


51234H地址中的内容为:6789H


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


5、寄存器相对寻址方式:


操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和


    BX  8位 位移量


EA(有效地址) =  BP  + 


    SI  16位 位移量


    DI


在一般情况下,如果SI、DI、或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]

关键字:寄存器与  寻址方式 引用地址:寄存器与七种寻址方式

上一篇:单片机的几种寻址方式
下一篇:直接寻址、间接寻址、立即寻址

推荐阅读最新更新时间:2024-11-09 16:17

ARM中的寻址方式
立即寻址 操作数本身就在指令中给出 寄存器寻址 利用寄存器中值作为操作数 寄存器移位寻址 第二个寄存器操作数移位后与第一个操作数结合 移位位数可以是5位立即数或者寄存器 寄存器间接寻址 操作数存放在内存中,寄存器中的内容为操作数在内存单元中的地址 基址变址寻址 将基址寄存器中的内容与指令中给出的偏移量相加减,得出的数为操作数在内存单元的地址 寄存器间接寻址是偏移量为0的基址变址寻址 多寄存器寻址 一次可传送几个寄存器的值 块复制寻址 堆栈寻址 相对寻址 以程序计数器当前的值为基地址,指令中的标号为偏移量,将两者相加之后得到操作数的有效地址
[单片机]
ARM中的<font color='red'>寻址</font><font color='red'>方式</font>
NVIC寄存器组中的中断挂起SETPEND消除CLRPEND,外部中断挂起寄存器EXTI_PR
STM32的中断控制是分级管理的,CM3内核中的NVIC是顶层,对每个通道都设有1BIT的中断挂起位, 但每个通道可能不止一个中断源,比如EXTI5_9_IRQn,对NVIC而言,只算一个通道,但实际包含有5个中断源, 因此,下层就必须实现对这多个中断源的独立监控,这就是EXTI- PR中的挂起位了。 STM32的中断系统可以理解为分两级管理, 顶层当然是CM3内核强大的NVIC,下层就是形形色色的片上外设了, 对于NVIC来说,它最大可以管理256个不同的中断通道, 这256个中断,内核自留了16个,剩下的通称为外部中断(注意与EXTI不要混淆,EXTI是外部中断中的一小部分,全称为外部线中断),外部中断可以多达240个(具
[单片机]
六、ARM 寻址方式
寻址方式是针对源操作数来说的 6.1 立即数寻址 源操作数是立即数 立即数:操作码以 # 号开头的数字为立即数 立即数寻址: MOV R0, #0x300 伪指令: LDR R0,=0x12345678 注意: 立即数是 8 位数据存储,用 X 表示(0~255),4 位存移位的次数,用 Y 表示(0~15),立即数 = X 循环右移 2 * Y 个位 立即数 0xf200 是由 0xcf2 间接表示的,即是由 8 位的 F2 循环右移 24 位(2 * 12)得到 X = 0xf2; Y = 0xC 6.2 寄存器寻址 MOV R0,R1 源操作数是 寄存器 6.3 寄存器移位寻址 将寄存器
[单片机]
六、ARM <font color='red'>寻址</font><font color='red'>方式</font>
STM32学习笔记(三)------GPIO口寄存器的操作使用
1、STM32 的每个 IO 端口都有 7 个寄存器来控制 (1)配置模式的 2 个 32 位的端口 配置寄存器 CRL 和 CRH (2)2 个 32 位的数据寄存器 IDR 和 ODR (3)1 个 32 位的置位/复位寄存器 BSRR (4)一个 16 位的复位寄存器 BRR (5)1 个 32 位的锁存寄存器 LCKR。 2、每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved