您的位置 首页 制造

arm指令集 从汇编开端

特点:Load/Store结构(存储器操作仅包括load和store,所有其他操作在寄存器中完成)32位固定指令宽度3地址指令格式(即两个源操作数和…

特色:
Load / Store结构(存储器操作仅包括load和store,一切其他操作在存放器中完结)
32位固定指令宽度
3地址指令格局(即两个源操作数和成果存放器都独立指定)
每条指令都条件碑文
可在单周期碑文的单条指令内一起完结一项一般认为操作和一项一般ALU操作

主动变址功用

存放器模型
用户形式下
R1-R15的15个32位通用存放器堆,R15为PC存放器
CPSR的状况存放器高四位一共N(负数)、Z(零)、 C(进位)、V(溢出)标志

分类介绍:
+————-+————-+———–+
| 数据处理指令| 数据传送指令| 操控流指令|
+————-+————-+———–+

——————————————————————————
数据处理指令:对存放器内数据进行算术或逻辑操作
简略存放器操作
算术操作: ADD, ADC, SUB, SBC, RSB, RSC
阐明: RSB和RSC别离为反向减法和带进位反向减法
举例: ADD r0, r1, r2 ; r0 = r1 + r2
RSB r0, r1, r2 ; r0 = r2 – r1
按位逻辑操作: AND,ORR,EOR,BIC
阐明:按位与,按位或,按位异或,and not
举例: BIC r0, r1, r2 ; r0 = r1 and not r2
存放器传送操作:MOV,MVN
阐明: MVN为按位取反传送
举例: MVN r0, r2 ; r0 = not r2
比较操作:CMP,CMN,TST,TEQ
阐明: 比较,取反比较,位测验,测验持平
举例: TEQ r1, r2 ;
留意:操作数次序格局为成果存放器,榜首操作数,第二操作数
当即数操作:
阐明: 在数字前面加#一共当即数,加#&一共16进制当即数
举例: ADD r3, r3, #1 ; r3 = r3 + 1
AND r8, r7, #&ff ; r8 = r7 & 0xFF
存放器移位操作:四地址指令
移位指令:LSL, LSR,ASL,ASR,ROR,RRX
阐明: 逻辑左移,逻辑右移,算术左移,算术右移,循环右移,扩展
一位的循环右移
举例: ADD r3, r2, r1, LSL #3 ; r3 = r2 + (r1 << 3)
设置条件码:
阐明:任何数据处理指令都可以设置条件码(NZCV),比较操作只能设
置条件码,假如其他数据处理操作要设置条件码,需求添加S
操作码来指明。
算术操作(包括CMP,CMN)依据算术运算成果来设置一切标志
位,逻辑和传送操作不发生有意义的C或V值,这些操作依据结
果来设置N和Z,保存V,没有移位操作时,保存C;或许当移位
时,将移位移出的最终位设置为C。
举例: ADDS r2, r2, r0
ADC r3, r3, r1
乘法操作:
阐明: 第二操作数不行认为当即数
成果存放器不答应为源存放器
假如设置位S,则标志位V保存,标志为C不再有意义。
长乘的话,高32位有用位放入第二个成果存放器。
举例: MUL r4, r3, r3 ; r4 = r3 * r2
MLA r4, r3, r2, r1 ; r4 = r3 * r2 + r1

——————————————————————————
数据传送指令:在ARM存放器和存储器之间传送数据
根本数据传送指令
单存放器的Load / Store指令
多存放器的Load / Store指令
单存放器的交流指令:首要用于体系级程序,完成原子操作。
寻址形式:ARM的数据传送指令包括存放器直接寻址,基址偏移和基址变址,
阐明:在任何情况下都需求有一个ARM存放器来存放地址,该地址接近
需求传送数据的地址。
举例: LDR r0, [r1] ; r1内数值代表的存储器方位的内容读入r0
STR r0, [r1] ; 将r0写入r1内数值代表的存储器方位

前变址(pre-indexed)
阐明:基址存放器不包括确认地址,在基址上加上不超越4KB
的偏移量来寻址
举例: LDR r0, [r1, #4] ; 寻址r1+4
主动变址的前变址:
阐明:主动变址时,会一起完成对基址存放器的批改。
举例:LDR r0, [r1, #4]! ; 寻址r1+4并将r1+=4
后变址(post-indexed)
阐明:基址不加偏移寻址,当即数偏移量仅用作基址批改
举例: LDR r0, [r1], #4 ; 寻址r1,并将r1+=4
恣意字节对齐的指令:LDRB

多存放器数据传送和块传送(块传送略)
阐明:一起存取几个存放器,答应16个存放器的恣意子集合用单条
指令传送。支撑主动变址
举例: LDMIA r1, {r0, r2, r5} ;将[r1],[r1+4],[r1+8]别离
读入r0, r2, r5

——————————————————————————
操控流指令
搬运指令(branch)
阐明:无条件搬运B,BAL
举例: B LABEL ; LABEL为某个方位
条件搬运
阐明: BEQ 持平
BNE 不等
BPL 非负
BMI 负
BCC 无进位
BCS 有进位
BLO 小于(无符号数)
BHS 大于等于(无符号数)
BHI 大于(无符号数)
BLS 小于等于(无符号数)
BVC 无溢出(有符号数)
BVS 有溢出(有符号数)
BGT 大于(有符号数)
BGE 大于等于(有符号数)
BLT 小于(有符号数)
BLE 小于等于(有符号数)
和其间BCC和BLO,BCS和BHS的二进制代码相同
条件碑文
阐明:有时可以用条件碑文来替代搬运,要运用条件碑文,要在3字符
的操作码之后添加2字符的条件码,条件码应该在其他任何
批改码之前。
举例: CMP r0, #5
ADDNE r1, r1, r0
SUBNE r1, r1, r2
; 在r0!=5的情况下才会碑文后续加减查办
搬运和链接指令和子程序回来指令
阐明:用于跳转并回来,比方子程序,BL指令,留意不能嵌套子程序,
不然上一级的回来地址将被下一级的回来地址掩盖,这时应该
把回来地址和变量保存到仓库上,运用STMFD和LDMFD
监控程序调用(略)
阐明:软中止相关,可用于供给IO拜访
跳转表(略)
阐明:用于子程序列表较长时,留意要检测跳转表越界

——————————————————————————
参考文献
《ARM SoC 体系结构》第二版 Steve Furber著

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/264029.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部