[国嵌笔记][025][ARM指令分类学习]
算术和逻辑指令
1.mov
格式:mov {条件}{s} <dest>, <op>
作用:把一个值从一个地方移动到另一个地方,<dest>必须是寄存器
示例:
@mov指令范例 “@”表示注释
mov r1, #8
mov r2, r1
2.mvn
格式:mvn {条件}{s} <dest>, <op>
作用:把一个值取反后从一个地方移动到另一个地方,<dest>必须是寄存器
示例:
@“0b”表示二进制,”0x”表示十六进制,什么都不加表示十进制
mvn r1, #0b10
mvn r2, #5
mvn r3, r1
3.sub
格式:sub{条件}{s} <dest>, <op1>, <op2>
作用:减法,用<op1>-<op2>把结果放到<dest>寄存器中
示例:
@<dest>和<op1>不能为立即数
mov r0, #4
sub r1, r0, #2
4.add
格式:add{条件}{s} <dest>, <op1>, <op2>
作用:加法,<op1>加上<op2>的和放到<dest>寄存器中
示例:
@可以在调试中直接给寄存器赋值
mov r1, #1
add r2, r1, #1
5.and
格式:and{条件}{s} <dest>, <op1>, <op2>
作用:逻辑与,<op1>与<op2>相与结果放在<dest>寄存器中
示例:
mov r1, #5
and r2, r1, #0
and r3, r1, #1
6.bic
格式:bic{条件}{s} <dest>, <op1>, <op2>
作用:位清除,把<op1>中在<op2>中对应为1的位清零,结果放在<dest>中
示例:
mov r1, #0b1011
bic r2, r1, #0b0101
比较指令
1.cmp
格式:cmp{条件}{P} <op1>, <op2>
作用:比较,<op1>减去<op2>的大于、小于和等于三种情况保存在cprs中的N和Z位中
示例:
mov r1, #2
cmp r1, #1 @NZ 00
cmp r1, #2 @NZ 01
cmp r1, #3 @NZ 10
2.tst
格式:tst{条件}{P} <op1>, <op2>
作用:测试位,把<op1>与<op2>中对应位做按位与操作,结果保存在cprs中的Z位,用来测试<op1>在<op2>中对应位是否为1(条件是否为真)
示例:
mov r1, #0b101
tst r1, #0b010 @Z 1
tst r1, #0b110 @Z 0
跳转指令
1.b
格式:b{条件} <地址>
作用:根据条件跳转到地址处,常用条件有gt(大于)、ge(大于等于)、eq(等于)、ne(不等于)、lt(小于)、le(小于等于);也可以不跟条件,表示无条件跳转
示例:
mov r1, #2
mov r2, #1
cmp r1, r2
bgt branch @(if)如果满足条件跳转到分支,否则执行另一个分支
sub r3, r1, r2
b end @无条件跳转
branch:
add r3, r1, r2
end:
nop @空操作
2.bl
格式:
作用:带链接返回的跳转,在跳转之前保存返回后将要执行的下一条指令的地址到lr(链接寄存器)中,用于函数的返回
示例:
mov r1, #1
mov r2, #2
bl func
mov r0, r3
b end
func:
add r3, r1, r2
mov pc, lr
end:
nop
移位指令
1.lsl
格式:rx , lsl#n
作用:逻辑左移(logical or arithmetic shift left),把rx寄存器中的值左移n位,低位补0。类似的还有asl(算术左移,低位直接补0),lsr(逻辑右移,高位补0),asr(算术右移,高位补符号值)。逻辑移动直接补0,算术移动补符号值。
示例:
mov r1, #0b101
mov r2, r1, lsl#2
mov r2, r1, asl#2
mov r2, r1, lsr#2
mov r2, r1, asr#2
2.ror
格式:rx, ror#n
作用:循环右移(rotate right),把rx寄存器的最低位循环移动到最高位。
示例:
mov r1, #0b11
mov r2, r1, ror#1
3.rrx
格式:rx, rrx#n
作用:带扩展位的循环右移(rotate right with extend),把rx寄存器的值加上cprs中的S位一起循环右移。
示例:
mov r1, #0b11
mov r2, r1, rrx
4.循环指令汇总
LSL 逻辑左移,低位补0值
ASL 算术左移,低位补0值
LSR 逻辑右移,高位补0值
ASR 算术右移,高位补符号(S)值
ROR 循环右移,高位补低位值
RRX 带扩展的循环右移,符号位(S)补低位值
5.程序状态字访问指令
1.mrs和msr
格式:mrs rd, cpsr msr cpsr, rd
作用:程序状态字寄存器不能直接修改,需要用专用指令来修改程序状态寄存器中的值。
示例:
mrs r0, cpsr
orr r0, r0, #0b11111 @使处理器工作在sys(系统模式
msr cpsr, r0
6.存储器访问指令
1.ldr和str
格式:ldr{条件} rd, <地址> str{条件} rd, <地址>
作用:从<地址>中装载到rd中,或把rd的值保存到<地址中>
示例:
mov r1, #ff
ldr r0,=0x30001000 @mov指令不能直接超过8位的值,用伪指令用来把内存地址0x30001000值赋给r0寄存器
str r1, [r0] @把r1中的值保存到到r0指向的地址中
ldr r2, [r0] @把r0指向的地址中的值装载到r2中
.text
.global _start
_start:
@ldr str
ldr r0, =0x30001000
mov r1, #0xff
str r1, [r0]
ldr r2, [r0]@mrs msr
mrs r1, cpsr
orr r1, r1, #0b11111
msr cpsr, r1@ror
mov r1, #0b11
mov r2, r1, ror#1
mov r3, r1, rrx@lsl
mov r1, #0b101
mov r2, r1, lsl#2
mov r2, r1, asl#2
mov r2, r1, lsr#2
mov r2, r1, asr#2@bl
mov r1, #1
mov r2, #2
bl func
mov r0, r3
b endfunc:
add r3, r1, r2
mov pc, lrend2:
nop@b
mov r1, #2
mov r2, #1cmp r1, r2
bgt branchsub r3, r1, r2b end
branch:add r3, r1, r2end1:
nop@tst
mov r1, #0b101
tst r1, #0b010
tst r1, #0b110@cmp
mov r1, #2
cmp r1, #1
cmp r1, #2
cmp r1, #3@bic
mov r1, #0b1011
bic r2, r1, #0b0101@and
mov r1, #5
and r2, r1, #0
and r3, r1, #1@add
mov r1, #1
add r2, r1, #1@sub
mov r0, #4
sub r1, r0, #2@mvn
mvn r1, #0b10
mvn r2, #5
mvn r3, r1@mov
mov r1, #8
mov r2, r1
转载于:https://www.cnblogs.com/d442130165/p/4895061.html
[国嵌笔记][025][ARM指令分类学习]相关推荐
- [国嵌笔记][036][关闭MMU和CACHE]
关闭MMU和CACHE 1.Cache是一种容量小,但存取速度非常快的存储器,它保存最近用到的存储器中数据的拷贝.按功能分为ICache(指令Cache)和DCache(数据Cache) 2.虚拟地址 ...
- 【学习笔记】无限极分类学习
当我们在做小项目,或者练习时,或多或少会碰到制作分类的操作.那么该怎么让父类子类区别开呢?本篇博文来做无限极分类的教程. --PHP小白 在制作分类是我们需要让分类展示更友好.就需要用无限极分类. 首 ...
- arm ida 伪代码 安卓 符号表_使用IDA动态调试及ARM指令学习笔记
本文介绍如何用IDA进行动态调试及部分ARM指令的学习. 环境:已root的安卓手机一部,IDA pro 6.8,win7系统. 下载样本app,并已确认可调试(debuggable = true), ...
- 【嵌入式开发】 ARM 汇编 (指令分类 | 伪指令 | 协处理器访问指令)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42408137 转载请著名出处 本博客相关文档下载 : -- A ...
- ARM指令寻址方式及RealView MDK开发环境ARM汇编程序实践
内容简介 本文根据作者在CSDN发表的树莓派ARM汇编语言编程十讲(第3讲) (CSDN链接https://blog.csdn.net/yuanzywhu/article/details/104975 ...
- 学习国嵌嵌入式视频笔记
本文中使用到的datasheet都来自国嵌开发板光盘,笔记也都摘抄自光盘视频 S5PV210_UM_REV1.1.pdf S5PV210_iROM_ApplicationNote_Preliminar ...
- 【ARM学习笔记】ARM汇编指令:B、BL、BX、BLX的区别
文章目录 1 ARM的跳转指令介绍 2 ARM的4个跳转指令 2.1 B 指令 2.2 BL 指令 2.3 BLX 指令 2.4 BX 指令 3 更多分享 1 ARM的跳转指令介绍 跳转指令用于实现程 ...
- [mmu/cache]-ARM MMU的学习笔记-一篇就够了
★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM cache的学习笔记-一 ...
- [mmu/cache]-ARM cache的学习笔记-一篇就够了
★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位 . 相关文章 1.ARM MMU的学习笔记-一篇就 ...
最新文章
- 京东智能巡检机器人问世 京东金融进军企业服务新蓝海
- hdu2149 巴什博奕
- SAP PP常用表(重要)
- [html] h5页面如何传递参数给小程序?
- android按钮旋转,单击一个按钮在android中顺时针旋转图像
- 哈工大等提出轻量级盲超分辨模型LESRCNN,代码已开源
- Tips--TensorFlow报错:tensorflow:Early stopping conditioned on metric `val_loss` which is not available
- 大文件数据导出(后台执行,自动生成)
- 计算机网络的定义以及分类
- h5页面不随微信字体大小改变
- vmware设置虚拟机静态ip
- mysql 占位符 出错_占位符报语法错误
- psid mysql_eclipse连接MYSQL,保存数据到mysql里,哪出错了?
- VPC NAT(SANT,NANT)实验
- 网站如何诊断,完整的网站诊断方法!
- C++智能指针详解(auto_ptr、unique_ptr、shared_ptr)
- Xft字体库:体系结构及用户指南(转)
- 图论——最大团问题和最大独立集、二分图相关
- 计算机控制与自动化专业世界排名,2019ARWU软科世界大学自动化与控制专业排名TOP50...
- 基于 BS 模式的汽车售后服务系统的设计+源码
热门文章
- [机器学习-Sklearn]决策树学习与总结 (ID3, C4.5, C5.0, CART)
- 有监督学习 —— KNN算法
- ISSN和EAN原理及转换【转载】
- php mvc 参数传递数组,PHP MVC在帖子上添加到数组
- Maven手工管理项目
- Oracle维护数据完整性——约束
- 扩展欧几里得exgcd算法 acm寒假集训日记22/1/12
- Redmine Gantt 实现 (Show relations in Gantt diagram)
- C# 数组增加元素_C#的集合类型及使用技巧
- android opengl版本太低,Android OpenGL:可能内存不足?