精华内容
下载资源
问答
  • 寄存器分类

    2020-11-13 04:36:40
    寄存器主要并行寄存器和移位寄存器。并行寄存器是并行输入并行输出寄存器。移位寄存器除具寄存器的功能外,所存储的数码在时钟脉冲的作用下还可以移位。根据数码的移位方向分为左移寄存器和右移寄存器。左移...
  • ARM寄存器分类

    千次阅读 2019-07-19 15:43:42
    ARM处理器共有37个寄存器,所有这些寄存器都是32位的。 1,31 个通用寄存器,包括一个程序计数器寄存器 2,6 个状态寄存器 所有的寄存器编排有重叠的分组,有当前的处理器模式决定使用哪一个分组。在任何时候,15个...

    ARM处理器共有37个寄存器,所有这些寄存器都是32位的。
    1,31 个通用寄存器,包括一个程序计数器寄存器
    2,6 个状态寄存器
    所有的寄存器编排有重叠的分组,有当前的处理器模式决定使用哪一个分组。在任何时候,15个通用寄存器
    (R0 ~ R14),一个或两个状态寄存器和程序计数器是可见的。如下表所示,每一列显示在指定处理器模式下
    的那些通用寄存器和状态寄存器是可见的。
    在这里插入图片描述
    通用寄存器:通用寄存器(R0 ~ R15)可以分为3组
    1,未分组的寄存器R0 ~ R7
    2,分组的寄存器R8 ~ R14
    3,程序计数器寄存器 PC

    未分组的寄存器R0 ~ R7
    寄存器R0 ~ R7是未分组的寄存器。它们中的每一个在所有的处理器模式下都是相同的32位物理寄存器。它
    们是完全的通用寄存器,没有被处理器架构定义的特殊用途。

    分组的寄存器R8 ~ R14
    分组的寄存器R8 ~ R14,它们中的每一个代表的物理寄存器依赖与当前的处理器模式。当使用一个通用寄存
    器时,几乎所有的指令都可以使用这些分组寄存器。
    寄存器R8 ~ R12中的每一个都有两个分组物理寄存器:一组用于FIQ模式,另一组用于其他处理器模式。第
    一组可以用R8_fiq ~ R14_fiq表示,另一组用R8_usr ~ R14_usr表示。
    寄存器R8 ~ R12在体系中没有任何指定的特殊目的。然而,在简单的中断处理中只需要使用寄存器R8 ~
    R14,FIQ模式下的寄存器允许更快的中断处理。
    寄存器R3和R14都有6个分组物理寄存器,其中一个用在User和SYSTEM模式下,其余的5个用在5种异常模式下,当需要区分时用如下格式命名:
    R13_
    R14_
    注: 是指usr, svc, abt, und, irq和fiq

    寄存器R13通常被用作栈寄指针SP,每一种异常模式都有自己的分组寄存器R13

    寄存器R14(链接寄存器或LR)在体系结构中有两种特殊用途:
    1,在各种模式下,R14用来保存子程序的返回地址。当一条BL或者BLX指令执行子程序调用时,R14设为子
    程序的返回地址。通过复制R14中的地址值到PC中来实现子程序的返回。
    2,当发生异常时,相关异常模式下的R14就设为异常返回地址。异常的返回地址与子程序的返回类似,使用
    指令恢复异常发生前的程序状态。

    寄存器R15:程序计数器
    R15是程序计数器(PC),其内容是处理器要取的下一条指令的地址。在ARM状态下,所有的ARM指令都是4字
    节长,一直都是字对齐的,这意味着PC的最低两位一直是0,因此PC只包含30位可变的位。ARM体系中的
    一些版本也支持其他两种处理器状态。T变种支持Thumb状态,J变种支持Jazelle状态。这些状态下PC可以
    是半字和字节对齐。

    展开全文
  • 计算机寄存器分类

    千次阅读 2012-04-04 12:40:10
    计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志...
    计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
     寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高; 寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器ECX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数; 寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
     在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。2、变址寄存器32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。3、指针寄存器其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。32位CPU有2个32位通用寄存器EBP和ESP。它们主要用于访问堆栈内的存储单元,并且规定:EBP为基指针(Base
     Pointer)寄存器,用它可直接存取堆栈中的数据; ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。 寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。4、段寄存器段寄存器是根据内存分段的管理模式而设置的。内存单元 的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。CPU内部的段寄存器:ECS——代码段寄存器(Code
     Segment Register),其值为代码段的段值; EDS——数据段寄存器(Data Segment Register),其值为数据段的段值; EES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值; ESS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值; EFS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值; EGS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
     在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简单描述如下:实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为“段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。 保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值。。
     5、指令指针寄存器32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。6、标志寄存器一、运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。2、奇偶标志PF(Parity
     Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。3、辅助进位标志AF(Auxiliary Carry Flag)在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字操作时,发生低字节向高字节进位或借位时;(2)、在字节操作时,发生低4位向高4位进位或借位时。对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。4、零标志ZF(Zero
     Flag)零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。5、符号标志SF(Sign Flag)符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。6、溢出标志OF(Overflow Flag)溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。“溢出”和“进位”是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。二、状态控制标志位状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。1、追踪标志TF(Trap
     Flag)当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。2、中断允许标志IF(Interrupt-enable Flag)中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。CPU的指令系统中也有专门的指令来改变标志位IF的值。3、方向标志DF(Direction
     Flag)方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。具体规定在第5.2.11节——字符串操作指令——中给出。在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。三、32位标志寄存器增加的标志位1、I/O特权标志IOPL(I/O Privilege Level)I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。2、嵌套任务标志NT(Nested
     Task)嵌套任务标志NT用来控制中断返回指令IRET的执行。具体规定如下:(1)、当NT=0,用堆栈中保存的值恢复EFLAGS、CS和EIP,执行常规的中断返回操作;(2)、当NT=1,通过任务转换实现中断返回。3、重启动标志RF(Restart Flag)重启动标志RF用来控制是否接受调试故障。规定:RF=0时,表示“接受”调试故障,否则拒绝之。在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。4、虚拟8086方式标志VM(Virtual 8086 Mode)如果该标志的值为1,则表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。
    
    展开全文
  • 寄存器与七寻址方式

    万次阅读 多人点赞 2015-09-15 09:16:09
    一、寄存器 总共有14个16位寄存器,8个8位寄存器   通用寄存器:  数据寄存器:  AH(8位) AL(8位) AX(16位) (AX和AL又称累加器)  BH(8位) BL(8位) BX(16位) (BX又称基址寄存器,唯一作为存储器指针使用寄存器)...

    汇编语言经典教程:http://www.feiesoft.com/asm/

    一、寄存器

    总共有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


    展开全文
  • 寄存器

    千次阅读 2018-08-08 18:37:35
    1.寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑...

           1.寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,存器有累加器(ACC)

           2.包括通用寄存器、专用寄存器和控制寄存器

          3.分类

    数据寄存器- 用来储存整数数字(参考以下的浮点寄存器)。在某些简单/旧的CPU,特别的数据寄存器是累加器,作为数学计算之用。

    地址寄存器- 持有存储器地址,用来访问存储器。在某些简单/旧的CPU里,特别的地址寄存器是索引寄存器(可能出现一个或多个)。

    通用目的寄存器(GPRs) - 可以保存数据或地址两者,也就是说它们是结合数据/地址 寄存器的功用。

    浮点寄存器(FPRs) - 用来储存浮点数字。

    常数寄存器- 用来持有只读的数值(例如0、1、圆周率等等)。

    向量寄存器- 用来储存由向量处理器运行SIMD(Single Instruction, Multiple Data)指令所得到的数据。

    特殊目的寄存器- 储存CPU内部的数据,像是程序计数器(或称为指令指针),堆栈寄存器,以及状态寄存器(或称微处理器状态字组)。

    指令寄存器 register)- 储存现在正在被运行的指令。

    索引寄存器(index register)- 是在程序运行时用来更改运算对象地址之用。

    PORT1的控制寄存器PORT1的控制寄存器在某些架构下,模式指示寄存器(也称为“机器指示寄存器”)储存和设置跟处理器自己有关的数据。由于他们的意图目的是附加到特定处理器的设计,因此他们并不被预期会成为微处理器世代之间保留的标准。

    有关从随机存取存储器提取信息的寄存器与CPU(位于不同芯片的储存寄存器集合)

    存储器缓冲寄存器(Memory buffer register)

    存储器数据寄存器(Memory data register)

    存储器地址寄存器(Memory address register)

    存储器型态范围寄存器(Memory Type Range Registers)[1]

    向量寄存器[2]

    4.工作原理

    1、一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

    区别:

    内部总线实现CPU内部各个器件之间的联系。

    外部总线实现CPU和主板上其它器件的联系。

    8086CPU有14个寄存器 它们的名称为:

       AX、BX、CX、DX、SI、DI、SP、BP、

       IP、CS、SS、DS、ES、PSW。

    8086CPU所有的寄存器都是16位的,可以存放两个字节,一个字节8位。

    AX、BX、CX、DX 通常用来存放一般性数据被称为通用寄存器。

    一个16位寄存器所能存储的数据的最大值为多少? 

    因为每一位存放的数据是0或1,那么最大的数值自然就是 1111 1111 1111 1111(2),也就是2^16-1。

     

    2、通用寄存器(重点)

    8086上一代CPU中的寄存器都是8位的,为保证兼容性,

    这四个寄存器都可以分为两个独立的8位寄存器使用。
    AX可以分为AH和AL;
    BX可以分为BH和BL;
    CX可以分为CH和CL;
    DX可以分为DH和DL。

    AX的低8位(0位~7位)构成了AL寄存器,高8位(8位~15位)构成了AH寄存器。

    AH和AL寄存器是可以独立使用的8位寄存器,如果当成是8位寄存器使用,那么他们就是独立的,没有任何关系。

    一个8位寄存器所能存储的数据的最大值是多少?二进制数值 1111 1111 ,也就是 2^8-1。

    3、字在寄存器中的存储

    注意:在进行数据传送或运算时,要注意指令的操作数的位数要匹配。

    4、物理地址的表示(重点)

    CPU访问内存单元时要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间。

    我们将这个唯一的地址称为物理地址。

    不同的CPU有不同的形成物理地址的方式。

    (1)16位结构的CPU

    8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。

    8086外部有20位地址总线,可传送20位地址,寻址能力为1M。

    那么,8086CPU如何用内部16位的数据,转换成20位的地址呢?

    8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。

    段地址+偏移地址 -> 地址加法器 -> 20位的物理地址。

    地址加法器合成物理地址的方法:段地址×16+偏移地址=物理地址

    “段地址×16”有一个更为常用的说法就是数据左移4位。(二进制位)

    二进制的数据左移4位,意味着乘以2^4=16。

    这样做的目的主要是为了弥补内部总线16位的缺陷而设计的。

    5、关于段空间

    内存没有分段,段的划分来自于CPU,

    由于8086CPU用“(段地址×16)+偏移地址=物理地址”的方式给出内存单元的物理地址,

    使得我们可以用分段的方式来管理内存。

    以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,

    用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。

    (1)段地址×16 必然是 16的倍数,所以一个段的起始地址也一定是16的倍数;

    (2)偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K。

    CPU可以用不同的段地址和偏移地址形成同一个物理地址。

    如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少内存单元?

    因为偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64K个内存单元。

    比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H~1FFFFH。

    6、地址的描述

    在8086PC机中,存储单元的地址用两个元素来描述。即段地址和偏移地址。

    “数据在21F60H内存单元中。”对于8086PC机的两种描述:

    (a)数据存在内存2000:1F60单元中;

    (b)数据存在内存的2000段中的1F60H单元中。

    可根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段。

     

    7、段寄存器就是提供段地址的。

    8086CPU有4个段寄存器: CS、DS、SS、ES。

    CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。

    CS为代码段寄存器,IP为指令指针寄存器。

    在 8086CPU 加电启动或复位后( 即 CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H。

    即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行。

    FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。

    8、修改CS,IP

    mov指令不能用于设置CS、IP的值,8086CPU没有提供这样的功能。

    8086CPU为CS、IP提供了另外的指令来改变它们的值:转移指令

    JMP 段地址:偏移地址

    JMP 2AE3:3

    功能:用指令中给出的段地址修改CS,偏移地址修改IP。CS = 2AE3H, IP = 0003H。

    仅修改IP的内容:

    jmp 某一合法寄存器

    jmp ax   (类似于 mov IP,ax)

    功能:用寄存器中的值修改IP。

    8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。

    9、关于debug指令(Win7没有这个指令,XP才有)

    R命令查看、改变CPU寄存器的内容;

    D命令查看内存中的内容;

    E命令改写内存中的内容;

    U命令将内存中的机器指令翻译成汇编指令;

    T命令执行一条机器指令;

    A命令以汇编指令的格式在内存中写入一条机器指令。

     

     

    展开全文
  • Intel 80X86寄存器分类介绍

    千次阅读 2015-09-12 09:27:50
    开始读Linux内核相关书籍时,在书店里碰到一个计算机专业科班出身的朋友,向他请教时,他认为学习...本文是我今日对微处理器寄存器学习总结所得,主要是翻译自《Intel 微处理器英文第7版》,阅读的过程中我参考了网上
  • 寄存器和8地址寻址方式

    千次阅读 2017-11-28 17:13:26
    ...段寄存器是因为对内存的分段管理而设置的。...1. 取命令:段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。
  • 寄存器的分类及功能

    千次阅读 2019-05-02 12:04:33
    eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。 比方说:add eax,-2 ; //可以认为是给变量eax加上-2...
  • 在汇编中,个人感觉最重要的部分其实就是寄存器了,这次我们了解一下寄存器的分类和功能。 先说一下寄存器是什么吧,其实就是一部分的空间,我们可以使用这些空间来存储内容。 寄存器的空间都是16位的(80x86中,...
  • ARM寄存器

    2016-08-01 18:39:58
    ARM寄存器 分类 分组 堆栈指针 链接寄存器
  • 寄存器定义,分类

    千次阅读 2009-01-04 23:50:00
    寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。寄存器的用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以...
  • stm32寄存器(四输入输出方式)

    千次阅读 2020-03-10 16:32:37
    浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了. 开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V,也可以接一个电阻到5V,这样,在输出1的时候,...
  • 寄存器详解

    千次阅读 2012-12-07 18:09:14
    AX/EAX: 累加器,算术通用寄存器,与端口的通讯也用这个寄存器. BX/EBX: 基址寄存器. CX/ECX: 计数器,结合串处理指令使用. DX/EDX: 算术通用寄存器.和累加器结合表示双字长的数,其中累加器用于存低位数. ...
  • 移位寄存器寄存器

    千次阅读 2019-11-26 11:36:55
    在数字电路中,移位寄存器是一在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。分为左移寄存器、右移...
  • 8086一共9标志寄存器 分别是 CF进位标志,值为1进位,为0无进位 PF奇偶标志,代表数据的奇偶,1为偶,0为奇 OF溢出标志,1代表溢出,0代表未溢出 AF辅助进位标志,1有进位,0无进位 ZF判0标志,1代表值为0,0代表...
  • 微机原理三大内部寄存器,详细分类

    千次阅读 多人点赞 2019-06-24 17:30:24
    一 、通用寄存器 1.1 数据寄存器(AX,BX,CX,DX) 2.1 地址指针寄存器(SP,BP) 3.1 变址寄存器(SI,DI) 1、数据寄存器 / 数据寄存器包括: 8088/8086含4个16位数据寄存器,它们又可分为8个8位寄存器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,327
精华内容 43,730
关键字:

寄存器分哪些种