精华内容
下载资源
问答
  • 寻址方式(有效地址的计算)

    万次阅读 多人点赞 2019-06-18 15:14:22
    (1)立即寻址有效地址为指令所在地址; (2)直接寻址给出的操作数地址就是操作数的有效地址; (3)寄存器寻址也是一种“直接”寻址; (4)间接寻址意味着给出的地址不是操作数地址而是存放操作数...

    一条指令包括操作码和地址码。

    有效地址:当操作数存放在主存单元中时,若指令中的地址码不能直接用来访问主存,则将这样的地址码称为形式地址,对形式地址进行一定的计算而得到的存放操作数的主存单元的地址。

    (1)立即寻址的有效地址为指令所在地址;
    (2)直接寻址给出的操作数地址就是操作数的有效地址;
    (3)寄存器寻址也是一种“直接”寻址;
     (4)间接寻址意味着给出的地址不是操作数地址而是存放操作数地址的主存单元的地址;由间接单元地址求操作数地址再求操作数;
    (5)寄存器间址及其变型:寄存器地址(R)-操作数地址(M)-操作数;
    (6)变址地址:将形式地址作为基准地址,将变址寄存器内容作为修改量(变址量);
    (7)相对地址
    (8)堆栈地址

    例题:

    例题:基址寄存器的内容是3000H,变址寄存器的内容是02b0H,指令地址为1FH(形式地址),当前正在执行的指令地址为3A00H。
    问:变址寻址方式的有效地址(有效操作数/有效数据)是多少?
        基址寻址的有效地址是多少?
        相对寻址方式的有效地址是多少?
        立即数寻址方式的有效地址是多少?
    
    解:(1)基址地址有效地址 = 基址地址 + 指令地址 = 301FH;
                        3000H
                       +  1FH
                    -------------
                        301FH
        (2)变址地址有效地址 = 02b0H +1FH = 02cFH;
        (3)相对有效地址 = 3A00H +1FH = 3A1FH;
        (4) 立即数有效地址 = 3A00H;

     

    展开全文
  • 前言 ´・ᴗ・` 微机系统的构成 外设 CPU结构 执行单元 BIU 寄存器 存储器组织结构 寻址方式 总结 ´◡`

    前言 ´・ᴗ・`

    • 本节主要以8086为例讲了CPU的一些内置寄存器及其作用 不要求记住 因为只有用到的时候这些名称才更加有意义
    • 笔者在玩嵌入式的时候 比如stm32 涉及深入的硬件debug 就遇到了内部寄存器级别的问题 所以这个也算是对嵌入式的铺垫
    • 本篇内容将会帮助你学习…
      • 0 8086 CPU的基本结构
      • 1 Intel 8086 寄存器种类 作用
      • 2 寄存器之间部分相互联系
      • 3 存储器 内存的CPU寻址方法

    微机系统的构成

    这里我们提纲挈领的明白 接下来我们学习的部分到底是属于哪里
    大部分简单的单片机乃至复杂的PC 其实组成结构都是相近的 可以说都从那个简单的8086进化而来
    意味着我们掌握8086 就可以一通百通
    姑且给简单的计算机(现在就是嵌入式的单片机了)起个名字:微机

    • 微机系统
      • 硬件系统
        • 微机(可以理解为电脑)
          • CPU
          • 存储器 (内存)
          • IO 接口
          • 总线 Bus
        • 外设 perpherial
      • 软件系统
        • 系统软件(OS操作系统自带的)
        • 应用软件 就是我们自己安装的

    接下来的部分 聚焦 CPU以及与存储器的联动

    外设

    外设(perpherial 直译 外围的 相对于CPU当然是外围的) 就是我们CPU控制的外围设备

    简单而言 你用树莓派控制一个LED灯 你可以认为树莓派是CPU, LED灯是外设
    这两者的桥梁就是一个接口(interface)
    我们说任何接口 都是有 沟通的桥梁的意思
    IO设备与CPU的接口就是IO(input output输入输出) 接口

    为啥叫 输入输出接口呢? 因为信息是双向的啊 既有输入也有输出
    比如,
    CPU想通过+5V的信号让灯亮 就是CPU往接口输入+5V的信号 然后LED自然就接受到了这个+5V然后亮起来了咯
    当然 外设除了我们给它供电的(灯 舵机)
    也有反馈信息的 比如传感器(sensor)
    这个时候 在CPU的角度上看 接口是输出信息的(来源于传感器)
    所以 接口可以发送或者接收信息 所谓输入 输出接口
    (当然 设置这个接口的功能是输入还是输出 是推挽输出还是端口复用 都是我们编程序控制的)

    所以CPU和外设的关系可以简单地看成这样:
    在这里插入图片描述
    接口有很多种 为了适用于 或者说驱动(drive)不同的外设 这里大致看看了解就好
    在这里插入图片描述

    CPU

    物理意义上 就是分为内部与外部

    • 外部:
      存储器就是我们熟知的内存
      CPU只负责计算 当然还有少量的寄存器存储计算结果的 但是容量很少
      在这里插入图片描述
      前面讲了IO端口(就是IO接口 一个意思)那么这玩意在哪里呢?属于CPU 这是肯定的
      就在主板上:)一堆集成电路里面 是和CPU配套的电路 但不属于CPU:)
      再问个简单的问题:为啥内存能够和CPU直接连接 为啥硬盘不行?
      CPU频率动不动几个GHZ 内存也是如此,但是硬盘?喵喵喵?慢的一批啊
      所以只有内存跟得上CPU的speed 还有显存(可能比内存还快) 同理。
      • 地址总线address bus
        我们CPU访问IO端口或者访问存储单元(在内存里面的),需要通过地址来找到他们的位置 这时需要地址总线 传地址(地址码)。这是单向的
      • 数据总线data bus
        顾名思义 就是传数据 但是请注意 程序也是数据 指令也是数据 单纯的0001H也是数据
      • 控制总线control bus
        管理上面两个总线的 一般是传送控制指令 或者外设反馈状态信息 (不用深究)
      • 总线宽度的影响
        地址线宽度影响寻址能力 就是内存可以划分成一个个字节位单位的存储单位 那你需要给每个字节都来个标号 这就是地址 类似每个人家的门牌号
        2 20 B = 1024 ∗ 1024 B = 1 M B 2^{20}B=1024*1024B=1MB 220B=10241024B=1MB 20位的地址就可以对应1024*1024个字节 其他同理
        在这里插入图片描述
        内部:
        在这里插入图片描述
        在这里插入图片描述

    CPU结构 单元化 功能性的视角

    实际上 我们嵌入式等常见的应用(各种调试工具)看待CPU 都是以功能的角度看待其内部结构的
    我们可以理解CPU为大型机房 自然机房里面有很多服务器 类似一个个单元(unity)
    CPU也是如此 由一个个单元组成 其中

    名称英文中文
    EUexecution执行单元
    ALUarithmetic算术单元
    BIUbus interface总线接口单元

    在这里插入图片描述
    我们之前说 接口是CPU与外设的桥梁
    而CPU内部与接口对接的就是BIU 总线接口单元

    注意 我们常常说CPU做了什么 其实具体实现,是靠这一个个单元,他们功能几乎相同,所以我们抽象出一个集合体。就类似 阿里的服务器机房 是响应所有访问阿里服务的请求的主体 具体干活的是服务器 不是机房

    执行单元

    执行单元就是执行我们汇编程序的第一站 类似CPU处理程序的接口

    比方我们做一个加法运算 汇编可能就写

    mov ax, 0EA04H      
    mov bx, 4ae0H     
    
    add ax, bx
    

    在这里插入图片描述
    注意图上那个AH AL 那就是16位寄存器AX的高8位和低八位
    也就是 我们的加数 都在通用寄存器里面存着呢
    那么EU 包含的东西 就是我们汇编程序里面的参数 操作指令等 可谓是与程序最相关的单元

    当然 EU只是执行了 解释程序的功能 也就是把参数放好 指令放好(放到寄存器里面方便BIU的进一步操作)

    BIU

    BIU就是接手EU工作的 它调用EU之前修改的寄存器(EU把程序参数存放好了) 然后具体的去找
    比如 找指令 找立即数
    这个“找”的过程 就是寻址 寻找地址 然后去使用

    之后 把运算结果通过 外部总线(就是这条线与接口相连),再通过接口 最终传到外设上 比如传递高电平 灯就亮了

    有没有注意一个好玩的事情:我们所有寄存器都是16位的 那么 20位的地址 到底怎么出来的呢?地址加法器扮演一个什么角色?

    我们可以利用两个16位的寄存器值相加 得到20位
    当然不是直接相加 可以移位操作一波
    这就是8086寻址的基本套路 后面会细讲

    所谓的“两个“寄存器 一个是 段寄存器(segment register),一个是专用寄存器
    听起来有点奇怪 其实就是 存储器太大了 我们将它分段处理 非常类似我们硬盘的分区
    那么我们找数据就是 先定位分区(我们就用到段寄存器的值),
    定位分区后,内部定位,就需要知道具体是多少字节到多少字节,比如000FF - 字节 00FFF是存放电影的,打比方 ,这就是指针寄存器的值了
    你可以和 在一栋楼里面去找你女朋友为例
    整栋楼是存储器 我们分成10段 也就是10层楼
    具体在几楼 请看段寄存器的值 比方说是5楼
    到了5楼 哪个门牌号呢?
    请看指针寄存器的值 比方说01
    那么 地址就是 501

    后面还会设计到“”的概念 你需要知道 汇编找(定位)数据 都是先定位段 再定位段内的地址
    接下来我们会细讲 具体有哪些 指针寄存器和段寄存器 分别用在哪些场合

    寄存器

    相信前面在BIU EU中看到了不少寄存器了
    我们将寄存器大致分下类:

    • 通用寄存器 general purpose —— 存储任何指令的地址和数据的寄存器
      • AX adder 累加寄存器
      • BX base 基址寄存器
      • CX count 计数寄存器
      • DX data 数据寄存器
    • 专用寄存器 —— 与段寄存器合作 完成寻址
      • 指针寄存器
        • IP instruction point 指令指针寄存器
        • SP stack 堆栈指针寄存器
      • 变址寄存器
        • SI source 源变址寄存器
        • DI destination 目标变址寄存器
    • 段寄存器 segment
      • CS code 代码段寄存器
      • DS data 数据段寄存器
      • ES extra 附加段寄存器
      • SS stack 堆栈段寄存器
    • 标志寄存器 FLAGS 也就是flag
      • 作用
        • 反映指令执行结果(比如做加法 是否进位 是否溢出等)
        • 控制指令形式
      • 构成
        • 状态标志
          • CF carry 进位 标志位
          • OF overflow 溢出 标志位
          • ZF zero 结果是否为零
          • SF sign 符号
          • PF 结果的奇偶性
          • AF auxiliary 辅助进位(不用管)
        • 控制标志
          • DF direction
          • TF trap

    存储器组织结构 寻址方式

    前面稍微提到 是专用寄存器与段寄存器的合作 产生20位地址 才能进行寻址 接下来看表:

    寄存器名称举例地址名称形象描述
    段寄存器CS DS ES SS基地址 段地址女朋友住几楼
    专用寄存器IP SP SI DI偏移地址 有效地址(EA)女朋友家门牌号

    我们用16位的段地址 指示数据在哪一段 总共有16段
    用16位的偏移量 也就是门牌号 指示 数据具体位置相对于每一段的开头 偏移了多少
    比如 门牌号510的偏移量是10,因为 相对于每层楼的开头500,差了10户人家
    偏移量也称为有效地址(EA)
    那么 具体16位的EA 能够对应多少户人家呢?答案是216 B = 64KB
    所以 一段(segment)= 64KB 也就是大概64000户人家

    这里 也把 段地址:有效地址 称为逻辑地址 就是一种键值对
    而真正得到的数据地址 也就是女朋友门牌号 称为物理地址
    一个物理地址可以对应多个逻辑地址 反过来 一个逻辑地址对应一个物理地址
    因为 逻辑地址 通过 加法 得到物理地址 加法组合无穷 结果唯一

    具体操作 我们就会
    段地址*16 + 有效地址 = 物理地址
    乘16是为了 将段地址 左移4位
    在这里插入图片描述
    当然 物理地址还可以继续划分 毕竟要寻址的内容特别复杂 可能是指令 可能只是个数据 我们大致这么分类:

    • 取指令寻址 CS+IP
    • 堆栈寻址
      • SS+SP
      • SS+BP
    • 存储器寻址
      • DS+SI
      • DS+DI

    段寄存器

    我们看一条指令吧

    MOV [0], al;
    

    这个[0]指代的是存储器(对CPU来说是“存储器”,其实就是内存)的地址,这条指令是想让AL寄存器的值传到偏移地址为0H(也就是第一个字节)那边去
    问题来了 我们知道偏移地址 那段地址计算机咋知道的呢
    他会去DS 数据段寄存器里面找

    类似强盗藏宝约定个地方,到时候去老地方分赃一样,我们约定数据(在内存的数据)的段地址 一定放在DS里面 当数据操作指令(读取或者写入内存的数据 比如刚刚写的MOV)执行的时候,就会去DS看看:)

    所以 我们想让AL寄存器的值传到物理地址为1000H:0H这个位置该怎么办呢?

    MOV bx, 1000H;
    MOV ds,bx;
    MOV [0],al;
    

    为啥要用bx这个中介呢?多此一举?

    事实上 段寄存器地位很特殊 你看看 很多指令都需要执行的时候看段寄存器的脸色
    因此 intel设计的规则就是 不能直接把常数放进段寄存器
    你放进通用寄存器就可以

    这里 所谓常数 在汇编的世界叫做立即数

    总结 ´◡`

    这些是我其他学习的部分 希望能帮到你

    • 想学习数据库嘛? 不妨从MySQL入手
      MySQL专栏

    • python这么火 想要深入学习python 玩一下简单的应用嘛?可以看我专栏 还在持续更新中哦:
      python应用

    • 小孩子才做选择 大人全都要!对后端感兴趣吗?收下它吧:)
      手把手带你学后端(服务端)

    • 谢谢大佬支持! 萌新有礼了:)

    展开全文
  • 7种寻址方式,以及有效地址计算方法。

    万次阅读 多人点赞 2020-04-20 11:37:57
    七种寻址方式 操作数是指令或程序的主要处理对象。如果某条指令或某个程序不处理任何操作数,那么,该指令或程序不可能有数据处理功能。在CPU的指令系统中,除NOP(空操作指令)、HLT(停机指令)等少数指令之外,大量的...

    七种寻址方式

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

    在指令中,指定操作数或操作数存放位置的方法称为寻址方式

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

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

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

    助记图:

    在这里插入图片描述

    1 立即寻址方式:

    操作数就包含在指令中。作为指令的一部分,跟在操作码后存放在代码段。
    这种操作数成为立即数。立即数可以是8位的,也可以是16位的。
    例如:

    指令: MOV AX,1234H
      则: AX = 1234H
    
    2 直接寻址方式:

    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。

    3 寄存器寻址方式:

    操作数在CPU内部的寄存器中,指令指定寄存器号。
    对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。
    对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。
    这种寻址方式由于操作数就在寄存器中,不需要访问存储器(比如内存)来取得操作数,因而可以取得较高的运算速度。

    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]

    ————————————————
    版权声明:本文为CSDN博主「bytxl」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/bytxl/article/details/48462987

    展开全文
  • 寻址方式:确定本条指令的数据地址或下一条要执行的指令地址的方法。 4.4.2 数据寻址方式说明 目的操作数和源操作数均可采用不同的寻址方式; 两个操作数的类型必须一致。 AX表示16位寄存器,AH、AL表示其高低字节,...

    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的内容加上变址寄存器的内容,以及位移量的和。

    展开全文
  • 微机原理 寻址方式

    2020-11-08 10:23:32
    有效地址:EA=基址+(变址×比例因子)+位移量EA=基址+(变址×比例因子)+位移量EA=基址+(变址×比例因子)+位移量 物理地址:PA=段址(DS)×16+段内偏移量PA=段址(DS)×16+段内偏移量PA=段址(DS)×16+段内...
  • 内存寻址:逻辑地址到物理地址的转化  在计算机里,内存地址分为虚拟内存地址和物理内存地址。 数据存放在物理内存中,程序运行时使用的是虚拟内存,并通过虚拟内存地址访问数据和代码。 那操作系统是...
  • 寻址方式简单介绍

    2017-10-24 22:53:12
    一条机器指令由两部分组成:操作码和操作数。操作码:表明处理器要执行的是哪种操作,是必不可少的。 操作数:是参与这条指令执行的...寻址方式:寻址有效地址的方法。数据寻址方式 一、数据来自主存储器,存储器寻址
  • 寻址方式就是处理器根据指令中给出的地址信息来寻找有效地址的方式,是确定本条指令的数据地址以及下一条要执行的指令地址的方法。 常用寻址方式 立即寻址 指令中在操作码字段后面的部分不是通常意义上的操作数地址...
  • 指令寻址方式中地址的表示方法
  • 基址寻址与变址寻址的区别

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

    2020-07-09 11:41:07
    寻址方式指令寻址数据寻址 寻址方式 确定 本条指令 的 操作数地址(数据寻址) 下一条 欲执行指令 的 指令地址(指令寻址) 指令寻址 顺序 ( PC ) + 1 ----> PC ...指令中的形式地址即为有效
  • 4.2.1指令寻址和数据寻址

    千次阅读 2016-09-21 17:11:15
    寻址方式是指寻找指令或操作数有效地址的方式,也就是指确定本条指令的数据地址,以及下一条将要执行的指令地址的方式。 寻址方式分为指令寻址和数据寻址两大类。 指令中的地址码字段并不代表操作数的真实地址,...
  • 数据寻址

    2021-04-25 22:11:12
    数据寻址 操作数类型 地址:无符号数 数字:定点数、浮点数、十进制数 字符:ASCII码 逻辑数:逻辑运算 ...注意:数据寻址要做的就是将形式地址转换为有效地址 接下来的讨论都是建立在指令字长=机器字长=存储字长
  • 寻址方式:寻找指令或操作数有效地址的方式,即确定本条指令的数据地址及下一条待执行指令的地址的方法。(分为指令寻址和数据寻址,本文是对后者的总结。) 采用不同寻址方式的目的:可缩短指令字长,扩大寻址空间...
  • 数据与转移地址寻址方式 数据的寻址方式:寻找指令操作所需数据的方法 转移地址寻址方式:寻找转移指令所需程序地址的方法 数据的寻址方式 立即寻址 MOV AX,12A2H;将立即数12A2H传送到累加器AX中 寄存器...
  • 数据是存放在物理内存中的,而程序中使用的是虚拟内存并通过虚拟内存地址来访问数据和代码的,那么操作系统是如何 将虚拟内存地址映射成为实际的物理内存的呢?这是我们这篇文章要详细介绍的问题。 以X86的32位系统...
  • 基址寻址与变址寻址

    万次阅读 多人点赞 2018-01-04 14:06:56
    基址寻址与变址寻址
  • https://www.mallocfree.com/interview/c-8-memory.htm标题:内存寻址:逻辑地址到物理地址转化我们知道,在计算机里,内存分为虚拟内存和物理内存。 数据是存放在物理内存中的,而程序中使用的是虚拟内存并通过虚拟...
  • 寻址模式

    千次阅读 2019-12-08 12:52:24
    立即(数)寻址:指令中的形式地址部分,不是操作数的地址,而是操作数本身。 特点:指令执行阶段CPU不访问主存,而形式地址的位数限制了立即数的范围。 直接寻址:指令中的形式地址部分就是操作数的实际地址。 ...
  • 在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址寻址范围得到了进一步扩大。 在用16位寄存器来访问存储单元时,只能使用基地址寄存器...
  • 立即寻址,直接寻址,间接寻址

    万次阅读 多人点赞 2017-04-10 23:17:40
    间接寻址就只指令中存放的是地址地址,或者是存放地址的寄存器,最慢。 总共有14个16位寄存器,8个8位寄存器   通用寄存器:  数据寄存器:  AH(8位) AL(8位) AX(16位) ...
  • 数据寻址——偏移寻址

    千次阅读 2021-05-15 14:39:47
    文章目录偏移寻址三种偏移地址区别:基址寻址问题:(b)要用几个bit指明寄存器?基址寻址的作用优点注意:变址寻址注意:变址寻址的作用优点注意:补充:基址&变址复合寻址相对寻址相对寻址的作用优点:小结*...
  • 寻址就是指按某种规则形成操作数的有效地址,我把产生操作数有效地址的方式称为寻址方式。CPU执行指令时,根据指令约定的寻址方式获取操作数。有的指令通过操作码隐含约定采用何种寻址方式,有的指令则设置专门的...
  • 寻址寻址方式

    千次阅读 热门讨论 2016-11-05 20:09:28
    寻址方式
  • 1、 指令寻址方式:是指寻找指令或操作数有效地址的方式,也就是确定本条指令的数据地址,以及下一条将要执行的指令地址的方法。寻址分为指令寻址和数据寻址两大类。 指令中的地址码字段并不代表操作数的真实地址,...
  • 32位地址寻址方式

    千次阅读 2016-08-27 10:40:22
    在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址寻址范围得到了进一步扩大。 在用16位寄存器来访问存储单元时,只能使用基地址寄存器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,838
精华内容 23,135
关键字:

寻址的有效地址