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

汇编知识MOV,MRS,MSR,PUSH和POP指令

处理器做得最多的事情就是在处理器内部来回的进行数据传递
1)    将数据从一个寄存器传递到另一个寄存器中
2)    将数据从一个寄存器传递到特殊寄存器,例如CPSR,SPSR寄存器
3)    将立即数传递到寄存器。
数据传输常用的三个指令:MOV,MRS,MSR指令


常用的存储器访问指令有两种:LDR和STR这两个指令
 
LDR指令:
  LDR主要用于存储加载数据到寄存器RX中,LDR也可以将一个立即数加载到寄存器RX中,LDR加载立即数的时候要使用“-”而不是“#”,在嵌入式开发中,LDR最常用的就是读取CPU寄存器中的值:
例如:
LDR R0, =0X0209C000 @将寄存器地址0x0209c000加载到R0中也就是R0=0x0209c000
LDR R1, [R0] @读取地址中的数据到R1寄存器中
上述代码就是读取寄存器值保存到R1寄存器中
STR指令:
   LDR指令是从寄存器中读取数据,STR就是将数据写入到寄存器中
LDR R0, =0X0209C000 @将寄存器地址0x0209c000加载到R0中也就是R0=0x0209c000
LDR R1, = 0X20000002 @R1保存要写入到寄存器的值
STR R1, [R0] @将R1中的值写入到R0中所保存的地址中

注:LDR和STR都是按照字进行读取和写入的,也就是操作的32位数据,如果要按照字节,半字进行操作的话可以在指令“LDR”后面加上B或H,例如按字节操作的指令LDRB,STRB,半字操作的指令LDRH,STRH。

PUSH和POP指令
    
     PUSH :将寄存器列表存入栈中
     POP:  从栈中恢复寄存器列表
将R0~R3,R12进行压栈以后的堆栈示意图,此时SP指向0x7fffffec。

POP{R0~R3,R12} @在恢复R0~R3,R12
出栈就是从栈顶,也就是SP当前执行的位置开始,地址依次减小来提取堆栈中的数据
到要恢复的寄存器列表中
PUSH和POP的另一种写法是STMFD SP! 和 LDMFD SP!
 


http://www.kler.cn/a/281449.html

相关文章:

  • TinaSDKV2.0 自定义系统开发
  • 机器学习概述,深度学习,人工智能,无监督学习,有监督学习,增量学习,预处理,回归问题,分类问题
  • Python数据采集与网络爬虫技术实训室解决方案
  • MHA(mysql高可用架构)
  • 刷题DAY19
  • 存储实验:基于华为存储实现存储双活(HyperMetro特性)
  • 【功能自动化】使用HTMLTestRunner生成测试报告
  • 浅谈【数据结构】链表之单链表
  • 惠海H6900B升压恒流调光IC芯片3.7V7.4V12V升压18V24V36V 48V 植物灯/电解水
  • 利用命令模式实现一个手游后端架构的方法总结
  • EXCEL试题
  • 【unity实战】使用新版输入系统Input System+Rigidbody实现第三人称人物控制器
  • k8s的组件以及安装
  • 百度文心一言API批量多线程【改写伪原创文章软件】-key免费无限写
  • 能大致讲一下Chat GPT的原理吗?
  • Debugging HIP
  • 35岁零基础能转型AI大模型吗?
  • 关闭spirng boot集成springdoc-openapi的接口文档
  • 单点登录最全详解,建议收藏!
  • 「2.2」Radio Transmission