精华内容
下载资源
问答
  • 寄存器寻址

    千次阅读 2017-04-05 20:24:06
    一、寄存器 总共有14个16位寄存器,8个8位寄存器。   通用寄存器:  数据寄存器:  AH(8位) AL(8位) AX(16位) (AX和AL又称累加器)  BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器...

    一、寄存器

    总共有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 附加段

     

    二、七种寻址方式:

    操作数是指令或程序的主要处理对象。如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,大量的指令在执行过程中都会涉及到操作数。所以,在指令中如何表达操作数或操作数所在位置就是正确运用汇编指令的一个重要因素。

    在指令中,指定操作数或操作数存放位置的方法称为寻址方式。操作数的各种寻址方式是用汇编语言进行程序设计的基础,也是本课程学习的重点之一。

    微机系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等。其中,后五种寻址方式是确定内存单元有效地址的五种不同的计算方法,用它们可方便地实现对数组元素的访问。

    另外,在32位微机系统中,为了扩大对存储单元的寻址能力,增加了一种新的寻址方式——32位地址的寻址方式

    为了表达方便,我们用符号“(X)”表示X的值,如:(AX)表示寄存器AX的值。


    助记图:


    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、直接寻址方式:

    http://www.cnblogs.com/lilongjiang/archive/2011/06/14/2080551.html

    指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。

    在通常情况下,操作数存放在数据段DS中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。

    例:假设有指令:MOV BX, [1234H],在执行时,(DS)=2000H,内存单元21234H的值为5213H。问该指令执行后,BX的值是什么?

    解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用下图来表示。

    从图中,可看出执行该指令要分三部分:


    由于1234H是一个直接地址,它紧跟在指令的操作码之后,随取指令而被读出;

    访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存储单元的物理地址:21234H;

    取单元21234H的值5213H,并按“高高低低”的原则存入寄存器BX中。

    所以,在执行该指令后,BX的值就为5213H。
     

    由于数据段的段寄存器默认为DS,如果要指定访问其它段内的数据,可在指令中用段前缀的方式显式地书写出来。

    下面指令的目标操作数就是带有段前缀的直接寻址方式。

    MOV ES:[1000H], AX

    直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值,该寻址方式可在64K字节的段内进行寻址。

    注意:立即寻址方式和直接寻址方式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。在程序中,直接地址通常用内存变量名来表示,如:MOV BX, VARW,其中,VARW是内存字变量。

    试比较下列指令中源操作数的寻址方式(VARW是内存字变量):
      MOV AX, 1234H            MOV AX, [1234H] ;                前者是立即寻址,后者是直接寻址 
      MOV AX, VARW           MOV AX, [VARW] ;                两者是等效的,均为直接寻址


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

    如: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, [DI]

    如果(DS) = 1000H            (DI) = 2345H

    则物理地址 =  1000H * 16 + 2345H = 12345H

    12345H地址中的内容为:4354H

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

    如图所示:

     

    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]


    http://blog.csdn.net/kisbuddy/article/details/6672340

    http://www.feiesoft.com/asm/03-4.html


    展开全文
  • 寄存器寻址方式

    2019-11-19 22:29:13
    微机系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等。其中,后五种寻址方式是确定内存单元有效...

    微机系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等。其中,后五种寻址方式是确定内存单元有效地址的五种不同的计算方法,用它们可方便地实现对数组元素的访问。 

    1. 立即数寻址方式:   MOV AH, 80H   
    2. 寄存器寻址方式:  MOV AX, BX    
    3. 直接寻址方式: MOV BX, [1234H]
    4. 寄存器间接寻址方式: MOV BX,[DI]

    若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;

    若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。

    1. 寄存器相对寻址方式: MOV BX, [SI+100H]
    2. 基址加变址寻址方式: MOV BX, [BX+SI]
    3. 相对基址加变址寻址方式: MOV AX, [BX+SI+200H]

    展开全文
  • arm专利::数据处理装置中的寄存器寻址
  • 间接寻址和寄存器寻址的比较间接寻址优点 扩大了操作数的寻址范围 便于编制程序,方便地完成子程序的返回 缺点 访存次数多,执行时间长 寄存器寻址优点 无须访存,减少执行时间 指令字短,节省存储空间 基址...

    间接寻址和寄存器寻址的比较

    间接寻址

    优点

    扩大了操作数的寻址范围
    便于编制程序,方便地完成子程序的返回

    缺点

    访存次数多,执行时间长

    寄存器寻址

    优点

    无须访存,减少执行时间
    指令字短,节省存储空间

    基址寻址与变址寻址的比较

    基址寻址主要用于为程序或数据分配存储空间,故基址寄存器的内容通常由操作系统或管理程序确定,在程序运行过程中,值是不可变的,而指令字中的地址码是可变的。

    变址寻址中,变址寄存器的内容是用户自己设定的,在程序运行过程中是可变的,而指令字中的地址码是不可变的。编制寻址主要用于处理数组等问题,并且特别适合编制循环程序。

    展开全文
  • 2、指令寻址与数据寻址指令寻址思维导图顺序寻址跳跃寻址数据寻址直接寻址间接寻址寄存器寻址寄存器间接寻址隐含寻址立即寻址总结偏移寻址基址寻址变址寻址相对寻址堆栈寻址比较 指令寻址 思维导图 顺序寻址 由于...

    指令寻址

    思维导图

    在这里插入图片描述

    顺序寻址

    在这里插入图片描述

    由于主存按字编址,所以指令地址每次+1;0-1-2-3-4-5-6-7-8

    在这里插入图片描述

    由于指令字长=2B,主存按字节编址,所以每条指令间隔地址为2;此时PC+1实际上是加了俩个地址;

    在这里插入图片描述

    由于采用变长指令字结构,所以指令字长不确定;当读取指令时,先通过操作码判断是几地址指令,然后在将剩余的操作数取出。此时每条地址指令间隔不定。

    跳跃寻址

    在这里插入图片描述

    数据寻址

    在这里插入图片描述

    直接寻址

    在这里插入图片描述

    间接寻址

    在这里插入图片描述

    寄存器寻址

    在这里插入图片描述

    寄存器间接寻址

    在这里插入图片描述

    隐含寻址

    在这里插入图片描述

    立即寻址

    在这里插入图片描述

    总结

    在这里插入图片描述

    偏移寻址

    在这里插入图片描述

    基址寻址

    在这里插入图片描述

    1、用专用的基址寄存器保存程序首地址;或者用通用寄存器指明程序首地址(需要在逻辑地址中取几位指明用哪个通用寄存器作为基址寄存器);
    2、物理地址 = 逻辑地址 + 基址地址

    在这里插入图片描述

    变址寻址

    在这里插入图片描述

    与基址寻址的区别:
    1、基址寄存器只能由操作系统管理用户不能管理;而变址寄存器用户可以管理
    2、变址寄存器中的内容作为偏移量,形式地址作为基地址;(与基址寻址刚好相反)

    在这里插入图片描述
    PS:基址&变址复合寻址
    在这里插入图片描述

    相对寻址

    在这里插入图片描述
    在这里插入图片描述

    1、当程序内代码片段移动时,跳转指令采用直接寻址会出现错误;若采用相对寻址,则不论怎么移动都只与PC有关。
    2、实际位置与PC指针与偏移量有关
    3、硬件如何实现数的“比较”?
    在这里插入图片描述

    堆栈寻址

    在这里插入图片描述

    在这里插入图片描述

    硬堆栈:不需要访存
    软堆栈:每次访问都需要进行访存

    比较

    在这里插入图片描述

    展开全文
  • 直接寻址,指令中直接放地址: MOV A, 50H 把internal ram上,地址为80H单元里的数据送进A,假设80H地址里放的数据是01,那么最后A里的数据就是01 ...寄存器寻址,数据存于寄存器中 MOV A, R0 把R0中的数据放入A中 ...
  • 数据寻址的方式 总而言之,数据寻址就是通过地址查找操作数的方法 立即数寻址 寄存器寻址 有寄存器的就是寄存器寻址 简单快捷 还有段寄存器比如说,ds,cs,ss 存储器寻址 ...
  • 寄存器寻址有以下几种模式,我按照书上用表格列出来 类型 格式 操作数值 名称 立即数 $ImmImmImm ImmImmImm 立即数寻址 寄存器 rar_ara​ R[ra]R[r_a]R[ra​] 寄存器寻址 ...
  • 对于初学的朋友来说,寄存器寻址的几个常见的方式,理解起来还是比较麻烦的。现在尽量给大家说明白一点。 所谓寻址,就是要找存放某个东西的位置。 以下用日常生活中的情形来打比方,虽然不是很精准,但还是...
  • 寄存器寻址方式 立即数寻址方式 存储器寻址方式:( 直接寻址方式,寄存器间接寻址方式,变址和基址寻址方式,基址变址寻址方式) 串操作寻址方式 I/O端口寻址方式8086采用的是变字长指令格式,指令长度为1~6个...
  • 常见的寻址方式有立即寻址、直接寻址、间接寻址、寄存器寻址、寄存器间接寻址、相对寻址和变址寻址等。在立即寻址方式中,操作数包含在指令中;在直接寻址方式中,操作数存放在内存单元中;在寄存器寻址方式中,操作...
  • 几个寄存器寻址方式

    2020-12-29 21:49:34
    sa:[bx]寄存器间接寻址 sa:[bp]寄存器间接寻址 sa:[si]寄存器间接寻址 sa:[di]寄存器间接寻址 sa:[bx+idata]寄存器相对寻址 sa:[bp+idata] 寄存器相对寻址 sa:[si+idata] 寄存器相对寻址 sa:[di+idata] 寄存器相对...
  • 为什么LEA取有效地址指令的源操作数不能使用寄存器寻址方式啊
  • 七种寻址方式(立即寻址、寄存器寻址)

    万次阅读 多人点赞 2016-10-04 10:24:34
    七种寻址方式(立即寻址、寄存器寻址) 一、立即寻址方式 操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。 立即数可以是8位、16位或32位,该数值...
  • 寄存器寻址 IA: 每次传送后地址加4; IB: 每次传送前地址加4; DA: 每次传送后地址减4; DB: 每次传送前地址减4; FD: 满递减堆栈; ED: 空递减堆栈; FA: 满递增堆栈; EA: 空递增堆栈。 例: LDRIA R0!,...
  • ARM汇编多寄存器寻址

    千次阅读 2014-03-17 12:38:54
    多寄存器和堆栈寻址的用法:多寄存器寻址:LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB; 堆栈寻址:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED; 弄清堆栈寻
  • 寄存器寻址指令ldmia/ldmib和ARM存储器访问指令——多寄存器存取 多寄存器和堆栈寻址的用法:多寄存器寻址:LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB; 堆栈寻址:LDMFA,LDMFD,STMFA...
  • 当没用 NOAREGS 命令做明确的声明,编译器将使用绝对寄存器寻址方式访问函数选定(即用 using 或 REGISTERBANK 指定)的寄存器组,当函数假定的和实际所选的寄存器组不同时,将产生不可预知的结果,从而可能出现参数...
  • 寄存器寻址指令ldmia/ldmib

    千次阅读 2014-04-17 11:14:43
    多寄存器和堆栈寻址的用法:多寄存器寻址:LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB; 堆栈寻址:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED; 弄清堆栈寻址的SP的
  • 寻址时,每一个bit对应的是内存中的每一个单元,也就是一个Byte,那么16位寄存器寻址范围是 65536Byte = 64KB 但就算远古时期的电脑,64KB的寻址范围也是不够的。在设计BIOS的年代,CPU甚至还没有32位寄存器
  • 32位机,CPU是如何利用段寄存器寻址
  • arm的寻址方式我在周立功的那本书里是看过的,...我一直很觉得他说的多寄存器寻址和 块拷贝寻址有什么区别呢? 我还是认为他们是一种吧,叫块拷贝寻址吧。 以下这个官方图很说明 堆栈 寻址 和 块拷贝寻址的联系的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,307
精华内容 1,722
关键字:

寄存器寻址