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

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.kler.cn/a/280635.html

相关文章:

  • 揭秘!从微醺到昏迷:血液中酒精浓度,如何决定你的醉酒程度?
  • 【C语言进阶】数据如何安家?C语言内存中的存储艺术深度解析
  • 【Grafana】通过api请求Grafana Datasource获取数据
  • 【k8s】Kubernetes初步
  • 2024羊城杯 Web Wp
  • 前端学习Day33
  • 使用 PowerShell 自动化 Windows 系统管理任务
  • React 入门第四天:理解React中的路由与导航
  • MySQL 中间件 MySQL-Router
  • 黑神话悟空用什么编程语言
  • OSPF路由协议详解
  • Python中的JSON处理:json库使用详解
  • 深圳MES制造管理系统在企业中的应用
  • 谷歌浏览器http自动跳转https问题
  • 【Hot100】LeetCode—46. 全排列
  • Java中常用的API
  • 【Python机器学习】NLP分词——利用分词器构建词汇表(三)——度量词袋之间的重合度
  • SQL,给连续的行加上标识序号
  • 第六届机器人与智能制造技术国际会议 (ISRIMT 2024)
  • 【C++ Primer Plus习题】6.4