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

ARM汇编语言

ARM 汇编语言

ARM基本指令

  1. 分支指令
指令功能功能
B label {f,b}移动到label, label后面的选项f、b是位于下、上侧的labelb call_kernel
BL label {f,b}和B相同,但lr中记录bl下一条指令的地址bl cache_on
BX label {f,b}带状态切换的无条件跳转
BLX label {f,b}带链接和状态切换的无条件跳转
  1. 算数运算指令
指令功能功能
ADD X Y ZX中保存Y与Z之和add r12, r12, #4*5
SUB X Y ZX中保存Y减Z之差sub pc, lr, r0
  1. 逻辑运算符
指令功能功能
BIC X Y Z在Y中解除Z中设置的位并保存到X X=Y&~Zbic r3, r3, #0x3f00
EOR X Y Z将Y和Z执行exclusive or运算并保存到X X=Y^Zeor r1, r1, r6
ORR X Y ZRd=Rn1Norr r0, r0, #0x002d
ANDX Y Z将Y和Z执行and运算的结果值保存到Xorr r0, r0, #0x002d
  1. 比较运算指令
指令功能功能
CMP X Y比较X和Y并更新状态标签cmp r1,r2
TEQ X Y检查X和Y的值是否一致teq r6, ip
TST X Y检查Y中设置的位是否全部设置到Xtst r1, r1
  1. 数据传输指令
指令功能功能
LDR X Y Z将Y+Z的地址中保存的值加载到Xldr r1, [r6, #0]
LDM X{!} Rx-Ry从Rd中保存的地址依次取值并读入rx~ry的寄存器,每次都更新地址,后面有!时x的值会更新ldmfd sp!, {r4-r7, r9, pc }
STM X{!} Rx-Ry将x指向的地址的值依次写入寄存器列表Rx-Ry,后面有!时x的值不会更新stmfd sp!, {r4, r5, r6, r7}
  1. 状态寄存器指令
指令功能功能
MRS X CPSR将CPSR的值读入Xmsr r2,cpsr
MSR CPSR X检查X和Y的值是否一致mrs cpsr, r2
  1. 其他指令
指令功能功能
ADR X label将label的地址保存到Xadr r12, proc_types
MOV X Y将Y的值保存到Xmov r0, r1
  1. 执行条件运算符
后缀标签含义
eqz=1相等
nez=0不相等/标志
hic=1,z=0无符号数大于
cs/hsc=1无符号数大于或等于
cc/loc=0无符号数小于
lsc=0,z=1无符号数小于或等于
gtz=0,n=v有符号数大于
gen=v有符号数大于或等于
ltn!=v有符号数小于
lez=1,n!=v有符号数小于或等于
min=1负数
pln=0整数或0
vsv=1溢出
vc没有溢出

相关文章:

  • 【通信】非正交多址接入(NOMA)和正交频分多址接入(OFDMA)的性能对比附matlab代码
  • 深入理解控制反转IOC和依赖注入
  • micropython 可视化音频 频谱解析(应该是全网首家)(预告,还没研究完成)
  • 网课答案接口平台 系统独立后台
  • stp基本介绍
  • 公众号如何接入查题功能
  • IDC_ISP网络之IDC机房内网络架构及配置
  • ROS1云课→17化繁为简stdr和f1tenth
  • R-CNN(Regions with CNN features)
  • LeetCode 387---First Unique Character in a String
  • 《OpenDRIVE1.6规格文档》1
  • 城市区号查询易语言代码
  • Codeforces Round #818 (Div. 2)(A-E)
  • 【刷题笔记7】LeetCode 54. 螺旋矩阵(数组模拟)
  • 设计模式:代理模式
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【剑指offer】让抽象问题具体化
  • CentOS 7 修改主机名
  • Computed property XXX was assigned to but it has no setter
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Go 语言编译器的 //go: 详解
  • JS笔记四:作用域、变量(函数)提升
  • nodejs调试方法
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • python大佬养成计划----difflib模块
  • Python学习笔记 字符串拼接
  • springMvc学习笔记(2)
  • V4L2视频输入框架概述
  • Vue2.0 实现互斥
  • 多线程 start 和 run 方法到底有什么区别?
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 利用DataURL技术在网页上显示图片
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何实现 font-size 的响应式
  • 设计模式(12)迭代器模式(讲解+应用)
  • 深度学习在携程攻略社区的应用
  • 我的业余项目总结
  • 写给高年级小学生看的《Bash 指南》
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $ git push -u origin master 推送到远程库出错
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C#)获取字符编码的类
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .apk 成为历史!
  • .NET CLR Hosting 简介
  • .NET CORE使用Redis分布式锁续命(续期)问题