精华内容
下载资源
问答
  • 一次间接寻址方式
    2022-07-16 20:28:45

    目录

    1、立即寻址

    2、寄存器间接寻址


    1、立即寻址

    指令中直接给出参与操作的常数,操作码后跟1个或2个字节的操作数(称立即数)。立即数前需加上#。<

    更多相关内容
  • 寄存器间接寻址(register indirect addressing) 操作数在存储器中,其有效地址EA存放在某个寄存器中。寄存器的使用在16位寻址和32位寻址时不一样。 (1)16位寻址 寄存器 有效地址存放在SI, DI, BX, BP中。 如果...
  • 直接寻址、间接寻址、立即寻址

    万次阅读 多人点赞 2018-06-01 11:38:56
    、前言 直接寻址、间接寻址、立即寻址,只是CPU在通过总线与内存交互时的不同交互方法,而产生的三种概念词!对于这些寻址方式,很多人没有听说过,但是对于学习汇编的同学来说,非常熟悉,很多书中都有提到过这几...

    一、前言

        直接寻址、间接寻址、立即寻址,只是CPU在通过总线与内存交互时的不同交互方法,而产生的三种概念词!

    对于这些寻址方式,很多人没有听说过,但是对于学习汇编的同学来说,非常熟悉,很多书中都有提到过这几种寻址方式,但是没有细说,这里来给大家详细介绍一下这三种寻址方式的不同体现在哪里!

    二、直接寻址

        直接寻址即直接给出内存单元的物理地址/虚拟地址直接寻址!

    详细说一下:

    假如有一个内存,且大小是:0x00000000~0xFFFFFFFF

    每个物理地址代表一个内存单元(这里抛开虚拟内存管理机制),那么我想要取得0x00000001地址里的数据,首先CPU需要通过地址总线找到该内存单元,然后通过控制总线确定操作方法,在通过数据总线将其数据送回来,便于处理!

    那么我们要怎样将地址给CPU呢?

    答:

    放到CS段地址寄存器中,CS寄存器负责保存段地址,CPU会根据此段地址,去内存中将指令读取到CS:IP寄存器当中,然后执行!

    假如我想要将0x00000001地址里的数据取出来,放到AX寄存器当中,那么需要在内存中写好指定代码:

    MOVE AX,[DS:0x00000001H]

    MOVE AX,[0x00000001H]

    (AX内存=DS+0x00000001H)

     

    DS是段寄存器,这里无需多说,详细介绍可以看这篇文章:C语言内存模型详细介绍_堆栈介绍

     

    操作系统会自动帮我们把CS:IR寄存器指向我们的代码段,当CPU将指令取到CS:IP寄存器以后,就会通过CU控制单元译码解析指令转换成对应的电平信号,驱动CPU晶体管工作!

    CPU会直接将段地址+0x00000001的物理地址通过北桥,传送给内存芯片,内存芯片会把该地址里的数据取回来传递给CPU,当CPU接受到返回来的数据时,会把该数据写入到AX寄存器,这样一个指令就执行完成了,实际上并不是一个指令,其实CPU要分好几次时钟周期来执行,第一次去将DS寄存器里的段首地址读取出来,第二次加上0x00000001,第三次去内存中取数据,第四次将获取到的数据写入到AX中,即四个个时钟周期来完成一个指令,其中还会用到alu运算单元来进行段地址+偏移地址的运算,所以实际上可能需要多个时钟周期来完成!

    CPU是由晶体管来驱动的,每次开关驱动一次都称为一次时钟周期,时间周长不算,一般用赫兹来表示时钟周期的单位!

    上面的过程仅一步到位非常之快,因为我们直接给出了实际物理地址!

    下面来说说间接寻址

    三、间接寻址

    间接寻址是建立在直接寻址之上的一种概念,地址不是直接寻址那样直接给出,而是通过某个特定的内存单元得出,第一次是得到某个特定内存单元里的地址数据,第二次在将得出的地址进行DS+偏移地址H的运算直接寻址!

    这样说可能有点含糊不清,不过来看一下这段汇编代码,你就应该能明白直接寻址与间接寻址之间的区别了:

    MOV esp,0x00000001
    MOV AX,[esp]

    esp、eax等寄存器均为8086寻址寄存器,用于暂时存放地址的,并且寻址时也是以DS+esp的方式!

    其实esp和eax等e开头的寄存器和AX,BX,CX通用寄存器的作用没有区别,只是CPU设计者,设计出这么多寄存器是为了方便区分,某些寄存器做某些事情,这样更加方便于统一和区分,你也可以使用BX来进行间接寻址,只要你在里面写上[],这个括号在汇编里表示寻址括号,如果你把bx用[]括起来,CPU会把BX里的内容当做地址看待!

    这样的话,CPU要做的工作可就很多了,首先要将0x00000001地址送入到esp里,在将esp里的地址取出来,然后通过DS+esp在去内存中寻址,在取回来放到AX中!

    所以间接寻址说的明白一点,就是通过寄存器得到要寻址的地址,然后在寻址,而非直接给出地址直接寻址!

     

    上面有个疑惑,就是直接寻址的地址是怎么来的?

    答:在内存中取出指令存入到IP寄存器时,这个地址就已经存放进去了,在IP寄存器的低位,直接寻址的地址是存放在指令中的,而不需要二次获取!

     

    其如果使用间接寻址,在8085系列的CPU设计出了R0,R1的寄存器,并且如果间接寻址使用@符号表示

    mov R0,0x00000001
    mov ax,@R0

    用于表示间接寻址,不过这种寻址方式更加少见了,因为自8086系列CPU出现以后,[]指令的出现,更加方便于寻址,并且直观性更强,但是还是可以使用上面这种方法寻址的,因为向前兼容(即新的东西兼容老的东西),只是不同架构的CPU编写方法不同,但意思都是一个样!

     

    三、立即寻址

     

    通过上面的了解,立即寻址就非常简单了,即立即数寻址!

    立即数即指令的一部分,平常我们所看到的编程语言当中:

    int a = 5;

    这样我们在栈中保存了一个数据5,但是它是有空间的,在汇编中对它寻址是这样的:

    比如a在栈中的偏移地址是0x135h

    mov ax,[135h]

    CPU会到135h的内存中根据位宽寻址,将值寻回来以后,放入到ax寄存器当中!

     

    立即数不同,立即数是不占任何空间的,它存在于代码段,是指令的一部分:

     

    mov ax,135H

    ax内容=135

    当这个指令执行完成之后内存被释放掉之后,我们下次想要找到这个内存空间是找不到的!

    立即寻址要快于其它寻址,因为它无需进行寻址!

     

    展开全文
  • 寻址方式:确定本条指令的数据地址或下条要执行的指令地址的方法。 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的内容加上变址寄存器的内容,以及位移量的和。

    展开全文
  • 详解西门子间接寻址doc,详解西门子间接寻址
  • 、概述  1、指令的格式  我们已知,要让计算机做事,就得给计算机以指令,并且我们已知,计算机很“笨”,只能懂得数字,如前面我们写进机器的75H,90H,00H等等,所以指令的第种格式就是机器码格式,也说是...
  • 直接寻址、间接寻址、立即数寻址

    千次阅读 2020-05-25 21:11:17
    对于这些寻址方式,很多人没有听说过,但是对于学习汇编的同学来说,非常熟悉,很多书中都有提到过这几种寻址方式,但是没有细说,这里来给大家详细介绍一下这三种寻址方式的不同体现在哪里! 二、直接寻址 直接...

    一、前言

        直接寻址、间接寻址、立即寻址,只是CPU在通过总线与内存交互时的不同交互方法,而产生的三种概念词!

    对于这些寻址方式,很多人没有听说过,但是对于学习汇编的同学来说,非常熟悉,很多书中都有提到过这几种寻址方式,但是没有细说,这里来给大家详细介绍一下这三种寻址方式的不同体现在哪里!

    二、直接寻址

        直接寻址即直接给出内存单元的物理地址/虚拟地址直接寻址!

    详细说一下:

    假如有一个内存,且大小是:0x00000000~0xFFFFFFFF

    每个物理地址代表一个内存单元(这里抛开虚拟内存管理机制),那么我想要取得0x00000001地址里的数据,首先CPU需要通过地址总线找到该内存单元,然后通过控制总线确定操作方法,在通过数据总线将其数据送回来,便于处理!

    那么我们要怎样将地址给CPU呢?

    答:

    放到CS段地址寄存器中,CS寄存器负责保存段地址,CPU会根据此段地址,去内存中将指令读取到CS:IP寄存器当中,然后执行!

    假如我想要将0x00000001地址里的数据取出来,放到AX寄存器当中,那么需要在内存中写好指定代码:

    MOVE AX,[DS:0x00000001H]

    MOVE AX,[0x00000001H]
    (AX内存=DS+0x00000001H)
    DS是段寄存器

    操作系统会自动帮我们把CS:IR寄存器指向我们的代码段,当CPU将指令取到CS:IP寄存器以后,就会通过CU控制单元译码解析指令转换成对应的电平信号,驱动CPU晶体管工作!

    CPU会直接将段地址+0x00000001的物理地址通过北桥,传送给内存芯片,内存芯片会把该地址里的数据取回来传递给CPU,当CPU接受到返回来的数据时,会把该数据写入到AX寄存器,这样一个指令就执行完成了,实际上并不是一个指令,其实CPU要分好几次时钟周期来执行,第一次去将DS寄存器里的段首地址读取出来,第二次加上0x00000001,第三次去内存中取数据,第四次将获取到的数据写入到AX中,即四个个时钟周期来完成一个指令,其中还会用到alu运算单元来进行段地址+偏移地址的运算,所以实际上可能需要多个时钟周期来完成!

    CPU是由晶体管来驱动的,每次开关驱动一次都称为一次时钟周期,时间周长不算,一般用赫兹来表示时钟周期的单位!

    上面的过程仅一步到位非常之快,因为我们直接给出了实际物理地址!

    下面来说说间接寻址

    三、间接寻址

    间接寻址是建立在直接寻址之上的一种概念,地址不是直接寻址那样直接给出,而是通过某个特定的内存单元得出,第一次是得到某个特定内存单元里的地址数据,第二次在将得出的地址进行DS+偏移地址H的运算直接寻址!

    这样说可能有点含糊不清,不过来看一下这段汇编代码,你就应该能明白直接寻址与间接寻址之间的区别了:

    MOV esp,0x00000001
    MOV AX,[esp]
    esp、eax等寄存器均为8086寻址寄存器,用于暂时存放地址的,并且寻址时也是以DS+esp的方式!

    其实esp和eax等e开头的寄存器和AX,BX,CX通用寄存器的作用没有区别,只是CPU设计者,设计出这么多寄存器是为了方便区分,某些寄存器做某些事情,这样更加方便于统一和区分,你也可以使用BX来进行间接寻址,只要你在里面写上[],这个括号在汇编里表示寻址括号,如果你把bx用[]括起来,CPU会把BX里的内容当做地址看待!

    这样的话,CPU要做的工作可就很多了,首先要将0x00000001地址送入到esp里,在将esp里的地址取出来,然后通过DS+esp在去内存中寻址,在取回来放到AX中!

    所以间接寻址说的明白一点,就是通过寄存器得到要寻址的地址,然后在寻址,而非直接给出地址直接寻址!

    上面有个疑惑,就是直接寻址的地址是怎么来的?

    答:在内存中取出指令存入到IP寄存器时,这个地址就已经存放进去了,在IP寄存器的低位,直接寻址的地址是存放在指令中的,而不需要二次获取!

    其如果使用间接寻址,在8085系列的CPU设计出了R0,R1的寄存器,并且如果间接寻址使用@符号表示

    mov R0,0x00000001
    mov ax,@R0
    用于表示间接寻址,不过这种寻址方式更加少见了,因为自8086系列CPU出现以后,[]指令的出现,更加方便于寻址,并且直观性更强,但是还是可以使用上面这种方法寻址的,因为向前兼容(即新的东西兼容老的东西),只是不同架构的CPU编写方法不同,但意思都是一个样!
    三、立即寻址

    通过上面的了解,立即寻址就非常简单了,即立即数寻址!

    立即数即指令的一部分,平常我们所看到的编程语言当中:

    int a = 5;
    这样我们在栈中保存了一个数据5,但是它是有空间的,在汇编中对它寻址是这样的:

    比如a在栈中的偏移地址是0x135h

    mov ax,[135h]
    CPU会到135h的内存中根据位宽寻址,将值寻回来以后,放入到ax寄存器当中!
    立即数不同,立即数是不占任何空间的,它存在于代码段,是指令的一部分:

    mov ax,135H
    ax内容=135

    当这个指令执行完成之后内存被释放掉之后,我们下次想要找到这个内存空间是找不到的!

    立即寻址要快于其它寻址,因为它无需进行寻址!

    展开全文
  • 详解西门子PLC间接寻址doc,详解西门子PLC间接寻址
  • 寻址方式

    千次阅读 2018-01-04 19:59:51
    寻址方式
  • Siemens Step7 间接寻址说明doc,Siemens Step7 间接寻址说明
  • 关于C2100间接寻址的问题

    千次阅读 2019-08-04 17:06:10
    相机的地址传入传出,一般来说相机地址都是自定义的类型,但绝大多数都是指针的,而mex的函数传的也是地址,也就是说传入传出也只有一次寻址,这个是比较简单的、 在之前的文章中有说明 接下来说说目前的问题 ...
  • 指令寻址方式是指指令或者操作数有效地址的寻找方式,主要分为数据寻址和指令寻址。指令的地址码字段往往并不是操作数的真实地址,而是形式地址,用A表示,(A)即操作数形式地址所指向的存储介质的数值。用形式地址...
  • 计算机组成之选择题

    千次阅读 2021-01-15 21:35:37
    2、假设某条指令的个操作数采用-次间接寻址方式, 指令中给出的地址码为2222H,地址2222H中的内容为4444H,地址4444H中的内容为6666H,地址 66666H中的内容为8888H,则该操作数为( B)。 A、888
  • 西门子S7_400间接寻址

    2012-11-10 19:12:00
    西门子指令表对于很多人来说都感觉有点难,对于大型自动化控制系统而言,指令表所实现的功能远比梯形图强大,而指令表的难点就在于对地址的准确把握,本文档是对step7 300-400间接寻址精讲。
  • 寻址方式小结

    2021-06-09 13:15:22
    指令地址在内存中按顺序排列,这是种按照程序顺序执行的寻址方式。 跳跃寻址 下条指令的地址吗不是有PC(程序计数器)给出而是由本条直接指令给出。用法最多的是JMP指令。当跳转到新指令地址,又会按照新的指令...
  • 【计算机组成原理】寻址方式

    万次阅读 多人点赞 2020-05-11 12:01:14
    寻址方式是指确定本条指令的数据地址以及下条将要执行的指令地址的方法,与硬件结构紧密相关,而且直接影响指令格式和指令功能。分为指令寻址和数据寻址两大类。 二、指令寻址分为顺序寻址和跳跃寻址两种。...
  • 计算机组成原理17-寻址方式

    千次阅读 2021-01-21 22:31:41
    所谓寻址方式是指:确定本条指令的操作数地址,下条要执行指令的指令地址 、指令寻址 指令寻址分为顺序寻址和跳跃寻址两种。 顺序寻址可通过程序计数器PC加1,自动形成下条指令的地址;跳跃寻址则通过...
  • 计组——十种数据寻址方式

    千次阅读 2021-09-29 18:14:14
    地址码的解读方式不同,分为十种 形式地址用A表示 ...此外还有两次间接寻址: 优点: 可扩大寻址范围(有效地址EA的位数大于形式地址A的位数) 便于编制程序(用间接寻址可以方便的完成子程序返回) 缺点:
  • 内存寻址方式:确定访问内存存储单元偏移地址的方式称为寻址方式。 直接寻址:[偏移地址] 寄存器间接寻址:[基址寄存器/变址寄存器] 寄存器相对寻址:[基址寄存器/变址寄存器+偏移量值] 基址变址寻址:[基址...
  • 错误 C2040 “remove”:“stu *(stu *)”与“stu *(stu *)”的间接寻址级别不同 查到了一个很让人震惊的点。 这是原楼主的问题 //用强制类型转换可以解决,但我想知道这是为什么错,第一次见到这错误 #include <...
  • 8086寻址方式

    2022-02-18 16:59:26
    8086寻址方式 寻址方式总共有两大类: 按数据寻址 按地址寻址 1.数据寻址方式 MOV DST,SRC 和数据有关的寻址方式 1.立即寻址: 操作数直接在源操作数中给出 MOV AL,45H 源操作数在指令中给出,立即数只能是源...
  • 直接寻址是根据地址直接去主存中读取该地址的内容,需要访问一次内存,访存空间受限于地址字段的位数。 间接寻址是先访问主存获得操作数的地址,再通过该地址访问主存获得操作数。 寄存器间接寻
  • 存储器寻址方式:( 直接寻址方式,寄存器间接寻址方式,变址和基址寻址方式,基址变址寻址方式) 串操作寻址方式 I/O端口寻址方式8086采用的是变字长指令格式,指令长度为1~6个字节,第个字节包含操作码,第二...
  • 数据寻址方式种类较多可分为:立即寻址,直接寻址,隐含寻址,间接寻址,寄存器寻址,寄存器间接寻址,基址寻址,变址寻址,相对寻址九大类。 二,指令寻址 1,顺序寻址 顺序寻址可通过计数器PC加1,自动形成...
  • 4.2指令的寻址方式 思维导图 指令寻址和数据寻址 指令寻址 顺序寻址 (PC)+1,自动形成下条指令地址 跳跃寻址 转移指令给出 数据寻址 定义:在指令中表示个操作数的地址方式,并用这种方式得到操作...
  • 单片机要如何寻址

    2021-05-24 09:37:07
    当前,单片机种类很多...对于单片机指令的学习,寻址方式的学习是其中的个重点和难点,寻址方式的正确理解不仅对汇编编程至关重要,而且有助于对于单片机内核结构(如RISC和CISC的区别)、存储结构的更深刻理解。但...
  • 十种寻址方式

    万次阅读 多人点赞 2020-11-21 16:18:46
    首先需要知道的是,数据寻址的方式比较多,在指令字中必须设置个字段来表明是哪种寻址方式。并且指令的地址字段通常都不表示操作数的有效地址,我们把它称为形式地址,记作 A ,有效地址记作 EA,由寻址方式和形式...
  • 数据寻址方式(10种)

    万次阅读 多人点赞 2020-06-14 21:44:13
    如单地址的指令格式,就不是明显地在地址字段中指出第二操作数的地址,而是规定累加器ACC作为第二操作数,指令格式明显指出的仅是第操作数的地址。因此,累加器ACC对单地址指令格式来说是隐含地址。 隐含寻址的...

空空如也

空空如也

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

一次间接寻址方式