精华内容
下载资源
问答
  • 计算机只容许使用bx、si、di、bp寄存器做间接和相对寻址 其中bx为基址存储器,si、di为变址存储器   内存寻址方式:确定访问内存存储单元偏移地址的方式称为寻址...相对基址变址寻址:[基址寄存器+变址寄存器+...

    计算机只容许使用bx、si、di、bp寄存器做间接和相对寻址

    其中bx为基址存储器,si、di为变址存储器

     

    内存寻址方式:确定访问内存存储单元偏移地址的方式称为寻址方式。

    直接寻址:[偏移地址]

    寄存器间接寻址:[基址寄存器/变址寄存器]

    寄存器相对寻址:[基址寄存器/变址寄存器+偏移量值]

    基址变址寻址:[基址寄存器+变址寄存器]

    相对基址变址寻址:[基址寄存器+变址寄存器+偏移量值]

    注意:

    a 格式上的注意,正确区分寻址方式

    b 五种寻址中,均可以使用段前缀     //ds:[0001H]

    c masm编译器编译时,代码中的直接寻址必须采用段前缀的形式

     

    指针寄存器包括堆栈寄存器SP(stack pointer)和基数指针寄存器BP(base pointer),变值寄存器包括源变址寄存器SI(source index)和目的变值寄存器DI(destination index)。这4个寄存器都是16位寄存器,这些寄存器在运算过程中也可以用来存放操作数(只能以字为单位),但经常的用途是在段内寻址时提供偏移地址SP,BP一般与段寄存器SS联用,以确定堆栈寄存器中某一单元的地址,SP用以指示栈顶的偏移地址而BP可作为堆栈区中的一个基地址,用以确定在堆栈中的操作数地址。SI,DI一般与段寄存器DS联用,以确定数据段中某一存储单元的地址,SI,DI具有自动增量和自动减量的功能,这一点使在串操作指令中用做变址非常方便,SI作为隐含的源变址DS联用,DI作为隐含的目的变址和ES连用,从而达到在数据段和附加段中寻址的目的。

     

    BX+SI
    BX+DI
    BP+SI
    BP+DI

     

    1. 直接寻址

    偏移地址值直接出现在执行代码中。

    mov 寄存器,[偏移地址]
    mov [偏移地址],寄存器

     

    2. 寄存器间接寻址

    偏移地址通过寄存器取得使用

    mov 寄存器,[寄存器]
    mov [寄存器],寄存器

    实例:

    assume cs:daima
    daima segment
        mov ax,2000H
        mov ds,ax
    
        mov ax,1122H
        mov cx,3344H
    
        mov bx,0000H
        mov [bx],ax    ;将ax值放入ds 2000:0000
    
        mov bx,0002H
        mov [bx],cx    ;将cx值放入ds 2000:0002
    
        mov ax,4c00H
        int 21H
    daima ends
    end

     

    3. 寄存器相对寻址

    偏移地址值通过[寄存器+偏移量值]的形式运算后获得。

    mov 寄存器,[寄存器+偏移量值]
    mov 寄存器,ds:[寄存器+偏移量值]
    mov [寄存器+偏移量值],寄存器
    mov ds:[寄存器+偏移量值],寄存器

    实例1:

    assume cs:code,ds:data
    data segment
    	db 'abc'
    data ends
    
    code segment
    start:
        mov ax,data
        mov ds,ax
    
        mov bx,0000H
        mov ah,[bx+0000H]
    
        mov al,[bx+0001H]
     
        mov ax,4c00H
        int 21H
    code ends
    end start

    实例2: 

    ;交换ds中偏移地址1和4,2和5,3和6的数据
    assume cs:code,ds:data
    data segment
    	db 'abcdef'
    data ends
    
    code segment
    start:
        mov ax,data
        mov ds,ax
    
        mov bx,0000H
    
        mov cx,3
        A:
            mov ah,ds:[bx]
            mov al,ds:[bx+0003H]
            mov [bx+0003H],ah
            mov [bx],al
            inc bx
        loop A
     
        mov ax,4c00H
        int 21H
    code ends
    end start

    实例3: 

    assume cs:code,ds:data
    data segment
    	db 'abc'
        db 0H,0H,0H
    data ends
    
    code segment
    start:
        mov ax,data
        mov ds,ax
    
    	mov si,0000H
    	mov di,0003H
    
        mov cx,3
        A:
            mov ah,[si]
            mov [di],ah
    
            inc si
            inc di
        loop A
    
        mov ax,4c00H
        int 21H
    code ends
    end start

     

    4. 基址变址寻址方式

    偏移地址值通过[基址寄存器+变址存储器]的形式运算后获得。

    格式:

    mov 寄存器,[基址寄存器+变址寄存器]
    mov [基址寄存器+变址寄存器],寄存器

    例如:

    mov ax,[bx+si]
    mov ax.[bx+di]
    ;不可以这样
    mov ax,[si+di]

    实例:

    ;累计相加偏移地址0002H 3次。
    assume cs:code,ds:data
    data segment
    	db 1H,1H,2H
    data ends
    
    code segment
    start:
        mov ax,data
        mov ds,ax
    
        mov ah,00H
    
        mov bx,0000H
        mov si,0002H
    
        mov cx.3
        A:
            mov al,[bx+si]
            add ah,al
    
            inc bx
            dec si
        loop A
     
        mov ax,4c00H
        int 21H
    code ends
    end start

     

    5. 相对基址变址寻址

    偏移地址值通过[基址寄存器+变址寄存器+偏移量值]的形式运算后获得。

    格式:

    mov 寄存器,[基址寄存器+变址寄存器+偏移量值]
    mov [基址寄存器+变址寄存器+偏移量值],寄存器

    实例:

    ;取出1H、3H放入ah、al
    assume cs:code,ds:data
    data segment
    	db 0H,0H,0H,1H,2H,3H
    data ends
    
    code segment
    start:
        mov ax,data
        mov ds,ax
    
        mov bx,0000H
    
        mov si,0001H
        mov ah,[bx+si+0002H]
    
        mov di,0003H
        mov al,[bx+di+0002H]
     
        mov ax,4c00H
        int 21H
    code ends
    end start

     

     

     

     

    展开全文
  • 基址寻址与变址寻址

    万次阅读 多人点赞 2018-01-04 14:06:56
    基址寻址与变址寻址

    2018-1-4

    1.基址寻址
    (1)基址寻址需设有基址寄存器BR,其操作数的有效地址EA等于指令字中的形式地址A(偏移量)与基址寄存器中的地址(基地址)相加。
    EA=A+(BR)
    基址寄存器可以采用隐式或者显式两种。
    隐式就是说我们使用专门的基址寄存器BR,用户不必显式指出该基址寄存器,只需要由指令的寻址特征位反映出基址寻址即可。
    OP+寻址特征+A
    显式是指在一组通用寄存器中,用户需要显式指出哪个寄存器作为我们的基址寄存器,存放基地址。
    (2)基址寻址可以扩大我们的寻址范围,因为基址寄存器的位数可以大于形式地址A的位数。
    (3)基址寻址在多道程序中极为有用。比如在汇编当中,我们有多个段,有时我们不必关心自己的程序位于哪一个位置,我们只需要给出基址寄存器,操作系统或者管理程序就可以根据主存空间状况,为我们指定的基址寄存器赋一个初值。

    2.变址寻址
    (2)变址寻址其有效地址EA等于指令字中的形式地址A与变址寄存器IX中的内容相加。
    EA=A+(IX)
    看上去好像和上面的那个差不多,实际上并非如此,基址寻址中的基址寄存器的内容通常由操作系统或者管理程序决定,在程序执行过程中是不可变的,而指令字中的A是可变的。变址寻址中变址寄存器的值是由用户设定的,在程序执行过程中是可变的,而指令字中的A是不可变的。
    变址寻址特别适合编制循环程序。
    比如我们要求出前100个数组元素的和:
    如果我们用基址寻址的话,我们的偏移量是从指令中的形式地址得来的,那么如果我们要使偏移量不同,我们就要用不同的指令。这样看来我们就要写好多指令哦!但是如果我们用变址寻址的话,那么我们的偏移量是放在变址寄存器中的,那么我们无需改变指令,而只要改变寄存器中的值即可,因为我们的指令中存放的只是寄存器的编号而已,这样我们就大大缩短了我们指令的长度!

    展开全文
  • 基址寻址与变址寻址的区别

    万次阅读 多人点赞 2018-12-21 09:31:01
    基址寻址与变址寻址都类似于相对寻址,它们的有效地址EA = 基址+指令字中形式地址A。 1、基址寻址 计算公式:EA = (BR) + A 有效地址是将CPU中基址寄存器BR的内容加上指令字中形式地址A。BR的内容由操作系统决定...

    说到区别一般来讲都会有共同点。基址寻址与变址寻址都类似于相对寻址,它们的有效地址EA = 基址+指令字中形式地址A。

    1、基址寻址

    计算公式:EA = (BR) + A

    有效地址是将CPU中基址寄存器BR的内容加上指令字中形式地址A。BR的内容由操作系统决定,在程序执行过程中BR的内容不可变,而形式地址是可变的。基址寻址方式适合解决动态定位的问题。在多道程序的环境当中,操作系统根据内存空间的情况赋值给BR,一旦赋值成功就不可更改,直至用户程序结束,使得用户不必关心实际的地址而只需要关心自己的地址空间即可。

    2、变址寻址

    计算公式:EA = (IX) + A

    有效地址是将CPU中变址寄存器IX的内容加上指令字中有效地址A。其指令字的形式地址作为一个基准地址,内容不可变,而CPU中变址寄存器IX在程序执行过程中根据使用情况发生改变。这样的寻址方式非常适合于循环问题,原因在于指令的“基址”(形式地址)保持不变,使得执行循环时,只需要改变IX的内容即可(比如迭代时,不断加4)。假若使用基址寻址的方式,意味着循环过程中不断需要新的“基址”,也就是需要更多的指令字加以控制。而变址寻址只需要一条指令即可完成相关操作,可以大量缩短指令编码的长度,提高指令字的可用性。

    两种寻址方式都是解决特定应用场景的问题,它们本质上是一样的,只是表现形式的不同而已。

    展开全文
  •   在寻址方式里面,基址寻址和变址寻址是比较常用的两种寻址方式。但因为两种太像了,总是搞不清楚。上网查到的描述太过专业看起来特别吃力。写这篇,希望能用一种通俗易懂的方式对二者做个区分。   为什么总...

      在寻址方式里面,基址寻址和变址寻址是比较常用的两种寻址方式。但因为两种太像了,总是搞不清楚。上网查到的描述太过专业看起来特别吃力。写这篇,希望能用一种通俗易懂的方式对二者做个区分。
      为什么总容易搞混呢?其实基址寻址和变址寻址都是相对寻址中的一种。计算模板都可以概括为:A=B+C(A是逻辑地址)。而且寄存器里面对这两种寻址方式都设计了专门的寄存器。基址寻址叫基址寄存器,变址寻址叫变址寄存器。寄存器里面的内容就相当于公式里的B吧。
      一个比较容易混的地方就是,基址寻址中C是变量(可以动的),而变址寻址中B是变量。那为什么要这么设计呢?设计的目的还要从功能上说(它要完成什么样的任务,自然使用什么设计方法)
      基址寻址实现的是程序段之间的转移,比如设置基址为0,我在100那个有个程序,利用基址寻址到100(一顿执行,此处省略~)。我在200又有个程序,再利用基址寻址到200。是不是每次一条指令就可以完成?所以对于基址寻址功能的描述中有一句:实现程序的动态再定位。
      变址寻址适合循环,那是怎么实现的呢?常使用的for循环都知道,每次加1。是一个固定的值。从100开始,下次101,下次102。。。用基址寻址实现可不可以呢?当然可以!按照基址寻址中基址不变的原则,更改后面的偏移量就可以。那相当于100次偏移,要100个不同的指令(后面的偏移量不同)。好麻烦啊!那变址如何实现的呢?变址寻址把100存在式子里的C中,通过改变变址寄存器中的数值,一次加1。指令中放的可都是寄存器的编号,虽然寄存器数值变了,编号还是固定的。这样看下来,整体执行的不就是同一条指令了吗?真方便啊!

      虽然二者很容易混淆,但如果意识到这些,我相信应该可以正确的区分了吧!嘿嘿

    因为作者水平有限,如果错误之处,请在下方评论区指出,谢谢!

    展开全文
  • 本博文将讲解 80X86汇编中的 变址寻址,缘由是笔者对照 《80X86汇编语言程序设计_王元珍.pdf》学习时 遇到的困惑。比例因子 含义是啥 为啥要乘以它? 基本概念 相关概念和图片摘自《80X86汇编语言程序设计_王元珍....
  • 基址寻址和变址寻址的不同

    千次阅读 2020-05-13 15:46:32
    基址寻址作用:1.可扩大寻址范围 2.有利于多道程序 3.基址寄存器内容由操作系统或管理程序确定 变址寻址的特点: 1.可扩大寻址范围 2.IX的内容由用户指定 3.便于处理数组问题
  • 基址寻址与变址寻址的比较基址寻址主要用于为程序或数据分配存储空间,故基址寄存器的内容通常由操作系统或管理程序确定,在程序运行过程中,值是不可变的,而指令字中的地址码是可变的。变址寻址
  • 详细解释基址寻址和变址寻址区别

    千次阅读 多人点赞 2020-06-16 21:49:16
    变址寻址 定义:指令给出一个寄存器号和形式地址,寄存器的内容作为偏移量,形式地址作为基准地址。基准地址加上偏移量得到有效地址。 思考 从两者定义来看,感觉没有多大区别。只是寄存器中存放基准地址还是偏移...
  • 一般地,EEPROM存储器(如93C46/56/66系列)的擦写次数为10万次,超过这一极限时,该单元就无法再使用了。但在实际应用中,可能有些数据要反复改写。这时,可通过变址寻址的方式来突破EEPROM存储器的擦写寿命极限。
  • Linux汇编----变址寻址与间接寻址

    千次阅读 2016-08-14 13:13:59
    经常会把AT&T汇编语法中的变址寻址与寄存器间接寻址搞混。 变址寻址特别适合于访问内存中的一系列连续数据,即数组。表达式格式为 base_address(offset_address,index,size)
  • 相对基址加变址寻址方式与其它寻址方式之间的变形关系 源操作数 指令的变形 源操作数的寻址方式 只有偏移量 MOV AX, [100H] 直接寻址方式 只有一个寄存器 MOV AX, [BX] 或 MOV AX, [SI] 寄存器间接寻址...
  • 这时,可通过变址寻址的方式来突破EEPROM存储器的擦写寿命极限。 我们有一个单字节的数据要保存在E2PROM(93C56)中,可按以下方法来做: 1、将93C56的00H单元定义为地址指针存放单元。 2、将要寻址的单元地址(假设...
  • 汇编基址变址寻址方式的使用

    千次阅读 2019-06-01 15:32:56
    在程序中建立一个二维数组,放入3行6列的单字节数据,然后代码中使用基址变址寻址方式,改变其中第二行第四个数据的值,使其发生变化 代码如下: data segment arr db 1,2,3,4,5,6 db 7,8,9,10,11,12 db 13,14,15...
  • 定义二维数组array,该数组为3行5列,使用相对基址变址寻址方式改变其中第8个元素的值 代码如下: data segment arr db 1,2,3,4,5 db 7,8,9,10,11 db 13,14,15,16,17 ends code segment assume cs:code,ds:data...
  • 关于基址变址寻址技术,利用栈暂存数据 *参考王爽老师的第四版,对P158的汇编代码,进行了个人理解标注。仅供参考,存在错误之处,请大家斧正。 assume cs:codesg,ds:datasg,ss:stacksg // 代码段cs、数据段ds、栈段...
  • 文章目录一:基址寻址(1)基本概念(2)基址寻址的作用二:变址寻址(1)基本概念(2)变址寄存器的作用(3)基址&变址复合寻址三:相对寻址(1)基本概念(2)相对寻址作用 本小节承接上一节:(计算机组成原理...
  • 间接寻址 间接寻址就是使用寄存器作为指针,控制该寄存器的值来寻到数组中的元素,如: array byte 10h,20h,30h; 定义数组 ...变址寻址 通过在原地址上增加一个寄存器、或者在原地址的基础上加上常数等方...
  • 变址寻址,形式地址为变址寄存器名(或编号)和变址偏移值,把变址寄存器中的内容与变址偏移值相加得到操作数的地址,再读一次内存得到操作数; 堆栈寻址,通常形式地址为将写入堆栈的,或接受堆栈读出内容的寄存器...
  • 2、指令寻址与数据寻址指令寻址思维导图顺序寻址跳跃寻址数据寻址直接寻址间接寻址寄存器寻址寄存器间接寻址隐含寻址立即寻址总结偏移寻址基址寻址变址寻址相对寻址堆栈寻址比较 指令寻址 思维导图 顺序寻址 由于...
  • 存储器寻址方式:( 直接寻址方式,寄存器间接寻址方式,变址和基址寻址方式,基址变址寻址方式) 串操作寻址方式 I/O端口寻址方式8086采用的是变字长指令格式,指令长度为1~6个字节,第一个字节包含操作码,第二...
  • 变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下几种...
  • ; multi-segment executable file template. data segment ; add your data here! array1 db "ABCDEF";A,B,C,D,E,F db "GHIJKL";G,H,I,J,K,L db "MNOPQR";M,N,O,P,Q,R ...
  • 基址加变址寻址方式

    千次阅读 2016-08-27 10:37:19
    操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS...
  • 相对基址加变址寻址方式

    千次阅读 2016-08-27 10:38:22
    操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中...
  • 七种寻址方式(基址加变址寻址方式)

    千次阅读 2018-01-22 19:13:08
    操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如公式所示。 在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS...
  • 操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。  在不使用段超越前缀的情况下,规定:如果有效地址中...
  • 参考内容来自:... 该寻址方式的形式为 offset(base, index, scale) 原文中这样描述 Memory references have the following syntax:segment:offset(base, inde...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,754
精华内容 3,501
关键字:

变址寻址