寄存器寻址方式

寄存器寻址方式br 寄存器和寻址方式 br nbsp nbsp nbsp 寄存器 在 8086 8088 里 有三组共 13 个 16 位寄存器 br nbsp nbsp nbsp 寄存器 从名字上看 可以知道 它就象书店的行包寄存处 寄存器的名字就象寄存处发给用户取回自已物件的标志牌子 表示物件的存放地址 br nbsp nbsp nbsp 寄存器的内部给构都相同 只不过是一个二字节或一字节的存储空间 别看他们小 作用可大了 所有电脑的运算 都要从他们过关 因为他们的处理速度快嘛 为了区分和准确运用 就要给他们进行科学的分组和起名 br nbsp nbsp nbsp 第一组 数据寄存器

寄存器和寻址方式

    寄存器,8086/8088,有三组共1316位寄存器.

    寄存器,从名字上看,可以知道,它就象书店的行包寄存处,寄存器的名字就象寄存处发给用户取回自已物件的标志牌子,表示物件的存放地址.

    寄存器的内部给构都相同,只不过是一个二字节或一字节的存储空间,别看他们小,作用可大了,所有电脑的运算,都要从他们过关,因为他们的处理速度快嘛.为了区分和准确运用,就要给他们进行科学的分组和起名.

    第一组,数据寄存器,AX,BX,CX,DX.

    其中,X表示一个未知数,那么这些寄存器都可以用来存放数据,ABCD,虽说都可以理解为一个顺序号,但是,A还是加法ADD的简称,所以AX叫累加器,B是基地址的简称,所以BX可以叫基地址寄存器,C是计数器的简称,所以CX可以叫做计数器.D是数据DATA的简称,所以DX可以叫数据寄存器.这四个寄存都可以按高八位和低八位分成两个寄存器:AH,AL,BH,BL,CH,CL,DH,DL.

    第二组,地址指示和变址寄存器,SI,DI,BP,SP.

    它们用来表示一个地址偏移,或用来表示一个地址的变化状况.SI,DI都可以表示变址,在串操作中,SIDI表示源和目的操作数的指示器,快速记忆方法:SI联想饮水思源的思(谐音SI),DI联想目的(谐音DI).

BP,SPP表示堆栈专用,BP表示基地址专用,SP则是堆栈顶指示器.其中,BP,SI,DI还可以兼作数据寄存器.SP则只能和堆栈绑定.

    第三组,段寄存器,CS,SS,DS,ES.

    它们用来存放CPU可以直接访问的四个当前段的段首地址.CS代码段,SS堆栈段,DS数据段,ES附加段.其中,在表示地址时,CS和指令指示器IP绑定使用,SSBP绑定.DSSI,DI,BX共用.

    第四组,指令指示器,IP,这是CPU自动引用的,表示下一次要从主存取出的指令的偏移.

    寻址方式

寻址方式分为六种,(这是教材里讲的).

1,立即寻址,          数据的本身在代码段.用于赋初值.

2,直接寻址,          数据的偏移在代码段,用于变量名.

3,寄存器寻址,        数据的本身在寄存器.用寄存器名表示.

4,寄存器间接寻址,    数据所在存储单元的地址在某个寄存器中.

5,寄存器相对寻址,    数据的偏移在寄存器.注意:BPSS绑定.DSSI,DI,BX共用.

6,变址寻址,          数据的偏移在一个寄存器里,并要加上一个偏移量.注意:BPSS绑定.DSSI,DI,BX共用.

7,间接寻址,          指令中给出数据的地址的地址.

8,基址加变址寻址,    数据的偏移放在两个寄存器中,并要加上一个偏移量.注意:BPSS绑定.DSSI,DI,BX共用.BXDS段的基址专用.

 

寻址方式是汇编语言的重点和难点。请按如下思路学习:

1. 操作数可以存在什么地方?

    ⑴ 操作数存在于指令代码中,处理器译码时就立即获得了这个操作数,这就是立即(数)寻址方式。汇编指    令中,这个立即数(操作数)以常量形式出现。MOV EAX,94H

    ⑵ 操作数存在于处理器内部寄存器中,处理器从寄存器中获得这个操作数,这就是寄存器寻址方式。汇编指    令中,这个寄存器操作数以寄存器名形式出现。MOV EAX,EBX

    ⑶ 操作数存在于主存中,处理器从主存单元获得这个操作数,这就是存储器寻址方式。汇编指令中,这个存    储器操作数以主存地址形式出现。

2. 8086/8088处理器的主存地址在程序设计时采用逻辑地址。逻辑地址分成段地址和偏移地址两部分。

3. 存储器寻址方式表达存储器地址时,段地址在默认的或段超越前缀指令指定的段寄存器中,偏移地址被称为有效地址EAEffective Address)。有效地址用中括号括起来。

4. 有多种获得偏移地址的方法,所以存储器寻址方式又分成多种寻址方式。

     ⑴ 有效地址直接给出,存在于指令代码中,就是直接寻址方式。

     ⑵ 有效地址存在寄存器中,就是通过寄存器的间接寻址方式。

     ⑶ 有效地址是两部分的和,一部分在寄存器中,另一部分直接给出(称为位移量),这就是寄存器相对寻址方式。

     ⑷ 有效地址是两部分的和,一部分在基址寄存器中(8086BXBP),另一部分在变址寄存器中(8086SIDI),这就是基址变址寻址方式。

     ⑸ 有效地址是三部分的和,第一部分在基址寄存器中(8086BXBP),第二部分在变址寄存器中(8086SIDI),第三部分直接给出(称为位移量),这就是相对基址变址寻址方式。

5. 区别各种寻址方式时,注意各自的特点。

        只有一个常量,是立即(数)寻址方式;

        只有一个寄存器名,是寄存器寻址方式;

        其他则是存储器寻址方式。

        用中括号括起一个常量是直接寻址方式;

        用中括号括起一个寄存器名,是寄存器间接寻址方式;

        用中括号括起一个寄存器名和一个常量是寄存器相对寻址方式;

        用中括号括起两个寄存器名是基址变址寻址方式;

        用中括号括起两个寄存器名和一个常量是相对基址变址寻址方式。

6. 汇编语句中,还有其他形式出现,需要理解相应操作符才能做出正确判断。

例如,

        直接写出变量名实际上是直接寻址方式;

        变量名加减一个常量还是直接寻址方式;

        变量名和一个寄存器则是寄存器相对寻址方式;

        利用offset后跟一个变量名则是立即数寻址方式。

 

8086 CPU的七种基本的寻址方式:

    分别是:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对基址加变址寻址

1. 立即寻址:操作数包含在指令中,是指令的一部分。此时的操作数称为立即数

    MOV EAX, 1234H

2. 寄存器寻址:操作数在CPU寄存器中,指令中指定寄存器编号

    MOV SI, AX

    MOV AL, AH

3. 直接寻址:操作数在存储器中,指令直接包含操作数的有效地址。此时操作数一般存放在数据段DS中,采用换段前缀可以使用其它段寄存器。

    MOV AX, [1234H]

4. 寄存器间接寻址:操作数在存储器中,操作数有效地址在ESIEDIEBXEBP之一种。在不使用换段前缀的情   况下,若有效地址在SI/DI/BX中,则以DS的值为段值;若有效地址在BP中,则以段寄存器SS的值为段值。

    MOV AX, [SI]

    MOV [BP], CX

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

     EA = (BX/BP/SI/DI) + (8/16位位移量)

     在不使用换段前缀的情况下,若SI/DI/BX的内容作为有效地址的一部分,则以DS的值为段值;若BP的内容作为有效地址的一部分,则以段寄存器SS的值为段值。

    在指令中给定的8位或16位位移量以补码形式表示。在计算有效地址时,若位移量是8位,则将其有符号扩展为16位,当有效地址超过FFFFH,则对其进行64K取模。

    例如:MOV AX, [DI+1223H]

       MOV BX, [BP-4]

       MOV ES:[BX+5], AL

    注意:书写时基址或变址寄存器名一定要放在方括号中,而位移可以不写在方括号中。

下面两条指令是等价的:

       MOV AX, [SI+3] 等价于 MOV AX, 3[SI]

6. 基址加变址寻址:操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容相加得到。

     EA = (BX/BP) + (SI/DI)

    在不使用换段前缀的情况下,若BP的内容作为有效地址的一部分,则以SS的值为段值;否则以DS的值为段值。有效地址超过FFFFH,则对其进行64K取模。例如:

     MOV AX, [BX+DI]     等价形式     MOV AX, [DI][BX]

     MOV AX, ES:[BX+SI]

     MOV DS:[BP+SI], AL

7. 相对基址加变址寻址:操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容以及指令中给定的8位或16位位移量相加得到。

     EA = (BX/BP) + (SI/DI) + (8/16位位移量)

    在不使用换段前缀的情况下,若BP的内容作为有效地址的一部分,则以SS的值为段值;否则以DS的值为段值。有效地址超过FFFFH,则对其进行64K取模。例如:

     MOV AX, [BX+DI+1234H]

     MOV AX, 1234H[BX+DI]

     MOV AX, 1234H[BX][DI]

     MOV AX, 1234H[DI][BX]

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213921.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:20
下一篇 2026年3月18日 下午5:21


相关推荐

  • 国外虚拟主机对比 国外虚拟主机购买指南

    国外虚拟主机对比 国外虚拟主机购买指南关注美国虚拟主机排名 国外虚拟主机评测 购买国外主机有好几年的时间了 已经使用过对比过不少的主机和服务器了 建立国外虚拟主机评测网也已经两年多了 以前刚开始买时国内主机使用国外主机的很少 在国内几乎找不到有关国外虚拟主机的介绍评论等相关中文资料 都是在国外的主机论坛搜集 希望能找到便宜的适合自己用的速度快的主机空间 现在积累了一些经验包括大家比较常见的问题 对国外的不管是从初级的免费空间 网页寄存

    2026年3月19日
    3
  • 虚函数 inline函数

    虚函数 inline函数一、首先回顾下什么是虚函数及其作用,以便更好理解什么函数不能声明或定义为虚函数:1.定义:虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:  virtual函数返回值类型虚函数名(形参表)  {函数体}2.作用:虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合

    2022年7月16日
    14
  • Logback日志工具使用详解

    Logback日志工具使用详解由于Logback比log4j和SLF4J拥有众多优点,如性能(据说有时达到10倍以上),并且支持自动加载配置文件,自动删除旧的日志文件,以及同一个logback配置文件同时适应开发,测试,生产等。因此Logback官方强烈建议开发人员从log4j转到使用Logback。

    2022年6月17日
    35
  • OpenClaw 3.8重磅发布,国内大厂扎堆入局,AI智能体养虾热潮来袭

    OpenClaw 3.8重磅发布,国内大厂扎堆入局,AI智能体养虾热潮来袭

    2026年3月12日
    2
  • Qwen-Image-Edit-F2P C++调用指南[项目代码]

    Qwen-Image-Edit-F2P C++调用指南[项目代码]

    2026年3月13日
    3
  • js循环精灵图

    js循环精灵图js循环精灵图循环精灵图可以不用在给每一个小块一一的修改位置。左侧是一大张背景图右侧是成品是预览图这个背景图的位置其实是有规律的,每两张之间间隔一个固定长度,这个固定长度刚好等于一个小图标的长度,我们使用的这个图间隔44px。 <scripttype=”text/javascript”> varlis=document.querySelectorAll…

    2022年5月9日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号