当前位置: 首页 > news >正文

ARM 寻址方式(18)

立即寻址: 也叫作立即数寻址。

就是 立即数,本身就包含在了 指令当中。

举例:

ADD R0, R0,#1

其中,#1 , 就是立即数,对于16进制的立即数, 需要在# 后加上 #0x.

寄存器寻址。

就是数据就在 寄存器中。

举例:

ADD,R0,R1,R2 。

寄存器,间接寻址。

就是,利用寄存器中的数值,来去内存中去寻找数据。

举例:

LDR R0, [R1]

基址变址寻址

就是 寄存器中的数值,加上一个数的这种方式。

举例:

相对寻址。

就是,以当前PC指针的地址作为基地址,然后将指令中的地址,作为偏移量,然后两者相加,得到一个新的地址。

疑问: 我不太明白 将指令中的地址作为偏移量这句话中的 偏移量是怎么得来的?

举例:

多寄存器寻址:

就是一条指令可以给多个寄存器 赋值,或者可以从多个寄存器中取出值来。

举例:

LDMIA R0, {R1,R2,R3,R4}

LDM 是指,R0 指向的地址的值, 付给多个寄存器。

首先将 [R 0] 的值 给到R1, 然后将[R0+4] 的值,给到R2, 然后将[R+8] 的值给到R3, 然后将[R0+12] 的值给到R4

IA的意思是指,当R0 做一次赋值之后,要往前移动4个字节。

这就相当于是在出栈。

与LDM对应的指令是 STM , 这个指令就是压栈了。

命令的格式是:

LDM(或STM){条件}{类型} 基址寄存器{!},寄存器列表{∧}

这是类型的分类。

举例:

STMFD  R13! ,{R0,R4-R12,LR}

这条指令的意思是,将寄存器表中的内容,写到R13所指向的内存中,如果加上了! 的换,那么再数据写完之后,还要更新一下R13 的值,相当于,再移动指针。

LDMFD, R13! ,{R0,R4-R12,PC}

这条指令的意思是,将堆栈中的数据,全部赋值到 寄存器组中。并且还要更新R13 所指向的位置。

注意,在寄存器组中,不管你写的顺序是什么,他都会,从新 从低到高排列好在进行赋值。


http://www.mrgr.cn/news/13549.html

相关文章:

  • 《黑神话:悟空》:文化与科技的完美融合
  • 阿里云服务器 篇七:服务器热备份/定时备份
  • Python简介、发展史
  • 前端引入字体文件
  • 秋招突击——知识复习——HTTP/2、HTTP/3的改良
  • 《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 08网络自动化
  • C#实现利用数据驱动设计与组件系统优化游戏架构示例
  • 牛客周赛 Round 35 (A~G)
  • 后端开发刷题 | 面试篇3
  • SSD300模型总结
  • 【PGCCC】PostgreSQL线程池技术揭秘:从原理到实战应用
  • 【busybox记录】【shell指令】nohup
  • iPhone 16 系列和多款新品将亮相,苹果发布会定档 9 月 10 日|TodayAI
  • 【2024】Datawhale AI夏令营-从零上手Mobile Agent-Task1笔记
  • Java中常用的API
  • Redis数据结构与连接
  • 用于目标说话人提取的统一视听线索
  • 【Java】—— Java面向对象基础:使用Java模拟银行账户与客户交易系统
  • Spark-Task启动流程
  • 游戏开发面试题