精华内容
下载资源
问答
  • 在 80x86 汇编语言中,立即寻址和直接寻址的格式有些相似,区别就在于 [ ] 的有无。看看下面两行:MOV AX, 1000MOV AX, [1000]前一行,是立即寻址,是把 1000 这个数,送到 AX 中去;后一行,是直接...

    在 80x86 汇编语言中,立即寻址和直接寻址的格式有些相似,区别就在于 [ ] 的有无。


    看看下面两行:

    MOV   AX,   1000

    MOV   AX,  [1000]


    前一行,是立即寻址,是把 1000 这个数,送到 AX 中去;

    后一行,是直接寻址,是把存储器中 1000 单元中的数,送到 AX 中,(默认使用 DS 为段寄存器)。


    上面这些说法,在各种《微机原理》、《汇编语言》的教材、参考书中,都是这样介绍的。

    在实践中,使用 DEBUG 软件调试程序时,上述说法也是成立的。

    ----

    但是,(呵呵,就怕出现这个“但是”)


    有位网友发现了问题,在使用编译软件(如 MASM 5.0)时:上面写的两行,效果是相同的,都是立即寻址。


    开始,做而论道并不相信,怎么可能这样呢 ?


    一个没有括号,一个有括号,结果怎么可能相同呢?怎么可能都是立即寻址呢 ?


    在网友的催促下,做而论道进行了实验,结果证明,这位网友说的是正确的。


    实验的结果如下:


    MOV   AX,   1000H     ;是把 1000H 这个数,送到 AX 中去

    MOV   AX,  [1000H]   ;也是把 1000H 这个数,送到 AX 中去


    MOV   [1000H],  AX   ;软件提示:这是错误的指令,立即数不能当做目的地


    结果,真是不可想像。


    ----


    解决方法:网友指出,在括号外边,写上 DS,即加上段超越的标记,才行。


    MOV   AX,   1000H           ;是把 1000H 这个数,送到 AX 中去

    MOV   AX,  DS: [1000H]   ;加上段超越标记,才是把 1000H 单元中的数,送到 AX


    MOV   DS: [1000H],  AX   ;加上段超越的标记,才能把 [1000H] 当成存储单元的地址


    经过实验,确实是这样,加上了段超越的标记,才能被编译软件认定为直接寻址。


    ----


    呵呵,即使有了括号,还必须加上段超越的标记,才是直接寻址,否则就是立即寻址。


    做而论道翻遍了能找到的书,有老的,也有新出版的,都没有这样的说法,


    做而论道认定,这种特殊的要求,是编译软件的 BUG,不是正式的规则,不知道大家以为如何 ?


    如果把这种要求,当成正式的规则,那么,所有的书(做而论道看过的),就都得改写了 !!!




    展开全文
  • 存于寄存器地址可用来指向内存某个位置,即寻址;可以用来读写数据到电脑周边设备。 3、区别寄存器的速度比主存储器速度要快很多,由于寄存器的容量有限,所以将不需要操作数据存放在主存储器中,...

    1、存储器功能:

    存放指令和数据,并能由中央处理器(CPU)直接随机存取。

    2、寄存器功能:

    可将寄存器内的数据执行算术及逻辑运算;存于寄存器内的地址可用来指向内存的某个位置,即寻址;可以用来读写数据到电脑的周边设备

    3、区别:

    • 寄存器的速度比主存储器的速度要快很多,由于寄存器的容量有限,所以将不需要操作的数据存放在主存储器中,主存储器中的数据必须放入寄存器材能够进行操作。
    • 简单地说:寄存器操作数据的地方,存储器存放数据的地方。
    • 寄存器一般是指由基本的RS触发器结构衍生出来的D触发,就是一些与非门构成的结构,一般整合在CPU内,其读写速度跟CPU的运行速度基本匹配,但因为性能优越,所以造价昂贵,一般好的CPU也就只有几MB的2级缓存,1级缓存更小。
    • 存储器在CPU外,一般指硬盘U盘等可以在切断电源后保存资料的设备,容量一般比较大,缺点是读写速度都很慢,普通的机械硬盘读写速度一般是50MB/S左右。内存和寄存器就是为了解决存储器读写速度慢而产生的多级存储机制。
    展开全文
  • ARM的寻址方式

    2018-10-11 01:02:57
    ARM寻址方式好像没有官方定论,网间传闻9种寻址方式分别是: 1、立即寻址;...首先 所谓 “多寄存器寻址 “块拷贝寻址”,看不出有什么区别呀! 我提出以下几种归类方式: 1、立即...

    ARM的寻址方式好像没有官方的定论,网间传闻的9种寻址方式分别是:

    1、立即寻址; 2、寄存器直接寻址; 3、寄存器间接寻址; 4、寄存器偏移寻址; 5、寄存器基址变址寻址; 6、批量(多)寄存器寻址; 7、相对寻址; 8、堆栈寻址; 9、块拷贝寻址。

     

    对于这种方式,我并不赞同。首先 所谓 “多寄存器寻址” 和 “块拷贝寻址”,看不出有什么区别呀!

    我提出以下几种归类方式:

    1、立即数寻址; 

    2、寄存器直接寻址;

        这里的直接寻址有两种情况:

        一是,寄存器R 中的数据可以直接使用;

        另一种情况是,寄存器R 中的数据要经过位移,再使用,也就是“九种寻址方式” 中的 “寄存器偏移寻址”;

    3、寄存器间接寻址;

         这里也分两种:

          一是,直接使用寄存器R 所指地址进行数据的访问;

          另一种情况是,寄存器R 所指地址经过加、减运算得到新的地址后,再访问新地址的数据;也就是 “九种寻址方式” 中的 “寄存器基址变址寻址”。

    4、多寄存器寻址;

         这也是分两种情况:(这里的多寄存器指的是 多个寄存器与内存之间的数据交换,内存到内存的大量数据传输一般是由内存控制器处理或者分成多个寻址动作处理)

         一是,针对堆栈的批量数据操作(使用记号:FA、FD、EA、ED);

         二是,针对非堆栈的一般内存(使用记号:IA、IB、DA、DB);

          但是在实际使用的时候,这种区别已经没有了,统一都使用了一种记号(IA、IB、DA、DB)。

    5、相对寻址;

         这种寻址方式,就是汇编程序中的标号跳转,如:  BL   c   ;c 是main函数的入口地址。

     

    特别说明:

    1、本文更适用于 ARM9 的机器,其他机器能分出什么类,我就不知道了。 

    2、网上的这种分类挺多,但是官方只给了汇编,并没有给出寻址方式的具体分类(或者说我没有找到  #_# !!),兼听则明吧。

    3、ARM9 好像没有 “直接寻址”,如: MOV  R0,[1000]    ;直接从地址 1000 取数据。

    4、如有错误之处,请联系邮箱 L10622@126.com 欢迎一起讨论!

    展开全文
  • 计算机原理--寻址方式立即数寻址寄存器直接寻址寄存器间接寻址存储器直接寻址存储器间接寻址偏移寻址相对寻址基址寻址变址寻址基址寻址和变址寻址的区别堆栈寻址复合寻址 寻址方式的目的是用来找操作数的物理地址。...

    寻址方式的目的是用来找操作数的物理地址。由于指令中地址码的位数有限,因此不建议直接在地址码中存放操作数的物理地址(会导致内存中的很多空间表示不了)
    指令寻址一般是通过程序计数器(PC)去累加寻找指令的地址,对于某些特殊情况而言,跳转指令的地址就需要和操作数寻址一样了。因此我们一般说的寻址是指操作数寻址

    基本寻址方式分为立即数寻址、寄存器直接寻址、寄存器间接寻址、存储器直接寻址、存储器间接寻址、相对寻址(变址寻址)、堆栈寻址等

    立即数寻址

    立即数寻址是一种不需要寻址方式的寻址,其操作数直接在指令中给出(操作数只能是源操作数)
    在这里插入图片描述
    特点:
    1.指令执行时间短,不需要访问内存
    2.操作数的大小受地址字段长度的影响
    立即数寻址只能作为双操作数指令的源操作数

    寄存器直接寻址

    寄存器直接寻址是一种操作数存放在寄存器中的寻址方式,该种方法指令地址字段中存放的是操作数所在的寄存器编号
    在这里插入图片描述

    特点:
    1.无需访问内存,指令执行速度快
    2.地址范围有限(能够使用的通用寄存器不多)
    3.只需要很短的地址字段
    4.使用最多的一种寻址方式

    寄存器间接寻址

    存储器间接寻址是一种操作数存放在存储器中,操作数地址存放在寄存器的寻址方式,该种方法指令地址字段存放的是一个在寄存器中的地址,该地址指向操作数在存储器中的真正地址。至少需要访问一次内存才能取到操作数。
    在这里插入图片描述
    特点:寻址空间大,使用普遍
    比存储器间接寻址少访问一次存储器

    存储器直接寻址

    存储器直接寻址是一种操作数存放在存储器的寻址方式,该种方法指令地址字段中存放的是操作数在存储器中的地址
    在这里插入图片描述

    其寻址空间受指令的地址字段长度的限制

    存储器间接寻址

    存储器间接寻址是一种操作数和操作数地址都存放在存储器中的寻址方式,该种方法指令地址字段中存放的是一个在存储器中的地址,该地址指向操作数在存储器中的真正地址。因此至少需要两次访问内存才能取到操作数。第一次先取到操作数在存储器中的地址,第二次再去该地址取出操作数。
    在这里插入图片描述
    特点:
    需要两次访问内存,指令执行速度较慢
    扩大了可以使用的寻址空间

    偏移寻址

    偏移寻址中需要存放一个地址和一个偏移量。根据存放地址的不同可将偏移寻址划分为相对寻址、基址寻址、变址寻址

    相对寻址

    相对寻址中存放的地址是当前指令处的地址,偏移量表示相对于当前指令的偏移量。用EA=(PC)+A

    基址寻址

    基址寻址中存放的地址是一个基址(在程序执行过程中不变),偏移量表示相对于基址位置的偏移量。用EA=(B)+A

    变址寻址

    变址寻址中存放的地址是一个形式地址(I),偏移量表示相对于形式地址的偏移量。用EA=(I)+A。

    基址寻址和变址寻址的区别

    1.对于一道程序,基址是不变的,而变址寻址中形式地址给出的是一个存储器地址基准,形式地址是可变的
    2.基址寻址中,偏移量位数较短,而变址寻址中偏移量足以表示整个存储空间
    3.基址寻址立足于面向系统给,主要是解决程序逻辑空间于存储器物理空间的无关性,而变址寻址立足于用户
    4.基址寻址方式适合解决动态定位的问题,而变址寻址适合解决循环问题

    堆栈寻址

    堆栈寻址方式的地址是隐含的,在指令中不必给出操作数的地址,因此,指令的长度很短,一般的形式有:
      OPC
      OPC M
      前一种是标准的采用堆栈寻址方式的指令,参加运算所需要的操作数从堆栈顶端弹出,如果需要两个或多个操作数,则依次从堆栈顶端弹出,运算结果压入堆栈顶端。
      后一种堆栈指令在RISC计算机中仅仅用来在栈顶与其他主存储器单元之间交换数据,在CISC计算机中也可以用于运算指令,指令所需要的一个操作数来自于主存储器,其它操作数从栈顶弹出,运算结果压入栈顶。
    在这里插入图片描述

    复合寻址

    在这里插入图片描述

    展开全文
  • DMA框架解析1DMA框架解析2DMA框架解析3源、目标传输模式源传输目标传输在整个 4 GB 区域(地址在 0x0000 0000 0xFFFF FFFF 之间)都可以寻址外设存储器(这个功能是相对牛了)。关于这4GB地址映射方面知识,...
  • jvmdvm的区别

    2018-12-21 19:52:14
    这两种虚拟机不同: 版权问题:jvm:java虚拟机------ sun  dvm:dalvik虚拟机------ Google 区别: ...dvm基于寄存器架构,寄存器是cpu一个组成部分,执行指令操作无需寻址直接执行。  2.执...
  • 寄存器寻址 B.寄存器间接寻址 C.寄存器相对寻址 D.直接寻址 2.用来作为寄存器间接寻址的寄存器有( )。 A.AX B.BX C.BP CX 3.在下列指令中,源操作数使用DS段寄存器进行寄存器相对寻址的有( )。 A....
  • 51单片机中累加器A与ACC的区别

    千次阅读 2020-06-10 20:19:52
    所以在指令中A不能用ACC来替代,而对A特殊功能寄存器直接寻址和累加器某一位寻址要用ACC,而不能写成A。 例如,指令INC A机器码是04H,属于寄存器寻址,写成ACC后则成了INC DIRECT格式,对应机器码为05E0H。...
  • 累加器A与ACC区别

    2019-10-09 03:38:09
    累加器A与ACC区别 ...所以在指令中A不能用ACC来替代,而对A特殊功能寄存器直接寻址和累加器某一位寻址要用ACC,而不能写成A。 例如,指令INCA机器码是04H,属于寄存器寻址,写成ACC后则成...
  • 51单片机开发中小问题

    千次阅读 2009-12-09 22:44:00
    1. 问题:ACC A 有什么区别?例如:ADD A,ACC 问题分析处理:在这里AACC值得都是累加器ACC(E0H),只...于2008年9月28日星期日解决寄存器寻址直接寻址的区别:直接寻址是操作数所在的字节地址(占用一个字节)出
  • 一:armX86的区别arm:对应精简指令集X86:对应复杂指令集arm上的X86上编译过的的东西是不能相互...二:32位64位的区别32位64位是指CPU通用寄存器的位宽。32位的内存可寻址范围为4G,而64位理论支持的最大...
  •  3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址寻址方式  3.9 操作数寻址方式小结  ...
  •  3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址寻址方式  3.9 操作数寻址方式小结  ...
  •  3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址寻址方式  3.9 操作数寻址方式小结  ...
  •  3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址寻址方式  3.9 操作数寻址方式小结  ...
  •  3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址寻址方式  3.9 操作数寻址方式小结  ...
  • Go to Dessembly说出了迷底。对于a++的结果,是有ebp寻址函数栈空间来记录中间结果的,在最后给printf压栈的时候,再从栈中把中间结果取出来;而对于++a的结果,则直接寄存器变量,...这就是a++++a的压栈的区别
  • nasm汇编操作

    2019-10-20 02:13:52
    在nasm中经常看到两种...因此也就引出了nasm汇编中最经常提到各种内存和寄存器操作,由于各种寄存器都只有一个,所以不存在寻址问题,一旦提到寻址,必然是对存储器操作,一般是对内存操作(包括显卡,...
  • 8086编程结构

    2020-07-03 16:11:47
    因为可用20位地址,所以可寻址的地址空间达220字节即1MB。 几乎在推出8086微处理器的同时,为了与当时已有的一整套Intel外围设备接口芯片直接兼容,Intel公司还推出了准16位微处理器8088。8088的内部寄存器、内部...
  • 关于AT&T汇编intel汇编之间的区别: 1、AT&T有更加复杂的对立即数、变量($)和寄存器(%)的写法。而intel直接使用。 2、AT&T源操作数、目的操作数与intel相反。 3、寻址方式AT&T采用段地址:(偏移,基址,...
  • 汇编语言教程

    2015-12-29 14:44:50
     3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址寻址方式  3.9 操作数寻址方式小结  ...
  • 关于AT&T汇编intel汇编之间的区别: 1、AT&T有更加复杂的对立即数、变量($)和寄存器(%)的写法。而intel直接使用。 2、AT&T源操作数、目的操作数与intel相反。 3、寻址方式AT&T采用段地址:(偏移,基址,...
  • 汇编语言学习大全

    2011-10-08 22:56:17
     3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址寻址方式  3.9 操作数寻址方式小结  ...
  •  3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址寻址方式  3.9 操作数寻址方式小结  ...
  •  3.2 寄存器寻址方式  3.3 直接寻址方式  3.4 寄存器间接寻址方式  3.5 寄存器相对寻址方式  3.6 基址加变址寻址方式  3.7 相对基址加变址寻址方式  3.8 32位地址寻址方式  3.9 操作数寻址方式小结  ...

空空如也

空空如也

1 2 3 4 5
收藏数 86
精华内容 34
关键字:

寄存器寻址和直接寻址的区别