精华内容
下载资源
问答
  • 指令寻址方式

    2019-05-19 15:26:17
    3、直接寻址:在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。 4、寄存器间接寻址:操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。在不使用段超越前缀的情况下,如果有效地址在SI、DI和BX...

    1、立即数寻址:操作数就包含在指令中,作为指令的一部分。

    2、寄存器寻址:

    3、直接寻址:在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。

    4、寄存器间接寻址:操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。在不使用段超越前缀的情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器中的内容为段值。如果有效地址在BP中,则以SS段寄存器中的内容为段值。

    5、寄存器相对寻址:操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和。

    6、基址加变址寻址方式:

    7、相对基址加变址寻址方式:

    展开全文
  • 指令寻址方式总结

    2020-04-14 09:33:44
    指令寻址方式总结引言指令编码格式寻址方式指令寻址数据寻址立即(数)寻址直接寻址寄存器直接寻址间接寻址寄存器间接寻址隐含寻址堆栈寻址相对寻址基址寻址变址寻址小结练习 引言 在这里,主要是要说明什么是寻址方式...

    引言

    在这里,主要是要说明什么是寻址方式。以及每一种CPU为什么使用这样的寻址方式。在说明什么是寻址方式之前,首先需要了解指令的构成,或者说指令的编码格式。

    指令编码格式

    一条指令(指的是机器码)由操作码(opcode)和操作数(operand)构成。操作数可以是1个,也可以是多个,甚至可以没有。操作码则是每一条指令都必须有。操作码表示该指令要做什么动作,例如跳转,加减等等。操作数则表示操作对象,操作数可能还会分为目的操作数和源操作数。操作数当然是一个数字,该操作数可以由多种来源,例如寄存器,存储器或者立即数。 本节介绍的处理器的寻址方式就是讨论指令中操作数的来源问题。

    在这里插入图片描述
    每一条指令(指的是机器码)一般对应一条汇编语句(指的是使用汇编语言书写的一条指令),所以我们一般就将指令等同于汇编语言,没怎么关心指令的概念。在学习寻址方式时,更加关注的是指令本身。也有一条汇编语句对应多条指令的情况,在编译时,汇编器会将该汇编语句转化成对应的多条指令。

    寻址方式

    寻址模式是大多数中央处理器 (CPU)设计中的指令集架构的一个方面。 在给定指令集架构中定义的各种寻址模式决定了该架构中的机器语言指令如何识别每个指令的操作数。寻址模式指定如何通过使用寄存器中保存的信息和/或机器指令中包含的常量或其他地方包含的常量来计算操作数的有效存储器地址。 —— 《维基百科》,词条翻译自英文,译者本人
    简单来说寻址方式就是“CPU找数据/指令”的方式。

    指令寻址

    在这里插入图片描述

    数据寻址

    立即(数)寻址

    指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式的特点是指令执行时间很短,因为它不需要访问内存取数,从而节省了访问内存的时间。 [2] 如:MOV AX,#5678H 注意:立即数只能作为源操作数,不能作为目的操作数。
    操作数直接放在指令中,作为指令的一部分存放在代码段中。
    在这里插入图片描述

    直接寻址

    直接寻址是一种基本的寻址方法,其特点是:在指令格式的地址的字段中直接指出操作数在内存的地址。由于操作数的地址直接给出而不需要经过某种变换,所以称这种寻址方式为直接寻址方式。在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址
    操作数在内存中,将操作数的有效地址(EA)直接放在指令中,
    形式:[操作数地址]

    MOV AX,[2345H]       ; 将地址 DS:[0001 2345H] 所指向的数据放入目标寄存器中
    MOV ES:[5678H], BL    ; 源操作数是寄存器寻址,目的寄存器是直接寻址
    
    通常可见到这样的指令形式: MOV AX, num  
    其中,num表示的是高级语言中的变量名,比如C语言中 short num = 12H。则上述指令相当于将 num 的值 12H 放入目标寄存器AX中
    

    在这里插入图片描述

    寄存器直接寻址

    操作数放在寄存器中,寄存器标识作为指令的一部分。CPU从寄存器中获取数据比内存中快的多,所以寄存器寻址是一种非常常见的寻址方式。
    在这里插入图片描述

    间接寻址

    指令地址字段中的形式地址不是操作数的真正地址,而是操作数地址的指示器。
    在这里插入图片描述
    在这里插入图片描述
    注意:多重间接寻址一般不建议使用,会大量耗费CPU资源。

    寄存器间接寻址

    操作数在内存中,将操作数的有效地址(EA)放到寄存器中
    在这里插入图片描述
    在这里插入图片描述

    隐含寻址

    这种类型的指令,不是明显地给出操作数的地址。而是在指令中隐含着操作数的地址。例如,单地址的指令格式,就不明显地在地址字段中指出第2操作数的地址,而是规定累加寄存器AC作为第2操作数地址。指令格式明显指出的仅是第1操作数的地址D。因此,累加寄存器AC对单地址指令格式来说是隐含地址。
    在这里插入图片描述

    堆栈寻址

    堆栈寻址堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 。 堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针) 指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。
    在这里插入图片描述

    相对寻址

    相对寻址是把程序计数器PC的内容加上指令格式中的形式地址D而形成操作数的有效地址。程序计数器的内容就是当前指令的地址。“相对”寻址,就是相对于当前的指令地址而言。采用相对寻址方式的好处是程序员无须用指令的绝对地址编程,因而所编程序可以放在内存的任何地方。 [2] 指令格式:MOV AX,[BX+1200H] 操作数物理地址PA=(DS/SS)*16H+EA EA=(BX/BP/SI/DI)+(6/8)位偏移量Disp 对于BX,SI,DI寄存器来说段寄存器默认为DS,对于BP来说,段寄存器默认为SS
    在这里插入图片描述

    基址寻址

    在基址寻址方式中将CPU中的基址寄存器的内容,加上变址寄存器的内容而形成操作数的有效地址。基址寻址的优点是可以扩大寻址能力,因为与形式地址相比,基址寄存器的位数可以设置得很长,从而可以在较大的存储空间中寻址。
    在这里插入图片描述
    在这里插入图片描述

    变址寻址

    变址寻址方式与基址寻址方式计算有效地址的方法很相似,它把CPU中某个变址寄存器的内容与偏移量D相加来形成操作数有效地址。
    但使用变址寻址方式的目的不在于扩大寻址空间,而在于实现程序块的规律变化。为此,必须使变址寄存器的内容实现有规律的变化(如自增1、自减1、乘比例系数)而不改变指令本身,从而使有效地址按变址寄存器的内容实现有规律的变化。
    在这里插入图片描述
    在这里插入图片描述

    小结

    在这里插入图片描述

    练习

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 汇编指令寻址方式

    2015-01-27 00:27:06
    汇编指令寻址方式

    一条指令的寻址方式决定了这个操作如何利用指令中所携带的数据

    去寻找真正的操作数据。这里,按最直观的理解分做4大类。

    (1)立即寻址:真正的操作数就包含在指令当中。

    MOV EAX,1

    这条指令的写法就是立即寻址,操作数就是1,指令的含义是把1赋给EAX。

    (2)寄存器寻址:操作数据在寄存器内。

    MOV EAX,EBX

    这条指令的写法就是寄存器寻址,操作数放在EBX内,指令的内含义是把EBX

    内的数据赋给EAX。

    (3)直接寻址:操作数的地址被直接写在指令内。

    MOV EAX,[0x1000]

    这条指令的写法就是直接寻址,操作数放在0x1000指向的内存地址内,指令的含义

    是把地址为0x1000的数据赋给EAX。

    (4)间接寻址:操作数的地址需要经过某种运算才能得到,这种运算可能是从

    一个寄存器读取,也可能是把某几个寄存器中的数据相加,等等。

          MOV EAX,【EBX】

         含义是把EBX里的数据作为一个地址,然后从这个地址得到

    数据赋予EAX。

       MOV EAX, 【EBX+4】

       含义是把EBX里的数据作为一个地址,将这个地址加4后得到新地址,从新地址获取

    数据赋给EAX。

      MOV EAX, 【EBX+EDX】

      含义把EBX里的数据与EDX的数据之和作为地址,从这个

    地址获取数据赋给EAX。

      MOV EAX,【EBX+ECX*4+4】

      含义把EBX里的数据与ECX*4的数据之和作为地址,将这个地址加上4后得到新地址,从

    新地址获取数据赋给EAX。

      这里ECX*4并非表示CPU在做寻址操作的时候可以同时做乘法,而只是将ECX扩大了4倍,

    表示这个数组元素都是32位长整数。

    写在[ ] 内的最多只能是3个部分的和,你可以理解为基址、变址和常数偏移。

     



    展开全文
  • 一、数据处理指令寻址方式 1、数据处理指令第二操作数的构成方式 数据处理指令第二操作数operand2的构成有三种格式: 1)立即数方式 每个立即数由一个8位的常数进行32位循环右移偶数位得到,其中循环右移的位数...

    一、数据处理指令寻址方式

    1、数据处理指令第二操作数的构成方式

    数据处理指令第二操作数operand2的构成有三种格式:

    1)立即数方式

    每个立即数由一个8位的常数进行32位循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。即

    <immediate>=immed_8进行32位循环右移(2*rotate_4)位

    规则:当立即数值在0~0xff范围时,令immed_8=immediate,rotate_4=0;在其他情况下,汇编编译器选择使rotate_4数值最小的编码方式。

    2)寄存器方式

    操作数即为寄存器的数值,例如:

    MOV R3, R2                         ; R3=R2

    ADD R0, R1, R2                   ; R0 = R1+R2

    3)寄存器移位方式

    操作数为寄存器的数值做相应的移位而得到。

    在ARM指令中移位操作包括逻辑左移(LSL)、逻辑右移(LSR)、算术左移(ASL)、算术右移(ASR)、循环右移(ROR)和带扩展的循环右移(RRX),这些操作的功能如图3-1所示。

    LSL 逻辑左移:空出的最低有效位用0填充。

    LSR 逻辑右移:空出的最高有效位用0填充。

    ASL 算术左移:同LSL。

    ASR 算术右移:空出的最高有效位用“符号位”填充。

    ROR 循环右移:移出的最低有效位依次填入空出的最高有效位。

    RRX 带扩展的循环右移:将寄存器内容循环右移1位,空位用原来的C标志位填充,移出的最低有效位填入C标志位。备注:C标志位为bit[29]。

    2、具体寻址类型

    数据处理指令寻址方式具体可分为5种类型,分别介绍。

    1)第二操作数为立即数

    汇编语法格式:

    #<immediate>

    立即数以“#”为前缀,16进制数值时以“0x”表示。

    指令编码格式如下:

    cond(bit[31:28]):指令执行的条件码。备注:N、Z、C、V。

    type(bit[27:26]):指令类型码,00代表数据处理指令及杂类Load/Store指令。

    I(bit[25]):第二操作数类型标志码。在数据处理指令里I=1时表示第二操作数是立即数。

    opcode(bit[24:21]):指令操作码。

    S(bit[20]):决定指令的操作结果是否影响CPSR。

    Rn(bit[19:16]):包含第一个操作数的寄存器编码。

    Rd(bit[15:12]):目标寄存器编码。

    operand2(bit[11:0]):指令第二个操作数。

    其中由一个8位的常数immed_8进行32位循环右移rotate_4的2倍位得到的立即数immediate作为数据处理指令的第二操作数。例如:

    MOV R0, #0xFC0           ;R0=0xFC0

    2)第二操作数为寄存器

    汇编语法格式:

    <Rm>

    指令编码格式如下:

    cond(bit[31:28]):指令执行的条件码。备注:N、Z、C、V。

    type(bit[27:26]):指令类型码,00代表数据处理指令及杂类Load/Store指令。

    I(bit[25]):第二操作数类型标志码。在数据处理指令里I=0时表示第二操作数是寄存器

    opcode(bit[24:21]):指令操作码。

    S(bit[20]):决定指令的操作结果是否影响CPSR(当前程序状态寄存器)。

    Rn(bit[19:16]):包含第一个操作数的寄存器编码。

    Rd(bit[15:12]):目标寄存器编码。

    operand2(bit[11:0]):指令第二个操作数。

    例如:

    ADD R0, R1, R2                           ;R0=R1+R2

    3)第二操作数为寄存器移位方式,且移位的位数为一个5位的立即数

    汇编语法格式:

    <Rm>, <shift> #<shift_imm>

    指令编码格式如下:

    cond(bit[31:28]):指令执行的条件码。备注:N、Z、C、V。

    type(bit[27:26]):指令类型码,00代表数据处理指令及杂类Load/Store指令。

    I(bit[25]):第二操作数类型标志码。在数据处理指令里I=0时表示第二操作数是寄存器移位形式

    opcode(bit[24:21]):指令操作码。

    S(bit[20]):决定指令的操作结果是否影响CPSR(当前程序状态寄存器)。

    Rn(bit[19:16]):包含第一个操作数的寄存器编码。

    Rd(bit[15:12]):目标寄存器编码。

    operand2(bit[11:0]):指令第二个操作数。

    其中:

    shift_amount表示移位数量。

    shift表示移位类型编码,bit[5]用H表示,bit[6]用S表示,其描述如表3-3所示。

    指令的操作数<operand2>为寄存器Rm的数值按某种移位方式移动shift_amount位,这里shift_amount范围是0~31,当shift_amount=0时,移位位数为32,则移位数范围为1~32。

    例如:

    MOV R0, R0, LSL #n                  ;R0=R0*(2^n) (n=0~31)                   MOV数据传送指令

    4)第二操作数为寄存器移位方式,且移位数值放在寄存器中

    汇编语法格式:

    <Rm>, <shift> <Rs>

    指令编码格式如下:

    cond(bit[31:28]):指令执行的条件码。备注:N、Z、C、V。

    type(bit[27:26]):指令类型码,00代表数据处理指令及杂类Load/Store指令。

    I(bit[25]):第二操作数类型标志码。在数据处理指令里I=0时表示第二操作数是寄存器移位形式

    opcode(bit[24:21]):指令操作码。

    S(bit[20]):决定指令的操作结果是否影响CPSR(当前程序状态寄存器)。

    Rn(bit[19:16]):包含第一个操作数的寄存器编码。

    Rd(bit[15:12]):目标寄存器编码。

    operand2(bit[11:0]):指令第二个操作数。

    其中:

    寄存器Rs中存放着要移位的数量。

    shift表示移位类型编码,其描述如表3-3所示。

    指令的操作数<operand2>为寄存器Rm的数值进行移位得到。移位的数由Rs的低8位bit[7:0]决定。

    注意事项:

    当R15(PC)用做Rn、Rm、Rd、Rs任一个时,指令会产生不可预知的结果。

    例如:

    ANDS R1, R1, R2, LSL R3   ;R2的值左移R3位,然后和R1相“与”操作,结果放入R1

    5)第二操作数为寄存器进行RRX(带扩展的循环右移)移位得到

    汇编语法格式:

    <Rm>, RRX

    指令编码格式如下:

    cond(bit[31:28]):指令执行的条件码。备注:N、Z、C、V。

    type(bit[27:26]):指令类型码,00代表数据处理指令及杂类Load/Store指令。

    I(bit[25]):第二操作数类型标志码。在数据处理指令里I=0时表示第二操作数是寄存器移位形式

    opcode(bit[24:21]):指令操作码。

    S(bit[20]):决定指令的操作结果是否影响CPSR(当前程序状态寄存器)。

    Rn(bit[19:16]):包含第一个操作数的寄存器编码。

    Rd(bit[15:12]):目标寄存器编码。

    operand2(bit[11:0]):指令第二个操作数。

    指令的操作数<operand2>为寄存器Rm中的数值进行带扩展的循环右移一位,并用CPSR中的C条件标志位填补空出的位,CPSR中的C条件标志位则用移出的位代替。

    展开全文
  • 4.2 内存访问指令寻址 根据内存访问指令的分类,内存访问指令的寻址方式可以分为以下几种。 ① 字及无符号字节的Load/Store指令的寻址方式。 ② 杂类Load/Store指令的寻址方式。 ③ 批量Load/Store指令...
  • ARM指令系统提供了批量Load/Store指令寻址方式,即多寄存器寻址,也就是一次可以传送几个寄存器的值,允许一条指令最多传送16个寄存器。 一、编码格式 批量Load/Store指令汇编语法格式如下: 批量加载: LDM {&...
  • 文章目录数据处理指令寻址方式1. 立即数寻址2. 寄存器寻址3. 寄存器逻辑左移立即数寻址4. 寄存器逻辑左移寄存器寻址5. 寄存器逻辑右移立即数寻址6. 寄存器逻辑右移寄存器寻址7. 寄存器算数右移立即数寻址8. 寄存器...
  • 指令寻址方式中地址的表示方法
  • 4.1 数据处理指令寻址方式 4.1.1 数据处理指令寻址方式概要 数据处理指令的基本语法格式如下。 {} {S} ,, 其中有下面11种形式,如表4.1所示。 表4.1 _operand>的寻址方式   ...
  • 4.2 指令寻址方式

    2019-09-04 20:46:14
    寻址方式分为指令寻址和数据寻址。 指令中的地址码字段并不代表操作数的真实地址,这种地址称为形式地址(A)。形式地址结合寻址方式,可以计算出操作数在存储器中的真实地址,这种地址被称为有效地址(EA). (A...
  • 重温计算机组成原理:指令寻址方式 立即寻址 在指令中直接给出操作数。 直接寻址(Direct Addressing Mode) 在指令中直接给出操作数所在的主存存储单元的地址。 间接寻址(Indirect Addressing Mode) 指令中给出...
  • ARM支持协处理器操作,其操作要通过协处理器命令来实现,下面讨论协处理器指令具体的寻址方式。 一、协处理器加载/存储指令寻址方式 协处理器加载/存储指令可以用来实现ARM处理器与协处理器之间的数据传输。 其...
  • 依次对数组里的元素进行操作。...操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。 立即寻址方式所提供的操作数紧跟在操作码的后面,与操作码一起放在指...
  • 详解 指令寻址方式

    2020-04-24 03:49:05
    1、指令的一般格式: 一条指令通常由两个部分组成: - 第一部分为操作码(指令码)用于指出指令要进行何种操作; - 另一部分是指令操作的对象,称为操作码;...指令的长度主要决定于操作数的个数及其采用的寻址方式
  • 指令中形成操作数或操作数地址的方式称为操作数的寻址方式。一般把指令中直接给出的地址称为形式地址,从形式地址生成有效地址的各种方式称为各种不同的存储器寻址方式,每种寻址方式都有一种对形式地址进行变换处理...
  • ARM指令寻址方式

    2020-03-03 23:35:13
    1、数据处理指令的操作数的寻址方式 立即数方式 MOV R0, #100 ;将100放到R0中 寄存器方式 MOV R0, R1 ;将R1的值放到R0中 ADD R0, R1, R2 ;将R1 + R2的值放到R0中 寄存器移位方式 ASR 算术右移(arithmetic...
  • ARM 汇编指令学习:[1]ARM指令寻址方式

    千次阅读 2017-01-12 14:53:33
    ARM 汇编指令学习:[1]ARM指令寻址方式一、数据处理指令的操作数的寻址方式<opcode>{<cond>}{S} ,,<shifter_operand><shifter_operand>通常具有下面3种格式:1、 立即数方式 #其中,#<immediate>=immed_8循环右移(2*...
  • 组成原理之指令寻址方式和操作数寻址方式图示

    千次阅读 热门讨论 2014-10-26 22:16:24
    指令寻址方式指令如何寻找下一条指令的:分为顺序寻址方式和跳跃寻址方式,其中顺序寻址方式是根据PC给出下一条要执行指令的地址,跳跃寻址方式是从执行指令中获取下一条指令的地址,之后更新PC数据,找到下一条...
  • 计算机中十类指令寻址方式总结

    千次阅读 2019-12-27 01:19:47
    数据寻址有多种,需要在指令中明确指出采用哪一种寻址方式,可以专门设置一个寻址方式特征字段,或纳入地址码中。 形式地址 AAA: 指令字中的地址 有效地址 EAEAEA: 操作数的真实地址 有效地址由形式地址根据寻址...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,671
精华内容 1,068
关键字:

指令寻址方式