Cortex-M3寻址模式

[复制链接]
984|17
 楼主| zya888 发表于 2016-4-23 22:45 | 显示全部楼层 |阅读模式
一条指令由两部分构成,即:操作码和操作数。操作码最终的操作对象是操作数,这些被操作的对象可以放在CPU的内部寄存器,片内存储器或者片外存储器,也可能是一个常数。所以,CPU必须要按照“预先制定的规则”找到这些被操作的对象。
zb0830 发表于 2016-4-23 23:51 | 显示全部楼层
操作对象包括:立即数、直接位地址、程序地址、直接数地址、间接地址、特殊的汇编器符号。这些操作对象和寻址模式相关
zb0830 发表于 2016-4-23 23:51 | 显示全部楼层
CPU寻找操作对象位置的过程,称为“寻址”。把寻找操作对象的方法,称为“寻址模式”
huihui520 发表于 2016-4-23 23:52 | 显示全部楼层
寄存器寻址;
zb0830 发表于 2016-4-23 23:52 | 显示全部楼层
立即寻址;
huihui520 发表于 2016-4-23 23:52 | 显示全部楼层
寄存器移位寻址;
zb0830 发表于 2016-4-23 23:52 | 显示全部楼层
寄存器间接寻址
huihui520 发表于 2016-4-23 23:53 | 显示全部楼层
基址寻址;
zb0830 发表于 2016-4-23 23:54 | 显示全部楼层
多寄存器寻址;
huihui520 发表于 2016-4-23 23:54 | 显示全部楼层
堆栈寻址;
huihui520 发表于 2016-4-23 23:55 | 显示全部楼层
相对寻址。
zb0830 发表于 2016-4-23 23:55 | 显示全部楼层
块复制寻址;
zb0830 发表于 2016-4-23 23:55 | 显示全部楼层
      操作数由一个直接16位地址域指定。比如指令:
                     MOS R11,#0x000B   
      功能:将值0x000B写入到寄存器R11。
huihui520 发表于 2016-4-23 23:56 | 显示全部楼层
       某些特定指令用来访问寄存器组中的一个寄存器。由于这些指令不需要地址域,因此这些指令访问效率更高。比如指令:
                          SUB R0,R1,R2
        功能:寄存器R1的内容减去寄存器R2的内容,结果保存到R0。
zb0830 发表于 2016-4-23 23:56 | 显示全部楼层
        寄存器移位寻址是ARM指令集特有的寻址模式。当第二个操作数是移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。比如指令:
                 ANDS R1,R1,R2,LSL R3
        寄存器R2的值左移R3位,然后和寄存器R1的值进行逻辑“与”操作,结果保存在R1寄存器中。
huihui520 发表于 2016-4-23 23:56 | 显示全部楼层
指令指定一个寄存器,该寄存器包含操作数的地址。比如指令:
                            LDR R8,[R10]
        功能:将R10所指向地址的内容加载到寄存器R8内。
zb0830 发表于 2016-4-23 23:57 | 显示全部楼层
多寄存器寻址一次可以传送几个寄存器的值。比如指令:
              LDMIA R1!,{R2-R7,R12}
        功能:将R1指向的单元中的数据读出道R2~R7、R12寄存器中(R1自动加1)。
huihui520 发表于 2016-4-23 23:57 | 显示全部楼层
基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。比如指令:
                        LDR R2,[R3,#0x0C]
        功能:读取R3+0x0C所指向的存储器单元的内容,并将其加载到寄存器R2中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

239

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部