精华内容
下载资源
问答
  • 本文主要介绍ARM寻址方式中的堆栈寻址,感兴趣的朋友可以看看。
  • 寻找操作数可以通过直接给的方式(立即寻址)和直接给出数所在单元地址的方式(直接寻址),这就够了吗?
  • 自己整理的有关汇编程序中与数据相关的寻址方式的资料
  • 8051寻址方式总结

    2020-08-19 01:13:24
    各种寻址方式及使用场合: 立即寻址:常数 、直接寻址:SFR和内部数据RAM 、寄存器寻址:寄存器区 、寄存器间接寻址:内部数据RAM和外部数据RAM 、变址寻址:程序存储器 、相对寻址:PC 、位寻址:位地址区。
  • 所谓寻址方式就是单片机指令中提供的操作数的形式。也就是寻找操作数或操作数所在地址的方式。在51系列单片机中,存放数据的存储器空间有4种:内部RAM、特殊功能寄存器SFR、外部RAM和程序存储器ROM。
  • 1-立即数寻址的功能.swf 1-立即数寻址的执行.swf 2-寄存器寻址的功能.swf 2-寄存器寻址的执行.swf 3-直接寻址的功能.swf 3-直接寻址的执行.swf 4-寄存器间接寻址的功能.swf 4-寄存器间接寻址的执行.swf 5-...
  • 寻址方式

    2020-08-17 00:26:54
    寻址方式 操作数的存放方式 在写寻址方式之前,先要区分一下各种类型操作数的区别 立即数 作为一条指令的部分,包含在指令中,简单点说就是一个常量 立即数只能作为源操作数,不能作为目的操作数 立即数的...

    寻址方式

    操作数的存放方式

    在写寻址方式之前,先要区分一下各种类型操作数的区别

    1. 立即数
    • 作为一条指令的部分,包含在指令中,简单点说就是一个常量

    • 立即数只能作为源操作数,不能作为目的操作数

    • 立即数的书写方法

      • 不同进制的数值表示
      • 单引号括起来的字符
      • 用+、-、*、/ 以及括号表示的算数表达式
    1. 寄存器操作数
    • 数据存放在CPU的固定的几个寄存器中,像AX、BX等的寄存器 ,然后对寄存器进行后续的操作
      (寄存器的读取速度比内存的读取速度快)
    • 既可以作为源操作数,也可以作为目的操作数
    1. 内存操作数
    • 又叫存储器操作数
    • 将数据存放在内存(就像内存条这样,读取的速度比在CPU内部的寄存器慢),然后对内存中的数据进行操作
    • 既可以作为源操作数,也可以作为目的操作数
    1. I/O端口操作数
    • 数据存放在计算机接口电路的端口中,然后对数据进行后续操作
    • 存放在独立的I/O空间里

    寻址方式

    1. 立即寻址
    • 将立即数送到目标的寄存器中,源操作数(立即数)的寻址方式就是立即寻址

    • 常用于给寄存器或内存操作数赋值

        MOV AL, 10101111B		; AL = AFH
        MOV BX, 1234H			; BX = 1234H
        MOV BL, 'A'			; BL = 41H,为'A'的ASCII码
        MOV AX, 11*12 		; AX = 84H
      
    1. 寄存器寻址
    • 直接在寄存器之间进行对应的操作,或者直接对寄存器进行相应的操作

    • 由于不用读取寄存器,常常可以获得较高的运算速度

        MOV EAX, 12345678H		; EAX = 12345678H,对EAX为寄存器寻址
        ADD CH, CL				; 将CH和CL中的数相加并放到CH中,均为寄存器寻址
        INC SI					; 将SI中的住加1,操作数为寄存器寻址
      
    1. 存贮器操作数寻址
    • 直接寻址

      • 格式1:段寄存器:[偏移地址]

      • 偏移地址直接给出存储单元的偏移地址值

      • 格式2:段寄存器:变量名

      • 其中变量名为内存字变量

         ADD	AL, DS:[45H]		; 对源操作数是直接寻址
         MOV	AX, ES:[1000H]		; 对附加段的数据进行直接寻址
         MOV	AX, DS:BUF			; 对数据段中BUF单元的内容进行直接寻址
         MOV	AX, BUF				; 省略段寄存器名称
         MOV	AX, [BUF]			; 与上面一条等价
        

      注意:直接寻址与立即寻址的区别,直接寻址的偏移地址要放在[…]中,或者用内存变量名来表示

    MOV	AX, 1234H		MOV AX,[1234H]	;前者是立即寻址,后者是直接寻址
    
    • 间接寻址
      操作数在内存单元,该单元的段基址在段寄存器中,偏移地址在间址寄存器中,CPU首先要进行地址计算才能获取操作数的地址

      • 格式:段寄存器:[间址寄存器]
      • 间址寄存器用于存放操作数的偏移地址
      • 某单元的物理地址 = 段寄存器地址 x 寻址位数 + 间址寄存器地址
    间址寄存器约定访问的逻辑段寻址位数
    BP堆栈段16
    BX、SI、DI数据段16
    EBP、ESP堆栈段32
    EAX、EBX、ECX、EDX、ESI、EDI数据段32

    注意:当访问约定的逻辑段时,段寄存器的名称可以省略

    MOV	AH, DS:[BX]		; 源操作数的寻址方式为间址寻址
    MOV	AH, [BX]		; 与上式等价,省略了约定访问的逻辑段
    
    • 基址寻址

      • 格式:段寄存器:[基址寄存器+位移量]
      • 物理地址 = 段寄存器地址 x 寻址位数 + 基址寄存器地址 + 位移量

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

    基址寄存器约定访问的逻辑段寻址位数
    BP堆栈段16
    BX数据段16
    EBP、ESP堆栈段32
    EAX、EBX、ECX、EDX、ESI、EDI数据段32

    注意:和间址寻址类似,也可以省略约定访问的逻辑段

    MOV	AH, DS:[BX+3]	;基址寻址去除数据段BX+3单元的操作数送给AH
    MOV	AH, [BX+3]		; 与上面一条等价
    
    • 变址寻址

      • 格式1:带比例因子的变址寻址
      • 段寄存器:[比例因子 * 变址寄存器 + 位移量]
      • 格式2:不带比例因子的变址寻址
      • 段寄存器:[变址寄存器 + 位移量]

          有比例因子变址寄存器和约定访问的逻辑段

    变址寄存器约定访问的逻辑段寻址位数
    EBP堆栈段32
    EAX、EBX、ECX、EDX、ESI、EDI数据段32

          无比例因子变址寄存器和约定访问的逻辑段

    变址寄存器约定访问的逻辑段寻址位数
    SI、DI数据段16

    注意:1.只有一些特别指定的通用寄存器能够作为变址寄存器使用
       2.比例因子只能是1、2、4、8中的一个
       3.无比例因子的变址寻址只能使用SI或DI作为变址寻址寄存器

    MOV	AH, DS:[4*EBX+3]	;变址寻址取出数据段4*EBX+3单元中的操作数放入AH
    MOV	AH, [4*EBX+3]		; 省略约定访问的逻辑段
    MOV	AH, SS:[SI+3]		; 变址寻址取出堆栈段SI+3单元中的操作数送入AH
    
    • 基址加变址寻址

      • 格式1:有比例因子的基址加变址寻址
      • 段寄存器:[基址寄存器+比例因子*变址寄存器 + 位移量]
      • 格式2:无比例因子的基址加变址寻址
      • 段寄存器:[基址寄存器+变址寄存器+位移量]
      • 物理地址 = 基址寄存器 * 寻址位数+比例因子*变址寄存器地址+位移量

    小结

    • 寻址方式针对指令中大的操作数,而不是针对指令本身,因为指令可以包含多个操作数,不同的操作数有不同的寻址方式
    • 操作数(即数据本身)在指令中时是立即寻址方式
    • 操作数在寄存器中时是寄存器寻址方式
    • 操作数在存储器单元中时时存储器操作数寻址方式
    展开全文
  • 指令给出参与运算的数据方式称为寻址方式。换句话说,寻址方式就是寻找确定参与操作的数的真正地址。
  • 随堂练习题目 9指出下列无条件转移指令的转移目标地址是什么存放在何处 1JMP? ? BX 2JMP? ? WORD PTR [BX] 3JMP? ? DWORD PTR [BX] 4JMP? ? P 5JMP? ?... R 1设BX=2000HSI=3000H指令MOV AX[BX+SI+8]的源操作有效地址为 ...
  • 微机原理-汇编语言不同寻址方式运用-实验报告,有代码,有注释,完全看得懂的那种
  • 西 安 邮 电 大 学 计算机学院 课内实验报告 实验名称 寻址方式与基本指令实验 专业名称 通信与信息工程 班 级 通工 1205 学生姓名 付彤 学号 8 位 03121124 指导教师 宁 晓 菊 实验日期 2014 年 11 月 ....
  • 西安邮电大学 计算机学院 课内实验报告 实验名称 寻址方式与基本指令实验 专业名^|5; 班 壑 学生姓 学号8位: 指导教 实验日 实验目的及实验环境 1熟悉80X86寻址方式及基本指令功能进一步理解和巩固课堂学习内容 2 ...
  • 实验 6 寻址方式和指令系统 一. 实验目的 1. 了解 MSP430G2xxx 汇编格式指令和常用寻址方式 2. 了解 C 语言函数调用过程 3. 通过反汇编程序代码掌握研究计算机底层问题的方法 4. 掌握计算机中数的表示和编码 二. ...
  • 单片机的品种很多,设计时怎样表示操作码和操作数,都有各自的规定,再有指令代码也各不相同,因此,必须对所选单片机的全部指令,也就是所谓“指令系统”,有足够的了解。各个系列的单片机虽然有不同的指令系统,但...
  • 寻址方式指令系统和汇编伪操作 姓名:邓陟 学号:2009011976 实验班号:13 机器号:A65(A13 一 实验目的 1. 学习 MSP430的寻址方式和指令系统 2. 了解计算机取指令执行指令的工作过程 3. 掌握 DEBUG 下的运行命令调试...
  • 通过反汇编一个简单的C程序,分析汇编代码,理解计算机是...掌握一些寻址方式,(例如:立即数寻址、直接寻址、寄存器寻址、间接寻址、变址寻址等寻址方式)和指令(例如:call、ret、pushl、popl、enter、leave等)
  • 8086CPU寻址方式详解

    千次阅读 2021-09-21 21:33:47
    寻址方式 定义 寻址方式:求操作数所在地或者所在存储器地址单元的方式。 指令中的操作数,大多数都在存储器单元当中,也可以在寄存器里面,也可以是在指令中立即给出的常数。我们把求得它们的方式称为寻址方式。 ...

    寻址方式

    定义

    寻址方式:求操作数所在地或者所在存储器地址单元的方式。

    指令中的操作数,大多数都在存储器单元当中,也可以在寄存器里面,也可以是在指令中立即给出的常数。我们把求得它们的方式称为寻址方式。

    类型

    寻址方式按求得的操作数的目的不同,可以分为两类:

    1. 数据用
    2. 程序要实现转移的地址用

    如果要实现段内转移,就需要求得段内偏移地址给IP用,如果要实现段间转移,除了偏移地址外,还需要求得目的地的段地址给CS用。要计算的数据的所在存储地址怎么得到,或者转移的地址内容的所在存储地址怎么得到,就需要用以一种寻址方式去求得。

    本文讨论的是“关于数据”的寻址方式,共有9种:

    1. 立即数寻址
    2. 直接寻址
    3. 寄存器寻址
    4. 寄存器间接寻址
    5. 寄存器相对寻址
    6. 基址变址寻址
    7. 基址变址相对寻址
    8. 隐含寻址
    9. I/O端口寻址

    1. 立即数寻址

    立即数寻址意思是要寻找的操作数在指令中直接给出,如:

    mov AX,4C00H
    

    其中AX是目的操作数,4C00H是源操作数,对于源操作数而言,采用的就是立即数寻址。

    2. 直接寻址

    直接寻址就是在指令中直接写出存储单元的有效地址,如:

    mov AL,[1000H]
    

    指令执行后将存储器单元地址为1000H的字节内容送给AL,但这种方法不常用,一般都将地址符号化——利用变量名。
    例如,在DS段有下列变量定义:

    dat1 DW 1234H
    dat2 DW 5678H
    dat3 DW 9ABCH
    ...
    

    如果我们在CS段执行语句:

    mov AX dat1
    

    其中dat1代表的就是一个地址,是1234H这一数据的首地址,所以源操作数的寻址方式是直接寻址,语句执行完后(AX)=1234H。

    3.寄存器寻址

    寄存器寻址是指要寻找的操作数存放在某寄存器当中,如:

    mov BX,AX
    

    对于源操作数而言,要操作的数据在AX寄存器中,这就是寄存器寻址。同样,对于目的操作数而言,其寻址方式也是寄存器寻址。

    要注意以下问题:
    当源和目的操作数都采用寄存器寻址时,一定要注意类型要一致。
    如:

    mov BX,AL
    

    其中BX是16位的,而AL是8位的,类型不一致,很显然语法错误。

    借此,我们可以给出一幅图来搞清楚mov指令数据传送的正确路径:
    在这里插入图片描述

    4.寄存器间接寻址

    寄存器间接寻址是指操作数在存储器中,操作数的段内偏移地址由寄存器给出,由于不是在指令中直接给出操作数的地址/偏移地址,所以称该寻址方式为寄存器间接寻址。

    能做寄存器间接寻址的寄存器只有3个——BX,SI,DI(也就是说,BP并不能作寄存器间接寻址用)。对于BX,SI,DI三个寄存器而言,它们默认的段地址存放在DS数据段。

    现在我们定义两个字型数据dat1和dat2:

    dat1 DW 1234H
    dat2 DW 5678H
    

    如果我们想把dat2数据送给AX,利用寄存器间接寻址方式如下:

    mov BX,OFFSET dat2
    mov AX,[BX]
    

    OFFSET dat2把dat2的偏移地址属性拿出来了,所以“mov BX, OFFSET dat2”这条指令而言,其源操作数的寻址方式是立即数寻址。而[BX]的[ ]里面是把BX的内容作为DS段的段内偏移地址,因此属于寄存器间接寻址。

    5.寄存器相对寻址

    寄存器相对寻址指的是操作数放在存储器单元当中,而该单元的段内偏移地址由两部分组成,第一部分由一个基址寄存器给出——BX,BP,SI,DI 四者之一。第二部分是一个8位或16位的相对位移量(DISP)。两部分之和就是操作数所在存储单元的段内偏移地址。

    那么该存储单元的段地址是什么呢?

    1. 如果相对位移量是一个常数,那么对应的逻辑段的段地址由寄存器对应的默认段给出。BX、SI、DI默认的段地址在DS段,BP默认在SS段
    2. 如果相对位移量是一个变量(例如dat1),指令执行时会自动取该变量的段内偏移地址(即 offset dat1)作为位移量(DISP),此时逻辑段的段地址由变量所在的段决定。
    3. 当然,我们可以添加段超越前缀,改变寄存器指向的段地址。

    特殊情况说明:

    mov BYTE PTR [BP],AL
    

    这条语句中,源操作数[BP]是寄存器相对寻址,因为BP不能用作间接寻址。所以这条指令,是把AL的内容送给某个存储器单元,这个单元的地址一部分是BP内容,一部分为相对位移量,这里为0,即SS:(BP)+0。

    其他说明:

    mov [BX]+3,AL
    

    该语句的目的操作数是寄存器相对寻址,存储器单元的段内偏移地址为(BP)+3。这种寄存器相对寻址也可写成以下几种形式:

    mov [BX+3],AL
    mov 3+[BX],AL
    ;当偏移量在寄存器左边时,'+'可以省略,即:
    mov 3[BX],A
    

    当位移量是一个变量时。如:

    dat1 DB 12H
    mov dat1[BX],AL
    

    则dat1[BX]代表的数据所在的存储器地址为 DS:OFFSET dat1+(BX)

    BP相对寻址的目的

    添加BP进行相对寻址的目的,是为了在不破坏堆栈指针SP的情况下,将堆栈里面的值读取出来。
    假设我们先入栈了三个数据:

    PUSH AX
    PUSH BX
    PUSH CX
    

    现在我们想将AX内容送给DX,但不能破坏SP指针,how?
    答案是:先把SP内容送给BP,再用寄存器相对寻址找到源操作数。很显然,SP寄存器并不能用作寄存器相对寻址。

    mov BP,SP
    mov DX,[BP]+4
    

    6. 基址变址寻址

    基址变址寻址指的是操作数在存储器单元当中,该单元的段内地址由两部分组成:第一部分在一个基址寄存器当中——BX或BP,第二部分在一个变址寄存器中——SI或DI。两部分之和就是操作数所在存储单元的段内地址。而段地址由基址寄存器默认对应的逻辑段决定。

    例如,我们现在用基址变址寻址方式,将dat3内容送给AX:

    dat1 DW 1234H
    dat2 DW 5678H
    dat3 DW 9ABCH
    mov BX,OFFSET dat1
    mov SI,4
    mov AX,[BX][SI]
    

    7. 基址变址相对寻址

    基址变址相对寻址指的是操作数在存储器某个单元当中,该单元的段内有效地址由三部分组成:第一部分在一个基址寄存器当中——BX或BP;第二部分在一个变址寄存器中——SI或DI;第三部分是一个8位或16位的相对位移量(DISP)。三部分之和就是操作数所在存储单元的段内地址。

    例如,我们现在用基址变址相对寻址方式,将dat2内容送给AX:

    dat1 DW 1234H
    dat2 DW 5678H
    dat3 DW 9ABCH
    mov BX,0
    mov SI,0
    mov AX,dat2[BX][SI]
    

    8. 隐含寻址

    指令中不指明操作数,但已隐含规定。

    9. I/O端口寻址

    ① 直接端口寻址:端口地址由一个8位立即数表示,最多可访问256个端口。

    ② 间接端口寻址:端口地址由DX寄存去提供,最多可访问64K个端口。

    展开全文
  • MIPS寻址方式

    2021-04-17 16:09:17
    在MIPS 32指令集中,不单设寻址方式说明字段 R型指令:由op和funct字段共同隐含说明当前的寻址方式 R型格式: 000000 Rs Rt Rd shamt funct 6bits 5bits 5bits 5bits 5bits 6bits I型和J型指令:由op...

    一.概述

    在MIPS 32指令集中,不单设寻址方式说明字段

    R型指令:由op和funct字段共同隐含说明当前的寻址方式

    R型格式:

    000000RsRtRdshamtfunct
    6bits5bits5bits5bits5bits6bits

    I型和J型指令:由op字段隐含说明当前的寻址方式

    I型格式:

    OPRsRt立即数
    6bits5bits5bits16bits

    J型格式:

    OP立即数
    6bits26bits

    二.寻址方式

    (1) 立即数寻址

    对于I型指令:

    汇编语言: addi s1,s2, 10
    表示:$s1 = $s2 + E(10)

    OPRsRt立即数
    6bits$s2$s116bits

    注意: 需要含有立即数,并且根据地址直接取立即数然后再与Rt寄存器相加。

    (2)寄存器寻址

    对于R型指令:

    汇编语言: add $t0, $s1, s 2 表 示 : s2 表示: s2t0 = $s1 + $s2

    000000RsRtRdshamtfunct
    6bits$s1$s2$t0000006bits

    注意: 直接对寄存器进行操作。典型的例子为R型指令。

    (3) 基址寻址

    对于I型指令:

    Rs 中存放基址寄存器,因为立即数只有16位,所以我们将其带符号拓展为32位,然后与基址相加,就可以得到目标数的地址。

    常见的基址寻址指令有:lw, sw, lh, sh, lb, lbu等

    (4)相对寻址

    对于I型指令:

    将16位的立即数带符号拓展为32位后,将其左移两位(此时它的最低两位就是0),然后与PC寄存器地址相加,所得为目标值的地址

    常见相对寻址指令有:beq,bne

    (5)伪直接寻址(页面寻址)

    对于J型指令:

    对于26位的立即数直接左移两位,此时它为28位,而且它的最低两位为0,这时我们取PC的高四位地址做为目标地址的高四位,其余28位为得到的立即数,这个地址为目标值的地址。

    三.举例

    (1)相对寻址求与PC相加的偏移量

    已知此时I型指令立即数字段为 1110000011100011

    我们先将其拓展为带符号的32位,因为它符号位是1,所以拓展后得到 1111111111111111 1110000011100011

    再将其左移两位得 1111111111111111 1000001110001100

    (2)关于MIPS指令格式的描述

    (1)指令长度固定,都为32位
    (2)操作码字段长度固定,都为6位
    (3)指令中寄存器字段长度固定,都为5位
    (4)立即数字段长度不固定,在I型指令中为16位,在J型指令中为26位。

    (3)MIPS特点

    (1)寻址方式简单
    (2)属于精简指令集计算机RISC
    (3)只有Load/Store指令才访问存储器
    (4)寄存器数量较多

    展开全文
  • 本文主要简单介绍了单片机的寻址方式
  • 微机系统有八种基本的寻址方式 (1)立即数寻址方式 操作数地址/变量内存地址 (2)寄存器寻址方式 寄存器 (3)直接寻址方式 [偏移地址] (4)寄存器间接寻址方式 [基址寄存器/变址寄存器] (5)寄存器相对寻址...

    微机系统有八种基本的寻址方式

    (1)立即数寻址方式                  操作数地址/变量内存地址
     (2)寄存器寻址方式                 寄存器
     (3)直接寻址方式                     [偏移地址]
     (4)寄存器间接寻址方式          [基址寄存器/变址寄存器]
     (5)寄存器相对寻址方式          [基址寄存器/变址寄存器+偏移量值]
     (6)基址加变址寻址方式          [基址寄存器+变址寄存器]
     (7)相对基址加变址寻址方式   [基址寄存器+变址寄存器+偏移量值]
     (8)32位地址的寻址方式         32位基址寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP) + 
                                                        32位变址寄存器(EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)) * 比例因子(1/2/4/8) + 偏移常量

    可参考第三章习题查看具体用法。

    立即数寻址方式

    操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。

    立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。例如:

    MOV AH, 80H   ADD AX, 1234H   MOV ECX, 123456H

    寄存器寻址方式

    指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。

    指令中可以引用的寄存器及其符号名称如下:

     8 位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;
    16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;
    32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。

    寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。

    1、源操作数是寄存器寻址方式

    如:ADD VARD, EAX  ADD VARW, AX   MOV VARB, BH等。

    其中:VARD、VARW和VARB是双字,字和字节类型的内存变量。

    2、目的操作数是寄存器寻址方式

    如:ADD BH, 78h    ADD AX, 1234h   MOV EBX, 12345678H等。

    3、源和目的操作数都是寄存器寻址方式

    如:MOV EAX, EBX   MOV AX, BX     MOV DH, BL等。

    由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。通常情况下,我们提倡在编写汇编语言程序时,应尽可能地使用寄存器寻址方式,但也不要把它绝对化。 

    直接寻址方式

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

    注意:立即寻址方式和直接寻址方式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。

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

    MOV [1000H], AX         ;段寄存器默认为DS

    MOV ES:[1000H], AX   ;指令的目标操作数就是带有段前缀的直接寻址方式,段寄存器默认为ES

    MOV AX, 1234H          MOV AX, [1234H] ;前者是立即寻址,后者是直接寻址 
    MOV AX, VARW          MOV AX, [VARW] ;两者是等效的,均为直接寻址 

    寄存器间接寻址方式

    操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。

    在不使用段超越前缀的情况下,有下列规定:
      (1)若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;
      (2)若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。

    指令示例:
    MOV BX,[DI]

    寄存器相对寻址方式

    操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如下图所示:

    在不使用段超越前缀的情况下,有下列规定:
    (1) 若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;
    (1) 若有效地址用BP来指定,则其缺省的段寄存器为SS。

     指令示例:
    MOV BX, [SI+100H]

    基址加变址寻址方式

    操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如下图所示:

     指令示例:
    MOV BX, [BX+SI]

    相对基址加变址寻址方式

    操作数在存储器中,其有效地址是一个基址寄存器(BXBP)的值、一个变址寄存器(SIDI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如下图所示:

     指令示例:
    MOV AX, [BX+SI+200H]

    32位地址的寻址方式

    在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。

    在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的一个组成部分。

    当用32位地址偏移量进行寻址时,内存地址的偏移量可分为三部分:一个32位基址寄存器,一个可乘1、2、4或8的32位变址寄存器,一个8位/32位的偏移常量,并且这三部分还可进行任意组合,省去其中之一或之二。

    32位基址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP;
    32位变址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)。

    用32位地址偏移量进行寻址的有效地址计算公式归纳如下图所示

    下面列举几个32位地址寻址指令:
    MOV AX,  [123456H]
    MOV EAX, [EBX] 
    MOV EBX, [ECX*2]
    MOV EBX, [EAX+100H] 
    MOV EDX, [EAX*4+200H]
    MOV EBX, [EAX+EDX*2] 
    MOV EBX, [EAX+EDX*2+300H]
    MOV AX,  [ESP] 
     

    由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定。具体规定如下: 

    1、地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器;
         如:[EBX+EBP]中的EBX是基址寄存器,EBP是变址寄存器,而[EBP+EBX]中的EBP是基址寄存器,EBX是变址寄存器;

    2、默认段寄存器的选用取决于基址寄存器;

    3、基址寄存器是EBP或ESP时,默认的段寄存器是SS,否则,默认的段寄存器是DS;

    4、在指令中,如果使用段前缀的方式,那么,显式段寄存器优先。

    下面列举几个32位地址寻址指令及其内存操作数的段寄存器。

    指令的举例访问内存单元所用的段寄存器
    MOV  AX, [123456H];默认段寄存器DS
    MOV  EAX, [EBX+EBP];默认段寄存器DS
    MOV  EBX, [EBP+EBX];默认段寄存器SS
    MOV  EBX, [EAX+100H];默认段寄存器DS
    MOV  EDX, ES:[EAX*4+200H];显式段寄存器ES
    MOV  [ESP+EDX*2], AX ;默认段寄存器SS
    MOV  EBX, GS:[EAX+EDX*2+300H];显式段寄存器GS
    MOV  AX, [ESP] ;默认段寄存器SS
    展开全文
  • 交通信息与控制工程系教案理论教学用 课程名称 微机原理与接口技术 第 8 次 第 4 周 2 学时 上课教室 WM1310 课程类型 专业基础课 授课对象 自动化专业 章节名称 第三章 寻址方式和指令系统3.3 教学目的 和要求 掌握...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,019
精华内容 55,207
关键字:

寻址方式