打印

PSoC CPU寻址模式

[复制链接]
789|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ah9b87|  楼主 | 2016-3-24 08:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CPU寻找操作对象位置的过程,称为“寻址”。把
寻找操作对象的方法,称为“寻址模式”。
       ARM Cortex-M3支持下面的寻址模式:
寄存器寻址;
立即寻址;
寄存器移位寻址;
寄存器间接寻址;
基址寻址;
多寄存器寻址;
堆栈寻址;
块复制寻址;
相对寻址。
沙发
ah9b87|  楼主 | 2016-3-24 08:22 | 只看该作者
      操作数由一个直接16位地址域指定。比如指令:
                     MOS R11,#0x000B   
      功能:将值0x000B写入到寄存器R11。

使用特权

评论回复
板凳
engao| | 2016-3-24 08:23 | 只看该作者
某些特定指令用来访问寄存器组中的一个寄存器。由于这些指令不需要地址域,因此这些指令访问效率更高。比如指令:
                          SUB R0,R1,R2
        功能:寄存器R1的内容减去寄存器R2的内容,结果保存到R0。

使用特权

评论回复
地板
engao| | 2016-3-24 08:24 | 只看该作者
寄存器移位寻址是ARM指令集特有的寻址模式。当第二个操作数是移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。比如指令:
                 ANDS R1,R1,R2,LSL R3
        寄存器R2的值左移R3位,然后和寄存器R1的值进行逻辑“与”操作,结果保存在R1寄存器中。

使用特权

评论回复
5
zheng522| | 2016-3-24 08:32 | 只看该作者
指令指定一个寄存器,该寄存器包含操作数的地址。比如指令:
                            LDR R8,[R10]
        功能:将R10所指向地址的内容加载到寄存器R8内。

使用特权

评论回复
6
bboo| | 2016-3-24 08:36 | 只看该作者
多寄存器寻址一次可以传送几个寄存器的值。比如指令:
              LDMIA R1!,{R2-R7,R12}
        功能:将R1指向的单元中的数据读出道R2~R7、R12寄存器中(R1自动加1)。

使用特权

评论回复
7
bboo| | 2016-3-24 08:36 | 只看该作者
基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。比如指令:
                        LDR R2,[R3,#0x0C]
        功能:读取R3+0x0C所指向的存储器单元的内容,并将其加载到寄存器R2中。

使用特权

评论回复
8
zheng522| | 2016-3-24 13:21 | 只看该作者
栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出” 堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:
向上生长:向高地址方向生长,称为递增堆栈。
向下生长:向低地址方向生长,称为递减堆栈。

使用特权

评论回复
9
zheng522| | 2016-3-24 13:22 | 只看该作者
堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。

使用特权

评论回复
10
zya888| | 2016-3-24 13:24 | 只看该作者
       1)满递增
       堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。比如指令:
                              LDMFA、STMFA等;

使用特权

评论回复
11
zya888| | 2016-3-24 13:25 | 只看该作者
空递增, 堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。比如指令: LDMEA、STMEA等;

使用特权

评论回复
12
heping517| | 2016-3-24 13:26 | 只看该作者
满递减    堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。比如指令:LDMFD、STMFD等;

使用特权

评论回复
13
zya888| | 2016-3-24 13:27 | 只看该作者
空递减,堆栈向下增长,堆栈指针向堆栈下的第一个空位置。比如指令:LDMED、STMED等。

使用特权

评论回复
14
heping517| | 2016-3-24 13:27 | 只看该作者
多寄存器传输指令用于将一块数据从存储器空间的某一个位置复制到存储器空间的另一个位置。比如指令:
                             STMIA R0!,{R1-R7}
       功能:将R1-R7的数据保存到存储器中,存储器指针在保存第一个值后增加,增长的方向为向上增长。

使用特权

评论回复
15
zya888| | 2016-3-24 13:27 | 只看该作者
相对寻址是基址寻址的一种变通。由PC提供基地址,指令中的地址码部分作为偏移量,两者相加后得到的地址即为操作数的有效地址。比如指令:
                                      BL SUBR1
         功能:调用到SUBR1的子程序。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

350

帖子

0

粉丝