六、ARM 寻址方式

发布时间:2023-07-11  

寻址方式是针对源操作数来说的

6.1 立即数寻址

  • 源操作数是立即数

  • 立即数:操作码以 # 号开头的数字为立即数

  • 立即数寻址: MOV   R0, #0x300

  • 伪指令:        LDR   R0,=0x12345678

  • 注意:

    • 立即数是 8 位数据存储,用  X 表示(0~255),4 位存移位的次数,用 Y 表示(0~15),立即数 = X 循环右移 2 * Y 个位

    • 立即数 0xf200 是由 0xcf2 间接表示的,即是由 8 位的 F2 循环右移 24 位(2 * 12)得到 X = 0xf2; Y = 0xC

6.2 寄存器寻址

  • MOV R0,R1

  • 源操作数是 寄存器

6.3 寄存器移位寻址

  • 将寄存器寻址的源操作数进行移位

  • MOV R0, R2, LSL, #3

  • 将 R2 左移 3 位后,赋值给 R0

6.4 寄存器间接寻址

  • ARM 中由 L/S 结构,即 load/store

  • LOAD 是将内存的数据载入到寄存器中

  • STROE 是将寄存器中的数据存储到内存中

  • 指令:

    • LDR R0,{R1}      把 {R1} 中的值取出来放入到 R0 中

    • STR R0,{R1}  把 R0 中的值取出来放入到 R1 中

    • {R1} 表示取 R1 存放的地址中的数据,换成 C 语言,即 *R1

1 MOV R1, #0x40000000

2 LDR R0, {R1}

3 STR R0, {R1}

5 //若 R1 中的数据 0x40000000 所代表的数据是 0x55,则 R0 的值为 0x55


6.5 基址变址寻址

  • MOV R0, #44

  • MOV R1, #0x40000008

  • STR R0, [R1, #-4]

  • [R1, #-4] 的意思是将 R1 存储的地址值 - 4

  • #-4 表示偏移量

  • STR R0, [R1, #-4]!

  • ! 表示回写,即 C 语言中的 i--,上一句则先把 R1 的地址值赋值到 R0 中,再将 R0 中的值 - 4

  • 上一句相当于 STR R0,[R1], #-4

6.6 多寄存器寻址

  • STMIA R0!, {R1 - R3, R5}

  • 将 R1 R2 R3 R5 中的值,存放在以 R0 为起使的地址空间中

  • 大括号中的内容表示寄存器中的值,R0 对应的是存储器的地址

  • STM: 操作多个存储器的值

  • 对应的命令是 LDMIA

  • I/D(increase/decrease)   A/B(after/before)

  

 

6.7 堆栈寻址

  • 进行栈的操作,栈的寄存器是 R13,即 SP 寄存器

  • STMFD SP!, {R1-R3}    压栈,寄存器号大的先入栈,与书写顺序没关系

  • LDMFD SP!, {R1-R3}   出栈

  • 组合:  F(FULL)/E(EMPTY)   I/D

    • 一般都写成 FD,因为 ARM 的地址空间是满递减的

    • 满堆栈:堆栈指针指向最后压入的有效数据项

    • 空堆栈:堆栈指针指向下一个待压入数据的空位置

  • MOV SP, #0x40000010

  • STMFD SP!, {R1-R4}

  • 即将 R4 R3 R2 R1 的值存入 0x4000000c 0x40000008 0x40000004 0x40000000

6.8 相对寻址

  • 51 中用的 jmp 和 call 指令

  • 相对寻址就是一个跳转,相对寻址是相对于 PC 而言的,跳转指令:B   BL   BLX   BX

  • B:跳转指令

  • BL:带返回的跳转指令

  • BLX:带返回和状态切换的跳转指令

  • BX:带状态切换的跳转指令


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>