版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ARM令英文全称及功能描述V2.0作者:满光明2019 年 4 月 9 日转载请支持原创,保留此页信息,否则将追究责任、, 、.刖百我在工作前买了一本关于 ARMhf令的书籍,当时由于方便记忆理解的考量, 整理了 ARMif令,并 且加入了英文的全称。了解了英文的全称,能够好的帮助记忆和理解。百度网盘里分享出来的ARM指令英文全称我看了一下都是我当年整理的版本,但他们把作者的名字去掉了。几年过去了,ARM肢术取得了巨大的进步,ARMX具低功耗、低成本、高性能的优势抢占了移动市场。相信在不远的未来,ARM普遍运行在个人电脑和服务器上。在可穿戴、边缘计算等前沿领域ARMW有无与伦比的优势。作为一个
2、技术控,工作以来我一直从事ARM®关的开发工作,计算机领域需要学习的东西太多,但很多基础知识都是相通的。我也希望能把自己这么多年的技术积累拿出来分享给即将走上硬件开发、底层驱动开发的同仁们本篇仍然以介绍 ARMm构以及AR附殍令为主,在原来的基础上重新调整了指令顺序,首先介绍ARM架构不同版本的区别,进而引出基本指令结构,最后详细列出所有指令详表,增强可读性,易于理解。一、arm令集版本历史计算机完成一定的操作通过指令来实现,不同的指令方式被称为计算机架构,目前计算机主要有两大架构阵营,一是CISC(Complex Instruction Set Computers )复杂指令集架构
3、,另一种是 RISC (Reduced Instruction Set Computers )精简指令集架构。采用CISC架构的代表是Intel和AMD勺X86指令集,采用RISC架构的代表是ARM旨令集和PowerPC旨令集。AR储构从诞生到今天 从V1版本已经升级到了 V8版本,各版本代表的分支型号如下表所示。架构处理器家族历史ARMv1ARM1最早由Acorn计算机公司设计,1985年开发出样本。ARMv2ARM2、ARM31986年开发出ARM2 , 32位数据,26位地址空间。ARMv3ARM6、ARM71990年设计团队组成新公司 Advanced RISC Machines Lt
4、d.(安某国际)3 ARMv4StrongARM、ARM7TDMI、ARM9TDMIARMv5ARM7EJ、ARM9E、ARM10E、XScaleARMv6ARM11、ARM Cortex-MARMv7ARM Cortex-A、ARM Cortex-M、ARM Cortex-RARMv8Cortex-A35、Cortex-A50 系列14、Cortex-A72、Cortex-A73从图中可以看出,Cortex-A9架构的CPUS用白是ARMv7勺指令集,目前高性能的64位视频处理,比如Cortex-A72 ,采用的是ARMv8旨令集。Thumb-2殊用途的指令集高版本的指令集会向下兼容低版本,
5、在低版本的基础上增加了更多特殊用途的指令集,比如浮点运算,CPU1口速、数据安全等特sSKHislKey feature ARMv7-A compatibflkyARMv8 A-profile only (at this time)* 64-bit architecture support4including: Scalar FP(SP and DP) Adv SIMD(SP Float)VFPv3/v4NEONT Adv SIMDVFPv2ARMv7 - A/RARMv8-AARMdARMv6arm令集每种架构的CPU都有一组特殊用途的寄存器,用来存放从存储器读来数据或者指令编码,在 ARM
6、中,有一个特殊的寄存器 叫CPSR (current program status register ),用来存放当前指令执行的状态。比如存放数学运算结果的正负、借位、溢出等情 况,详细信息如下表所示。CPSRfieldF (Flags field mask byte)S (Stats field mask byte)X (Extension field mask byte)C (control field mask byte)CPSR313029282726 25 2423 22 2120 19 18 17 161514 13 12 11 10 9 876543210意义NZCVQDNZ (
7、RAZ)系统扩展用IFTM4M3M2M1M0CPSR各位 详细意义N当前指令运算结果为负时,N = 1;结果为非负时,N = 0Z运算结果为0, Z=1;否则Z=0C上溢出、进位C=1;下溢出、借位 C=0V加减法V - 1表小智勺位溢出II = 1时,禁止IRQ中断FF=1时,禁止FIQ中断TT=0, ARM 指令;T = 1, Thumb 指令M4:00b10000User0b10001FIQ0b10010IRQ0b10011Supervisor0b10111Abort0b11011Undefined0b11111System5对于32位的CP集本勾,ARM旨令由32位机器码组成,根据编码
8、格式,ARM旨令固定的格式如下:313029282726252423222120191817161514131211109876543210CondOpcodeSRnRdShift_operand多数ARM指令可以条件执行,执行的结果可以影响 CPSR寄存器的Z、N、C或者V等状态标志位。cond 域不同的值所代表不同的意义。Opcode域代表具体的指令,S为指令的后缀,可加可不加,指令后缀带 S表示 该指令的结果会影响CPSR寄存器。指令的详细编码格式如下。指令格式3130292827262524 23 22 2120191817 1615 1413 1211109876543210Cond
9、OpcodeSRnRdShift_operandCond指令执行的条件编码,详细如下所示opcode指令操作符编他(更局版本的指令集操作用包含bit27、26、25)S决定指令的操作是否影响 CPSR的值Rd目标寄存器编码Rn包含A个操作数的寄存器编码Shift_oprand表示第二个操作数6Cond域的编码对应的意义如下31302928Cond域描述0000EQZ= 1Equal0001NEZ = 0Not equal, or unordered0010CS/HSC = 1Carry set / Unsigned higher or sameGreat than or equal, or u
10、nordered0011CC/LOC = 0Carry clear / Unsigned lowerLess than0100MIN = 1NegativeLess than0101PLN = 0Positive or zeroGreater than or equal , or unordered0110VSV= 1OverflowUnordered0111VCV=0No overflowNot unordered71000HIC = 1 且 Z = 0Unsigned higherGreater than, or unordered1001LSC = 0 或 Z=1Unsigned low
11、er or sameLess than or equal1010GEN = 1 1. V= 1 或 N = 0且V= 0Signed greater than or equalGreater than or equal1011LTN = 1 1. V= 0 或 N = 0且V= 1Signed less thanLess than , or unordered1100GTZ= 0 或 N = VSigned greater thanGreat than1101LEZ= 1 或 N! = VSigned less than or equalLess than or equal , or unor
12、dered1110ALAlways (unconditional)Opcode域的编码对应的意义如下24232221Opcode域描述0000ANDLogical AND0001EORLogical Exclusive OR0010SUBSubtract0011RSBReverse Subtract0100ADDAdd0101ADCAdd with Carry0110SBCSubtract with Carry0111RSCReverse Subtract with Carry81000TSTTest1001TEQTest Equivalence1010CMPCompare1011CMNCom
13、pare Negated1100ORRLogical OR1101MOVMove1110BICBit Clear1111MVNMove Notarm令及功能描述详表指令格式:指令条件S 目的Register, OP1 , OP2" ”中的内容可选。即,可以不带条件只有目的寄存器,或只有目的寄存器和操作数 1 ,也可以同时包含所有选项。“S”决定指令的操作是否影响 CPSR中条件标志位的值,当没有 S时指令/、更新CPS珅条件标志位的值助记符英义全称示例、功能跳 转指 令BBranchB Label;程序无条件跳转到标勺Label处执行BLBranch with LinkBL Labe
14、l ;当程序无条件跳转到称号Label处执行时,同时将当前的PC值保存到R14中BLXBranch with Link and exchangeBLX Label ;从ARM旨令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM犬态切换到Thumb状态,该指令同时将 PC的当前内容保存到寄存器R14中BXBranch and exchangeBX Label ;跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以是Thumb指令数 据 处 理MOVMoveMOV R1 , R0, LSL # 3 ;将寄存器 R0的值左移3位后传送到 R1MVNMove NOTMV
15、N R0 , # 0 ;将立即数0取反传送到寄存器 R0中,完成后R0=-1CMPCompareCMP R1 , R0 ;将寄存器R1的值与寄存器 R0的值相减,并根据结果设置CPSR的标志位CMNCompare negativeCMN R1 , R0;将寄存器R1的值与寄存器 R0的值相加,并根据结果设置CPSR的标志位TSTTestTST R1, # 0xffe ;将寄存器 R1的值与立即数0xffe按位与,并根据结果设置 CPSR的标志位TEQTest equivalenceTEQ R1, R2;将寄存器R1的值与寄存器 R2的值按位异或,并根据结果设置CPSR的标志位ADDAddADD
16、 R0 , R2, R3 , LSL#1; R0 = R2 + (R3 << 1)ADCAdd with carryADCS R2, R6, R10 ; R2 = R6 + R10+ !C ,且更新 CPSR 的进位标志位SUBSubtractSUB R0, R1 , #256; R0 = R1 - 256SBCSubtract with carrySUBS R0 , R1 , R2 ; R0 = R1 - R2 - ! C,并根据结果设置 CPSR的进位标志位9RSBReverse subtractRSB R0 , R1, R2 ; R0 = R2 - R1RSCReverse
17、subtract with carryRSC R0 , R1 , R2; R0 = R2 - R1 - ! CANDAndAND R0 , R0, # 3 ;该指令保持 R0的0、1位,其余位清零。ORRORORR R0 , R0, # 3 ;该指令设置 R0的0、1位,其余位保持不变。EORExclusive OREOR R0 , R0, #3 ;该指令反转 R0的0、1位,其余位保持不变。BICBit clearBIC R0 , R0 , #0b1011 ;该指令清除 R0中的位0、1、和3,其余的位保持不变。CLZCount left zero计算操作数最高端 0的个数乘 加 指 令MU
18、LMultiplyMUL R0 , R1 , R2; R0 = R1 X R2MLAMultiply and accumulateMLAS R0 , R1 , R2, R3 ; R0 = R1 X R2 + R3 ,同时设置 CPSR中的相关条件标志位SMULLSigned multiply longSMULL R0, R1 , R2, R3 ; R0 = (R2 X R3)的彳氐 32 位 R1 = (R2 X R3)的高 32 位SMLALSigned mul l and accumulate lSMLAL R0, R1 , R2, R3; R0 = (R2 X R3)的彳氐 32 位 +
19、 R0; R1 = (R2 X R3)的高 32 位+ R1UMULLUnsigned multiply longUMULL R0, R1 , R2, R3 ; R0 = (R2 X R3)的彳氐 32 位;R1 = (R2 X R3)的高 32 位UMLALUnsigned mul&accumulate lonUMLAL R0, R1 , R2, R3 ; R0 = ( R2 X R3)的彳氐位+ R0; R1 = (R2 X R3)的高 32 位+R1PSR访问MRSMove PSR to registerMRS R0 , CPSR ;传送CPSR的内容到 R0MSRMove re
20、gister to PSRMSR CPSR_c , R0 ;传送 R0的内容到 CPSR,但仅仅修改 CPSR中的控制位域加载/存储指令LDRLoad wordLDR R0 , R1 , R2 !;将存储器地址为 R1+R2的字数据读入 R0,并将新地址 R1 + R2写入R1。LDRBLoad byteLDRB R0 , R1 , # 8;将存储器地址为 R1 + 8的字节数据读入 R0,并将R0的高24位清零LDRHLoad half wordLDRH R0, R1;将存储器地址为 R1的半字数据读入寄存器 R0,并将R0的高16位清零LDMLoad multipleLDMFD R13!
21、, R0 , R4-R12 , PC;将堆栈内容恢复到寄存器( R0, R4 至U R12, LR)STRStoreSTR R0 , R1 , # 8 ;将R0中的字数据写入 R1为地址的存储器中,并将新地址 R1 + 8写入R1STRBStore byteSTRB R0 , R1 , # 8;将寄存器 R0中的字节数据写入以 R1 +8为地址的存储器中STRHStore half wordSTRH R0 , R1 , # 8;将寄存器R0中的半字数据写入以 R1 + 8为地址的存储器中STMStore multipleSTMFD R13! , R0 , R4-R12 , LR;将寄存器列表中
22、的寄存器( R0 , R4至iR12, LR)存入堆栈数据SWPSwap wordSWP R0 , R1, R2 ; R2所指的字数据传送到 R0,同时R1的数据传送到 R2所指的单元10交换SWPBSwap byteSWPB R0, R1 , R2 ; R2所指的字节数据传送到R0, R0高24位清零,同时 R1低8位送R2所指单元。移 位 指 令LSLLogic shift leftMOV R0, R1, LSL#2 (ASL#2 );将R1中的内容左移两位后传送到R0中,低位用0填充ASLArithmetic shift leftLSRLogic shift rightMOV R0, R
23、1, LSR#2 ;将R1中的内容后移两位后传送到 R0中,左端用零来填充ASRArithmetic shift rightMOV R0, R1, ASR#2 ;将R1中的内容右移两位后传送到 R0中,左端用第31位的值来填充RORRotate rightMOV R0, R1, ROR#2 ;将R1中的内容循环右移两位后传送到R0中RRXRotate right extended左端用进位标志位C来填充协处理器CDPData operationsLDCLoadSTCStoreMCRMove to coproc fr ARM regMRCM to ARM reg fr coprocessor并行
24、指令前缀SSigned arithmetic modulo 28 or 2 16 ,sets CPSR GE bitQSigned saturating arithmeticSHSigned arithmetic, halving resultsUUnsigned arithmetic modulo 28 or 2 16 ,sets CPSR GE bitUQUnsigned saturating arithmeticUHUnsigned arithmetic ,halving results批量 传输 地址 模式Block load / storeStack pop / pushIAIncr
25、ement afterFDFull descendingIBIncrement beforeEDEmpty descendingDADecrement afterFAFull ascending11DBDecrement beforeEAEmpty ascendingARM 指令 寻址 方式立即寻址ADDR0 , R0, # 0x3fR0 R0 + 0x3f寄存器寻址ADDR0 , R1 , R2R0 R1 + R2间接寻址ADD R0 , R1 , R2R0 - R1 + R2变址寻址LDR R0 , R1 , # 4R0-R1 +4LDR R0 , R1 , # 4 !R0-R1 +4、R
26、1-R1 + 4LDR R0 , R1 , 4 4R0-R1、R1 -R1 +4LDR R0 , R1 , R2R0-R1 +R2多寄存器寻址LDMIA R0 , R1 , R2 , R3 , R4R1R0 ; R2- R0 +4 ; R3 - R0 +8 ; R4 - R0 +12伪指令及伪操作符号定义GBLA / LCLA定义一个全局/局部的数字变量,并初始化为 0GBLL / LCLL定义一个全局/局部的逻辑变量,并初始化为F (假)GBLS/LCLS定义一个全局/局部的字符串变量,并初始化为空SETA / SETL / SETS给一个数学/逻辑/字符串变量赋值RLIST对一个通用寄存器
27、列表定义名称,访问次序为根据寄存器的编号由低到高,与排列次序无关数据定义DCB ( = ) / DCW (DCWU )分配一片连续的字节/半字存储单兀法用指定的数据初始化后缓U表小不要求对齐DCFS (DCFSU ) /DCFD (DCFDU ) DCQ (DCQU ) / DCD (DCDU )分配一片连续的(单/双精度的浮点数)字存储单兀法用指定的数据初始化用于分配一片以双字 /字为单位的连续的存储单元法用指定的数据初始化DCDO分配字内存但愿,初始化为标号基于静态基址寄存器R9的偏移量DCI和DCD类似,不向处在于 DCI内存中的数据被标识为指令SPACE (%)DataSpace SP
28、ACE 100 ;分配 连续100字节的存储单元并初始化 为0MAP (人)MAP 0x100 , R0 ;定义结构化内存表首地址的 值为0x100 +R012FIELD (#)A FIELD 16;定义A的长度为16字节控制伪指令IF、ELSE、ENDIFIF 逻辑表达式指令序列1ELSE指令序列2ENDIFIF、ELSE、ENDIF伪指令能根据条件的成立与否决定是否执行某个指令序列。当IF后面的逻辑表达式为真,则执行指令序列1,否则执行指令序列 2。其中,ELSE及指令序列2可以没有,此时,当IF后面的逻辑表达式为真,则执行 指令序列1,否则继续执行后面的指令。WHILE、WENDWHILE 逻辑表达式指令序列WENDWHILE、WEND伪指令能根据条件的成立与否决定是否循环执行某个指令序列。当WHILE后面的逻辑表达式为真,则执行指令序列,该指令序列执行完毕后,再判断逻辑表达式的值, 若为真则继续执行,一直到逻辑表达式的值为假。MACRO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际基础与金融 27
- 国际基础与金融 10
- 2026年《公共卫生执业医师》第三单元模拟试题一
- 2026年高考地理十校联考全真模拟试卷(三)及答案
- 2026年度艾滋病防治知识竞赛试卷(四)及答案
- 2026年安徽省省情知识竞赛试卷及答案(共十套)
- 提升电路制造工艺-优化生产流程提高效率质量
- 智慧光照:智灯引领家居-探索智能灯具在智慧家居的应用与展望
- 自动驾驶汽车的未来-汽车技术专家
- 确保市场公平竞争承诺书8篇
- 储能合作框架协议范本
- 2026安徽交控集团所属安徽交控资源有限公司校园招聘3人备考题库及1套参考答案详解
- 住院诊疗规范管理制度
- 硅pu地面铺设施工工艺方案
- 2026年及未来5年市场数据中国氢氧化镁行业市场深度分析及投资战略数据分析研究报告
- 家电卖场员工劳动合同规定
- 2025哈萨克斯坦农产品市场发展分析及冷链物流趋势与出口产业链研究报告
- 2025年四川成都兴城投资集团有限公司招聘笔试参考题库附带答案
- 电炉锌锭生产线项目可行性研究报告
- 2025年大学《数字经济-数字经济学原理》考试参考题库及答案解析
- 国开《广告调查与预测》形考作业1-4答案
评论
0/150
提交评论