精华内容
下载资源
问答
  • 寄存器间接寻址(register indirect addressing) 操作数在存储器中,其有效地址EA存放在某个寄存器中。寄存器的使用在16位寻址和32位寻址时不一样。 (1)16位寻址 寄存器 有效地址存放在SI, DI, BX, BP中。 如果...
  • 寄存间接寻址方式是指寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。MCS-51单片机规定工作寄存器的R0、R1做为间接寻址寄存器。用于寻址内部或外部数据存储器的256个单元...

    寄存间接寻址方式是指寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。

    MCS-51单片机规定工作寄存器的R0、R1做为间接寻址寄存器。用于寻址内部或外部数据存储器的256个单元。为什么会是256个单元呢?我们知道,R0或者R1都是一个8位的寄存器,所以它的寻址空间就是2的八次方=256。

    例:MOV  R0,#30H  ;将值30H加载到R0中

    MOV  A,@R0    ;把内部RAM地址30H内的值放到累加器A中

    MOVX A,@R0    ;把外部RAM地址30H内的值放到累加器A中

    大家想想,如果用DPTR做为间址寄存器,那么它的寻址范围是多少呢?DPTR是一个16位的寄存器,所以它的寻址范围就是2的十六次方=65536=64K。因用DPTR做为间址寄存器的寻址空间是64K,所以访问片外数据存储器时,我们通常就用DPTR做为间址寄存器。

    例:MOV   DPTR,#1234H  ;将DPTR值设为1234H(16位)

    MOVX  A,@DPTR      ;将外部RAM或I/O地址1234H内的值放到累加器A中

    在执行PUSH(压栈)和POP(出栈)指令时,采用堆栈指针SP作寄存器间接寻址。

    例:PUSH  30H    ;把内部RAM地址30H内的值放到堆栈区中

    堆栈区是由SP寄存器指定的,如果执行上面这条命令前,SP为60H,命令执行后会把内部RAM地址30H内的值放到RAM的61H内。

    那么做为寄存器间接寻址用的寄存器主要有哪些呢?我们前面提到的有四个,R0、R1、DPTR、SP

    寄存器间接寻址范围总结:

    1、内部RAM低128单元。对内部RAM低128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为@Ri(i=0或1)。

    2、外部RAM 64KB。对外部RAM64KB的间接寻址,应使用@DPTR作间址寻址寄存器,其形式为:@DPTR。

    例如MOVX A,@DPTR;其功能是把DPTR指定的外部RAM的单元的内容送入累加器A中。

    外部RAM的低256单元是一个特殊的寻址区,除可以用DPTR作间址寄存器寻址外,还可以用R0或R1作间址寄存器寻址。

    例如MOVX  A,@R0;这条指令的意思是,把R0指定的外部RAM单元的内容送入累加器A。

    堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。

    寄存器间接寻址方式不可以访问特殊功能寄存器!!

    寄存器间接寻址也须以寄存器符号的形式表示,为了区别寄存器寻址我寄存器间接寻址的区别,在寄存器间接寻址方式式中,寄存器的名称前面加前缀标志“@”。

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

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

    间接寻址

    优点

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

    缺点

    访存次数多,执行时间长

    寄存器寻址

    优点

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

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

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

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

    展开全文
  • 关键字:、立即寻址、寄存器寻址、存储器操作数寻址方式【直接寻址、寄存器间接寻址、基址寻址、变址寻址、基址加变址寻址】、标志寄存器

    🚀



    感觉越来越能 “画” 了… 🍋

    文章中穿插了一些个人的理解,特别是绿色字体部分,如有笔误,烦请留言。

    上一篇文章链接: 《【计算机与汇编原理③】——80X86微处理器》.
    下一篇文章链接: 《【计算机和汇编原理⑤】——指令系统(下)【 2万5千字总结 】》.


    一、概述


      ● 指令:通知 CPU 执行某种操作的 “命令”。CPU全部指令的集合,称为指令系统。

      我们在编写程序的时候,都是一行一行地编写的,每一行一般是个语句,而一条语句一般包含多条指令。比如说,我要执行 “A = B + C;” 这条语句,那么我得依次执行:① 取指令(取数据C)。 ② 取指令(取数据B)。③ 加指令(B和C相加)。④ 放指令(将结果送到A)

      ● 指令的书写格式
        ◆ 目标指令(机器指令):二进制形式的序列 (即:一串0、1代码)。注意:硬件只能识别、存储、运行目标指令。
        ◆ 符号指令:字符串形式的序列 (即用规定的操作码和操作数助记符,按照规定的书写格式书写的指令。

      ● 键盘等外设的出现,为简化指令的输入带来了方便。同时,为了便于记忆和输入,在人机交互中,一般不再直接输入机器指令,而是输入对应的采用指令助记符描述的符号指令。

      ● 指令的组成:(大多数指令)由操作码和操作数两个部分组成。

    在这里插入图片描述

      ◆ 操作码:通知CPU执行什么操作 (唯一)
      ◆ 操作数:指令的操作对象 (一个或多个)


      ● 举几个关于指令的栗子:

    在这里插入图片描述
      ◆ 说明:
        ① 第一个操作 “1234H → AX” 的意思:将地址为 “1234H” 的寄存器里面的数据,传送到 CPU里面的通用寄存器 EAX 的低 16 位里面去。
        ② “80486符号指令” 这一栏就是程序员敲的代码,而 “80486机器指令” 就是计算机能读得懂的数据。
        ③ MOV(MOVE的缩写):传送。ADD: 加。SUB: 减。RET: RETURN 返回。


      ● CPU 只能识别、存储、运行目标指令,而用机器指令编程非常困难。于是早期的专家们发明了符号指令,再经过某种特殊的软件把符号指令 → 机器指令。目标程序的生成的流程图如下:

    在这里插入图片描述

      ● 指令长度:指令在存储器中占用的字节数称为指令长度。86x86指令长度 (指机器指令长度) 为1~16 字节。

      ● 指令地址:存放指令第一字节的内存单元地址。单字节指令占用1个内存单元,多字节指令占用连续的内存单元,。

      ● 指令存放:指令存放在内存中时,先存放操作码,再存放操作数。多字节操作数连续存放。顺序依据小端法原则,即: 低位字节存放在低地址单元,高位字节存放在相邻的高地址单元。

      如:12345H单元中有一条指令 “ MOV AX,6789H ”,则它在内存中的形式如下图所示:

    在这里插入图片描述

      ● 符号指令的书写格式

    在这里插入图片描述

      ◆ 说明:
        ① 操作码:表示 CPU 执行的操作。
        ② 操作数:指令执行时的操作对象 (一个或多个)。
        ③ 标号:以字母开头,后面可以跟字母、数字或下划线,但长度必须 ≤ 31个字符,标号又称符号地址,代表该指令的逻辑地址。可有可无,设置是为了程序的转向。
        ④ 注解:以 “ ;” 开头,不执行,打印程序清单时照原样打印,“系统保留字”不能做标号。

      ◆ 举个栗子如下:
         N E X T :         A D D    A X , B X        ; A X + B X → A X NEXT:\,\,\,\,\,\,\,ADD\,\,AX,BX\,\,\,\,\,\,;AX+BX → AX NEXT:ADDAX,BX;AX+BXAX
                                         I N C        S I                      ; S I + 1 → S I \,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,INC\,\,\,\,\,\,SI\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,;SI+1 → SI INCSI;SI+1SI



    二、寻址方式(这一章的难点、重点)


      ● 寻址:形成操作数地址码的过程。操作数是指令的操作对象,寻址方式就是在指令中,使用特定的助记符 (地址表达式),告知 CPU 如何计算出操作数的地址。寻址方式只有针对操作数而言才有意义。

      ● 操作数的分类
        ① 立即数:操作数包含在指令中。
        ② 寄存器操作数:操作数存放在 CPU 的某个寄存器中。
        ③ 存储器操作数(内存操作数) :操作数存放在存储器中。
        ④ I/O 端口操作数:操作数存放在 I/O 端口中。

      ● 本章只讲述前 3 种操作数对应的寻址方式,包含以下 3 类共计 7 种寻址方式:
        ① 立即寻址方式:获得立即数
        ① 寄存器寻址方式:获得寄存器操作数
        ① 存储器寻址方式:获得存储器操作数(内存操作数)


    1、立即寻址

      ● 立即寻址:操作数包含在本条指令中,是指令的一部分,和指令操作码一起存放在代码段中。CPU 完整地取出该条指令,也就获得了操作数。流程如图所下:

    在这里插入图片描述


      ◆ 举个栗子如下:
      例: M O V D X , 1234 H MOV \quad DX,1234H MOVDX,1234H

    在这里插入图片描述
      ◆ 说明:
        ① “DX” 是目标操作数,“1234H” 是源操作数
        ② 对于“1234H” 这个源操作数,就是立即寻址,因为这个操作数就在指令里面。
        ② 而对于 “AX” 这个目标操作数,是寄存器寻址,后面再讲。

      ◆ 还有些例子如下:
        ① M O V E A X , 12345678 H MOV \quad EAX,12345678H MOVEAX,12345678H
        ② M O V B L , 10101010 B ; A A H → B L MOV \quad BL,10101010B \quad\quad;AAH → BL MOVBL,10101010B;AAHBL
        ③ M O V C L , – 4 ; F C H → C L MOV \quad CL, – 4 \quad\quad;FCH →CL MOVCL,4;FCHCL
        ④ M O V D L , ’ A ’ ; 41 H → D L MOV \quad DL,’A’ \quad\quad;41H →DL MOVDL,A;41HDL
        ⑤ A D D A L , 0 C 8 H ADD \quad AL,0C8H ADDAL,0C8H
        ⑥ M O V S I , 3 ∗ 5 ; 15 → S I MOV \quad SI,3*5 \quad\quad;15 →SI MOVSI,35;15SI

      ● 上例中 源操作数 均为为立即寻址, 立即数书写规定:
        ① 立即数以数字开头。若以A~F开头的 16 进制数,必须有个前缀 0。
        ② 立即数的数制用后缀表示,B 表示二进制,H 表示十六进制, D 或缺省表示十进制,单引号括起来的字符编译成相应的 ASCII 码 。
        ③ 可以用 “+、– 、* 、/ ” 组成立即数表达式
        ④ 程序员可以按自己的习惯书写立即数。各种合法的立即数经汇编后,一律自动转换成等值的二进制数,负数用补码表示。


    2、寄存器寻址

      ● 寄存器寻址:操作数在 CPU 的某个寄存器中,符号指令中直接写出寄存器名称。流程如图所下:

    在这里插入图片描述


      ◆ 举个栗子如下:
      例: M O V D X , A X MOV \quad DX,AX MOVDX,AX

    在这里插入图片描述
      ◆ 说明:
        ① “DX” 是目标操作数,“AX” 是源操作数
        ② “AX” 和 “DX” 这两个操作数都在寄存器里面,都是寄存器寻址。


      ◆ 再把原先的例子搬下来:
        ① M O V E A X , 12345678 H MOV \quad EAX,12345678H MOVEAX,12345678H
        ② M O V B L , 10101010 B ; A A H → B L MOV \quad BL,10101010B \quad\quad;AAH → BL MOVBL,10101010B;AAHBL
        ③ M O V C L , – 4 ; F C H → C L MOV \quad CL, – 4 \quad\quad;FCH →CL MOVCL,4;FCHCL
        ④ M O V D L , ’ A ’ ; 41 H → D L MOV \quad DL,’A’ \quad\quad;41H →DL MOVDL,A;41HDL
        ⑤ A D D A L , 0 C 8 H ADD \quad AL,0C8H ADDAL,0C8H
        ⑥ M O V S I , 3 ∗ 5 ; 15 → S I MOV \quad SI,3*5 \quad\quad;15 →SI MOVSI,35;15SI

      ● 上例 目标操作数 (左边)均为为寄存器寻址,而 源操作数 (右边)均为为立即寻址


    3、存储器操作数寻址方式

      ● 存储器操作数寻址方式是最复杂的,它又分成 5 个小类。

      ● 在读写内存操作数之前,CPU必须知道相关存储单元的物理地址。但由于 CPU 对存储器采用分段管理, 因此在指令格式中 只能写出存放操作数所在内存单元的 “逻辑地址”。

      存储单元逻辑地址表达式的一般形式:

    在这里插入图片描述

      ● 实模式下,物理地址 = 段寄存器 × 24 + 偏移地址【后面细讲】
      程序员的责任仅在于正确的书写逻辑地址表达式,然后由 CPU 自动运算以求出物理地址。


    3.1 直接寻址 ⭐️

      ● 直接寻址的流程如图所下:

    在这里插入图片描述

      ① 地址表达式的格式1:“ 段寄存器:[偏移地址] ”
        如: M O V A L , E S : [ 2 C H ] ; 从 E S ( 附 加 段 ) 且 偏 移 地 址 为 2 C H 的 单 元 取 数 → A L MOV \quad AL, ES:[2CH] \quad;从ES(附加段)且偏移地址为2CH的单元取数→AL MOVAL,ES:[2CH];ES()2CHAL
        如: M O V A X , D S : [ 1234 H ] ; 从 D S ( 数 据 段 ) 且 偏 移 地 址 为 1234 H 的 单 元 取 数 → A X MOV \quad AX, DS:[1234H] \quad ;从DS(数据段)且偏移地址为1234H的单元取数 → AX MOVAX,DS:[1234H];DS()1234HAX
      注:这种格式很少使用,通常情况下,程序员并不知道某单元的偏移地址。【常用下面这种格式】

      ② 地址表达式的格式2:“ 段寄存器:变量名 ”,即用变量名来代表存储单元的有效地址


      ◆ 举个采用第一种地址表达式的栗子如下:
        例: M O V A X , D S [ 1234 H ] MOV \quad AX,DS[1234H] MOVAX,DS[1234H]

    在这里插入图片描述

      ◆ 举个采用第二种地址表达式的栗子如下:
        首先假设取名为 “XX” 的DS(数据段) 的内容为 11H
        其次假设取名为 “YY” 的ES(附加段) 的内容为 2233H
         M O V A L , D S : X X ( 或 M O V A L , X X ) ; 取 名 为 “ X X ” 的 D S ( 数 据 段 ) 的 内 容 → A L MOV \quad AL, DS:XX (或 MOV \quad AL, XX) \quad\quad;取名为 “XX” 的DS(数据段)的内容→AL MOVAL,DS:XX(MOVAL,XX);XXDS()AL
         M O V A X , E S : Y Y ( 或 M O V A X , Y Y ) ; 取 名 为 “ Y Y ” 的 E S ( 附 加 段 ) 的 内 容 → A X MOV \quad AX, ES:YY (或 MOV \quad AX, YY) \quad\quad;取名为 “YY” 的ES(附加段)的内容→AX MOVAX,ES:YY(MOVAX,YY);YYES()AX

      ◆ 说明:
        ① 汇编语言允许为某单元起一个 “名字”,这个名字就称为该单元的 “变量名”,经汇编之后,变量名有段基址和偏移量两种属性
        ② 由于变量名是唯一的,程序中不能有重复的变量名。
        ③ “段寄存器:”可以省略不写。


    3.2 寄存器间接寻址 ⭐️

      ● 寄存器间接寻址 又称 “间接寻址”、“间址”。
      ● 间接寻址操作数在内存单元中,该单元的段基址在段寄存器中,而偏移地址在间址寄存器中,CPU首先找到这两者,然后进行地址计算,得到最终的物理地址。

      间接寻址与直接寻址的不同,就在于多了一个 “间接寄存器” ,它的操作数中没有直接 “放” 偏移量,而需要 CPU 去间接寄存器把那个偏移量找出来。

      ● 间接寻址的地址表达式:“ 段寄存器:[间址寄存器] ”
      某单元的物理地址 = 段寄存器内容 × 24 + 间址寄存器

      ● 访问约定的逻辑段,间接寻址的地址表达式可简化为:“ [间址寄存器] ”
      某单元的物理地址 = 约定的段寄存器内容 × 24+ 间址寄存器

      ● 间址寄存器和约定访问的逻辑段的图表:

    间址寄存器约定访问的逻辑段适用范围
    BPSS(堆栈段)16位寻址方式
    BX、SI、DIDS(数据段)16位寻址方式
    EBP、ESPSS(堆栈段)32位寻址方式
    EAX、EBX、ECX、EDX、ESI、EDIDS(数据段)32位寻址方式

      ◆ 举个栗子:
      设取名为 “BUF” 的数据段的字节单元内容为 55H,需要取出该数 → AL

      ① 解法1:用 BX 间址【在表格中的第三排】
         M O V A X ,   B U F 数 据 段 的 段 基 址 MOV \quad AX,\,BUF数据段的段基址 MOVAX,BUF
         M O V D S ,   A X MOV \quad DS,\,AX MOVDS,AX
         M O V B X ,   B U F 单 元 的 有 效 地 址 ; 有 效 地 址 也 称 为 偏 移 地 址 MOV \quad BX,\,BUF单元的有效地址\quad \quad;有效地址也称为偏移地址 MOVBX,BUF;
         M O V A L ,   D S : [ B X ] ; A L = 55 H MOV \quad AL,\,DS:[BX] \quad \quad\quad \quad\quad \quad\quad ;AL=55H MOVAL,DS:[BX];AL=55H
      由于 BX 为间址寄存器,且为约定访问的是数据段,因此 “DS:” 可省。故最后一行代码等价于: “ M O V A L ,   [ B X ] MOV \quad AL ,\, [BX] MOVAL,[BX]

      ② 解法2:用 BP 间址【在表格中的第二排】
         M O V A X ,   B U F 数 据 段 的 段 基 址 MOV \quad AX ,\, BUF数据段的段基址 MOVAX,BUF
         M O V D S ,   A X MOV \quad DS ,\, AX MOVDS,AX
         M O V B P ,   B U F 单 元 的 有 效 地 址 MOV \quad BP ,\, BUF单元的有效地址 MOVBP,BUF
         M O V A L ,   D S : [ B P ] ; A L = 55 H MOV \quad AL ,\, DS:[BP] \quad\quad\quad\quad\quad\quad\quad;AL=55H MOVAL,DS:[BP];AL=55H
      由于 BP 为间址寄存器,但约定访问的是堆栈段(不是数据段),因此 “DS:” 不可省,即不能写成: “ M O V A L ,   [ B P ] MOV \quad AL ,\, [BP] MOVAL,[BP]

      ② 解法3:用变量名直接寻址
         M O V A X ,   B U F 数 据 段 的 段 基 址 MOV\quad AX,\,BUF数据段的段基址 MOVAX,BUF
         M O V D S ,   A X MOV\quad DS,\,AX MOVDS,AX
         M O V A L ,   B U F ; A L = 55 H MOV\quad AL,\, BUF\quad\quad\quad\quad\quad\quad\quad \quad\quad ;AL=55H MOVAL,BUF;AL=55H


    3.3 基址寻址 ⭐️

      ● 在基址寻址中,有效地址(即偏移地址)由两部分组成。一部分存放在基址寄存器中,另一部分为常量 。

      基址寻址与间接寻址的不同,就在于偏移地址的计算复杂了点。此时 CPU 不能去间接寄存器直接找出偏移地址,而是去基址寄存器把 “基偏移地址” 找出来,再把这 “基偏移地址” 和 “位移量” 相加,间接地得到偏移地址。

      ① 基址寻址的地址表达式 1:“ 段寄存器:[基址寄存器 + 位移量] ”
      物理地址 = 段寄存器内容 × 24 + 基址寄存器 + 位移量

      ② 基址寻址的地址表达式 2:“ [基址寄存器 + 位移量] ”。使用条件:访问约定的逻辑段。
      物理地址 = 约定的段寄存器内容 × 24 + 基址寄存器 + 位移量

      ● 基址寄存器和约定访问的逻辑段:

    基址寄存器约定访问的逻辑段适用范围
    BPSS(堆栈段)16位寻址方式
    BXDS(数据段)16位寻址方式
    EBP、ESPSS(堆栈段)32位寻址方式
    EAX、EBX、ECX、EDX、ESI、EDIDS(数据段)32位寻址方式

      ◆ 举个栗子:
      设数据段 BUF 单元依次有: 78 H , 56 H , 34 H , 12 H 78H,56H,34H,12H 78H,56H,34H,12H,现在需要进行一些访问。
      则: M O V A X , 数 据 段 段 基 址 MOV AX , 数据段段基址 MOVAX,
         M O V D S ,   A X MOV \quad DS ,\, AX MOVDS,AX
         M O V B X ,   B U F 单 元 有 效 地 址 MOV \quad BX ,\, BUF单元有效地址 MOVBX,BUF
         M O V D H ,   [ B X + 1 ] ; D H = 56 H MOV \quad DH ,\, [BX+1] \quad \quad \quad\quad;DH=56H MOVDH,[BX+1];DH=56H
         M O V D X ,   [ B X + 2 ] ; D X = 1234 H MOV \quad DX ,\, [BX+2] \quad \quad \quad \quad;DX=1234H MOVDX,[BX+2];DX=1234H

    在这里插入图片描述
      注:DH 是 EDX 的高 8 位,所以只能送入一个 16 进制数。 DX 是 EDX 的低 16 位,所以能送入两个 16 进制数。


    3.4 变址寻址 ⭐️

      ● 在变址寻址中,有效地址(即偏移地址)由两部分组成。一部分存放在变址寄存器中(可能这部分还要乘以一个系数),另一部分为常量 。

      变址寻址与基址寻址的不同,就在于偏移地址的计算 复杂了点。此时 CPU 不去基址寄存器,而是去变址寄存器。

      ● ① 有比例因子的变址寻址的表达式:“ 段寄存器:[比例因子 × 变址寄存器 + 位移量] ”
      物理地址 = 段寄存器 × 24 + 比例因子 × 变址寄存器 + 位移量

      ● ② 没有比例因子的变址寻址的表达式:“ 段寄存器:[变址寄存器 + 位移量] ”
      访问约定的逻辑段可简化为 : [变址寄存器 + 位移量]
      物理地址 = 约定的段寄存器 × 24 + 变址寄存器 + 位移量

      ● 变址寄存器与约定访问的逻辑段:

    变址寄存器约定访问的逻辑段适用范围
    SI、DIDS(数据段)无比例因子,且16位寻址方式
    EBPSS(堆栈段)有比例因子,且32位寻址方式
    EAX、EBX、ECX、EDX、ESI、EDIDS(数据段)有比例因子,且32位寻址方式

      ● 说明:比例因子只能是1、2、4、8
        因此 “ M O V A L , [ 8 × S I + 15 ] ; MOV AL, [8\times SI+15]; MOVAL,[8×SI+15]; ” 是非法的,因为 16 位的寻址方式不能使用比例因子。(即 SI 不行,但 ESI 可以)
        比例因子错了的非法指令: M O V A L ,   [ 10 × E S I + 5 ] MOV \quad AL ,\, [10\times ESI+5] MOVAL,[10×ESI+5]
        访问附加段的正确指令: M O V A L ,   E S : [ S I ] MOV \quad AL ,\, ES:[SI] MOVAL,ES:[SI]
        访问数据段的正确指令: M O V A L ,   [ S I ] MOV \quad AL , \,[SI] MOVAL,[SI]


    3.5 基址加变址寻址 ⭐️

      ● 在基址加变址寻址中,有效地址(即偏移地址)由三部分组成。第一部分存放在基址寄存器中,第二部分存放在变址寄存器,第三部分为常量(位移量)。

      基址加变址寻址,简单来说,就是 “基址寻址” 与 “变址寻址” 的结合。

      ① 有比例因子的基址加变址的地址表达式:“ 段寄存器:[基址寄存器 + 比例因子 × 变址寄存器 + 位移量] ”

      ② 有比例因子且有访问约定逻辑段的地址表达式:“ [基址寄存器 + 比例因子 × 变址寄存器 + 位移量] ”

      ③ 无比例因子基址加变址的地址表达式:“ 段寄存器:[基址寄存器+变址寄存器+位移量]

      ④ 无比例因子且有访问约定逻辑段的地址表达式:“ [基址寄存器+变址寄存器+位移量] ”

      ● 基址加变址寻址的要求:基址寄存器和变址寄存器必须都是 16 位或都是 32 位,否则(16位寻址和32位寻址混合使用)是非法指令。

      ● 默认的段寄存器不一致,这样的组合虽然是合法,但容易出错。如:[BP+SI],[BP+DI]
      ● BP 约定的逻辑段为堆栈段,而 SI、DI 约定的逻辑段为数据段,它们组合之后约定访问的逻辑段是堆栈段,但这样的组合最好要加段前缀。

      例: M O V A L ,   [ B X + S I + 0250 H ] MOV\quad AL,\,[BX+SI+0250H] MOVAL,[BX+SI+0250H]



    三、标志寄存器(这一节也很重要)

    在这里插入图片描述
      ● 80486 标志寄存器为 32 位,实际只使用 15 位。
      ● 15 位标志分为两类:状态标志和控制标志。
      ● 状态标志记录了当前指令执行后的状态信息。
      ● 控制标志用来控制微处理器操作,本节首先介绍 6 种状态标志。

      ① C 标志——进位/借位标志
        字节的加/减:最高位(D7)产生进位/借位时 C 标志置1,否则置0
        的加/减:最高位(D15)产生进位/借位时 C 标志置1,否则置0
        双字的加/减:最高位(D31)产生进位/借位时 C 标志置1,否则置0

      ② A 标志——辅助进位/辅助借位标志
        字节、字、双字的加/减,D3 位产生进位/借位时 A 标志置1,否则置0

      ③ S 标志——符号标志
        字节运算后,若结果的最高位 D7 位为1,S标志置1,否则置0
        运算后,若结果的最高位 D15 位为1,S标志置1,否则置0
        双字运算后,若结果的最高位 D31 位为1,S标志置1,否则置0

      ④ Z 标志——结果标志
        运算结果为全0时,Z标志置1,否则置0

      ⑤ P 标志——奇偶标志(实际上是偶标志)
        运算结果中,最低的 1 个字节中 “1” 的个数为偶数时(没有“1”也是偶数),P标志置1,否则置0

      ⑥ O 标志——溢出标志
        运算结果产生溢出时,则 O 标志置1,否则置0

      ● 关于 “ 溢出的几个概念、CPU如何判断溢出、程序员如何判断溢出(有符号数/无符号数) ” 的相关知识,可详见这篇:
    《计算机基础【原码 补码 反码 移码 BCD码 溢出 进位…】》: https://blog.csdn.net/Wang_Dou_Dou_/article/details/120054864?spm=1001.2014.3001.5501.

      ◆ 举个栗子:执行下列指令后,AL = ?,标志寄存器 A、C、O、P、S、Z 分别为何值?(必考)

         M O V A L ,   0 C 8 H MOV \quad AL,\,0C8H MOVAL,0C8H
         A D D A L ,   0 C 8 H ADD \quad AL,\,0C8H ADDAL,0C8H

    在这里插入图片描述
      最终结果为 AL = 90H。如果 C8H 为无符号数(值 = 200),则有溢出。如果 C8H 为有符号数(值 = -56),则无溢出。 这 6 个标志中,C、O、P、S、Z 可为程序的转移提供测试条件。



    四、参考附录:

    [1] 《微型计算机原理与接口技术(慕课板)》
    清华大学出版社

    [2] 《汇编语言程序设计(第2版)》

    上一篇文章链接: 《【计算机与汇编原理③】——80X86微处理器》.

    下一篇文章链接: 《【计算机和汇编原理⑤】——指令系统(下)【 2万5千字总结 】》.


    PPT制图不易,多多支持 🚀 🚀

    展开全文
  • 4.4 数据的寻址方式4.4.1 指令和数据的寻址方式4.4.2 数据寻址方式说明4.4.3 立即寻址4.4.4 直接寻址 4.4.1 指令和数据的寻址方式 寻址方式:确定本条指令的数据地址或下一条要执行的指令地址的方法。 4.4.2 数据...

    4.4.1 指令和数据的寻址方式

    寻址方式:确定本条指令的数据地址或下一条要执行的指令地址的方法。
    在这里插入图片描述

    4.4.2 数据寻址方式说明

    目的操作数和源操作数均可采用不同的寻址方式;
    两个操作数的类型必须一致。
    AX表示16位寄存器,AH、AL表示其高低字节,可单独使用。

    4.4.3 立即寻址

    操作数就在指令中,紧跟在操作码后面,作为指令一部分存放在内存的代码段中,该操作数为立即数,这种寻址方式称为立即寻址方式。数据通常采用补码的形式存放。常用于给寄存器赋初值(作用);
    在这里插入图片描述
    举例: MOV AX , 34EAH;
    在这里插入图片描述
    注意
    ①立即数可以送到寄存器、一个存储单元(8位)、两个连续的存储单元(16位)中去;
    立即数只能作源操作数,不能作目的操作数;
    ③以A~F打头的数字,前面必须加数字0
    如下指令
    MOV AL,3400H ×,前后格式不匹配
    MOV AX,34H √,等价于 MOV AX,0034H
    MOV 87H,BX ×,立即数不能作为目的操作数
    MOV AX,F98AH ×,应为 MOV AX,0F98AH

    设16位计算机中,存储器宽度为16位,一条指令占据一个机器字。
    已知操作码为6位,目的操作数为寄存器编号,占4位;
    源操作数寻址方式为 立即数寻址 ,以补码整数形式给出,
    则该指令立即数寻址方式的数值范围是多少?
    

    在这里插入图片描述
    操作码占6位,目的操作数据占4位,那么立即数(源操作数)占6位,按补码的形式,第一位为符号位,所以数值范围为 -32~31 。

    立即寻址方式的
    优点:指令已经提供操作数,无需再次访问存储器。提供操作数最快
    缺点
    ①操作数为指令一部分,不能修改,适用于给某一寄存器或存储单元赋初值等操作。
    ②指令中A的位数限制了这类指令所表述的立即数的范围。、

    4.4.4 直接寻址

    存储单元有效地址EA(即:操作数的有效地址)直接由指令给出。
    作用:实现对存储单元的读/写操作。
    特点:
    访问存储器次数较少;
    操作数地址在指令中,灵活性较差。
    操作数A的位数限制了操作数的寻址范围。

    4.4.5 (存储器)间接寻址

    操作数所在内存单元的地址通过存储器间接给出。
    优点:实现简便,对编程带来较大的灵活性,当操作数地址改变时,只需修改间接地址指示器的单元内容,而不必修改指令,原指令的功能照样实现。这给编程带来很大方便。
    多次访问内存,增加了指令的执行时间;占用主存储器单元多。

    4.4.6 寄存器寻址

    操作数包含在寄存器中,寄存器的名称由指令指定。
    常用于寄存器之间传递数据。优势是速度快。注意源操作数的长度必须与目的操作数一致

    4.4.7 寄存器间接寻址

    操作数所在内存单元的地址通过寄存器间接给出。
    作用:有效地址可以存放在寄存器中。

    4.4.8 相对地址

    操作数的有效地址是程序计数器PC的内容与n位位移量
    位移量的概念:在寄存器间接寻址给出的偏移地址上,加上一个相对偏移量。位移量是一个带符号的补码机器数。
    可有效缩短地址的长度 。
    兼具灵活性,只与PC相对位置有关,与绝对地址无关。

    4.4.9 相对基址寻址

    这种寻址方式下,EA是由两部分组成的,基址寄存器BX或BP的内容加上偏移量DISP。

    4.4.10 相对变址寻址

    这种寻址方式下,EA是由两部分组成的,变址寄存器的内容加上偏移量DISP。

    与基址寻址类似。基址寻址,往往变化的是形式地址;变址寻址,往往形式地址不变,变化的是变址寄存器。

    4.4.11 相对基址变址寻址

    这种寻址方式下,EA是由三部分组成的,基址寄存器BX或BP的内容加上变址寄存器的内容,以及位移量的和。

    展开全文
  • 内部区域,寄存器间接寻址 ……............................................................................ 11 交叉区域,寄存器间接寻址 ………….............................................................
  • 1 寄存器:1)数据寄存器:AX,BX,CX,DX2)段寄存器 DS CS SS ES FS GS DS 数据段(BX,SI,DI) CS 代码段(IP) SS 堆栈段(SP) ES,FS,GS 附加段3) 变址(指示)寄存器:SI(源变址寄存器),DI (目标变址寄存器)4) ...
  • 寄存器寻址、一些问题的解释。

    千次阅读 2014-07-23 19:52:47
    1、寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,... (2)存于寄存器内的地址可用来指向内存的某个位置,即寻址; (3)可以用来读
  • 一、段寄存器及使用 1、存储器分段 (1)物理地址相关 内存(逻辑存储器):CPU能通过CPU总线直接寻址访问的存储器 这里的内存不特指计算机安装的内存条,而是指所有能被cpu直接寻址访问的存储器。包括内存...
  • 寄存器寻址

    万次阅读 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又称基址寄存器,唯一作为存储器...
  • 51单片机的直接寻址与间接寻址

    千次阅读 2013-09-17 16:12:00
    以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。能够进行寄存器间接寻址的寄存器有:R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR。寄存器间接寻址的存储空间包括内部数据存储器...
  • 直接寻址、间接寻址、立即寻址

    万次阅读 多人点赞 2018-06-01 11:38:56
    一、前言 直接寻址、间接寻址、立即寻址,只是CPU在通过总线与内存交互时的不同交互方法,而产生的三种概念词!对于这些寻址方式,很多人没有听说过,但是对于学习汇编的同学来说,非常熟悉,很多书中都有提到过这几...
  • 本博文源于《计算机组成原理》通过本文大家可以收获的是: 1. 寄存器间接寻址方法 2. 基址寻址特点 4. 变址寻址特点
  • 对于初学的朋友来说,寄存器寻址的几个常见的方式,理解起来还是比较麻烦的。现在尽量给大家说明白一点。 所谓寻址,就是要找存放某个东西的位置。 以下用日常生活中的情形来打比方,虽然不是很精准,但还是...
  • 立即寻址,直接寻址,间接寻址

    万次阅读 多人点赞 2017-04-10 23:17:40
    间接寻址就只指令中存放的是地址的地址,或者是存放地址的寄存器,最慢。 总共有14个16位寄存器,8个8位寄存器   通用寄存器:  数据寄存器:  AH(8位) AL(8位) AX(16位) ...
  • 第三章 ARM9指令系统1、ARM9寻址方式:寄存器寻址、立即寻址、寄存器移位寻址、寄存器间接寻址、多寄存器寻址、变址寻址、堆栈寻址、块拷贝寻址、相对寻址。2、四种典型堆栈及其含义:满递增、满递减、空递增、空...
  • 七种寻址方式(立即寻址寄存器寻址)

    万次阅读 多人点赞 2016-10-04 10:24:34
    七种寻址方式(立即寻址寄存器寻址) 一、立即寻址方式 操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。 立即数可以是8位、16位或32位,该数值...
  • 间接寻址就只指令中存放的是地址的地址,或者是存放地址的寄存器,最慢。总共有14个16位寄存器,8个8位寄存器通用寄存器: 数据寄存器: AH(8位) AL(8位) AX(16位) (AX和AL又称累加器) BH(8位) BL(8位) BX(16位) (BX又...
  • 众所周知,对于8086汇编语言,有几大寻址方式,不过我觉得这个好墨迹,会用就可以了,为什么命名这么多,这次只说本质,不说命名,至于命名,还是得知道,毕竟是大部分人公认的,不能反抗这点哦,但是你知道,不代表...
  • 满意答案MCS-51单片机有7种寻址方式:立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、位寻址和指令寻址。可以分为两类:操作数寻址和指令寻址。1、立即数寻址的寻址空间和范围是:在程序存储空间,随...
  • 间接寻址就是使用寄存器作为指针,控制该寄存器的值来寻到数组中的元素,如: array byte 10h,20h,30h; 定义数组 mov esi, offset array; 取数组首地址 inc esi; esi指向数组第2个元素(下标为[1]) 上面的esi作为...
  • 一、寄存器寻址 1. 寄存器移位寻址 2. 寄存器扩展寻址 二、存储器寻址 1. 寄存器间接寻址 2. 带立即数偏移量的寄存器间接寻址 3. 后索引寻址(Post-index) 4. 前索引寻址(Pre-...5. 带寄存器偏移量的寄存器间接寻址
  • ARM基础学习-寄存器寻址方式和指令

    千次阅读 2017-04-30 17:13:02
    寻址方式数据都存在存储器中,寻址简单地说就是找到存储数据或指令的地址。存储器有很多存储单元,用于存储数据。arm指令
  • 寻址空间与寻址范围

    万次阅读 多人点赞 2017-04-07 23:39:16
    寻址空间一般指的是CPU对于内存寻址的能力。通俗地说,就是能最多用到多少内存的一个问题,即能够寻址的最大容量。一般用MB和G来表示。 数据在存储器(RAM)中存放是有规律的 ,CPU在运算的时候需要把数据提取出来就...
  • 寄存器与七种寻址方式

    万次阅读 多人点赞 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又称基址寄存器,唯一作为存储器指针使用寄存器)...
  • 七种寻址方式

    万次阅读 多人点赞 2018-08-09 17:36:36
    七种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。其中,后五种寻址方式(即直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,136
精华内容 2,854
关键字:

寄存器间接寻址范围