版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统设计西安邮电大学计算机学院王忠民第三章CortexM3指令系统学习目的了解ARMV7架构新引入的Thrum-2指令系统的特点,掌握Thumb-2指令集的编码格式以及ARM汇编语言源程序的组成以及编写规则。掌握基于纯汇编工程的构建方法,掌握启动文件的编写与基本构成,理解中断(异常)向量表的作用。掌握基本的数据型操作数的寻址方式,理解常用的地址型操作数的寻址方式。熟悉算术运算指令、逻辑运算与位操作指令、内部数据传输指令、存储器数据传送指令、比较与测试指令、控制转移指令等中的常用指令的功能,掌握对处理器底层访问、数据处理与控制转移等一些基本指令的使用。学习内容汇编语言基础寻址方式算术运算指令逻辑与位操作指令内部数据传送指令存储器数据传送指令比较与测试指令控制转移指令汇编语言基础寻址方式汇编语言指令系统(1)汇编语言指令系统(2)第三章CortexM3指令系统---学习内容
ARM公司推出的微处理器IP核架构已经从ARMv1(1985年)发展到ARMv9(2021年),对应的指令集也经历初期的32位ARM指令集、32位的ARM指令集和16位的Thumb指令集在ARM和Thumb两种状态下切换使用、16位和32位并存的Thumb-2指令集等几个阶段。处理器也从早期的32位字长发展到ARMv8之后的64位字长。处理器的性能得到了很大提高,为各种领域的应用带来了更加强大和安全的处理能力,并推动了移动计算、物联网、边缘计算、云计算等领域的发展。
1.ARM指令集 ARM指令集是一种由ARM公司开发的精简指令集(ReducedInstructionSetComputing,RISC),它以低功耗、高性能和简洁的设计而闻名。ARM指令集最初推出于上世纪80年代,面向嵌入式系统和移动设备等领域,逐渐成为全球最常用的指令集架构之一。 2.Thumb指令集 Thumb指令集于1994年首次在ARMv4T架构中引入的。Thumb指令集采用16位的压缩指令格式,相比于32位的ARM指令集,在相同存储空间下可以存储更多的指令,从而提高了代码密度。这时候用户应用程序既可以用32位的ARM指令,也可用16位的Thumb指令,用户程序需要根据具体情况在两种模式之间切换,需要消耗系统资源。 3.Thumb-2指令集
Thumb-2指令集是在2003年在ARMv6T2架构中引入的。最早使用Thumb-2指令集的ARM核是Cortex-M3。Thumb-2指令集使得开发者可以同时使用16位和32位指令,汇编程序会根据具体情况尽量把用户的汇编指令翻译成16位的指令,若16位不能表示,则会翻译成32位的机器指令,并灵活地根据需求进行代码优化,而不需要像早期那样开发者需要在ARM指令集和Thumb指令集中间来回切换。由于CortexM3使用了Thumb-2指令集,因此,CortexM3核中程序状态寄存器xPSR中的T状态位始终为1。第三章CortexM3指令系统---ARM汇编语言指令系统5;文件名:TEST1.S
;功能:实现两个寄存器相加;说明:使用ARMulate软件仿真调试
AREA Example1,CODE,READONLY ;声明代码段Example1START
MOV R0,#0 ;设置参数
MOV R1,#10LOOP
BL ADD_SUB ;调用子程序ADD_SUB
SUBS R1,R1,#1
BNE LOOP ;跳转到LOOPLOOP1
B LOOP1 ;死循环了!ADD_SUB
ADDS R0,R0,R1 ;R0=R0+R1
MOV PC,LR ;子程序返回
END ;文件结束使用“;”进行注释标号顶格写实际代码段声明文件结束第三章CortexM3指令系统---ARM汇编语言源程序的组成汇编语言源程序组成:红色:指令黄色:伪指令蓝色:标号黑色:注释语句格式标号---标号是可选的,如果有,它必须顶格写。标号的作用是让汇编器来计算程序转移的地址。操作码---操作码是指令的助记符,说明指令的功能,必须有。它的前面必须有至少一个空格,通常使用一个“Tab”键来产生。操作数---指令处理的对象。操作码后面往往跟随若干个操作数,而第1个操作数,通常都给出本指令执行结果的存储地。不同指令需要不同数目的操作数,并且对操作数的语法要求也不同。通常目的操作数和源操作数1都是寄存器寻址方式,源操作数2可以是立即数、寄存器或寄存器移位等。注释---注释均以“;”开头,它的有无不影响汇编操作,只是给程序员看的,能让程序更易理解。注意:此格式适用于算数运算指令和逻辑运算指令等,对寄存器赋值以及存储器读写指令不适合。{标号} 操作码{cond}{s}{.w/.n} 目的操作数(Rd), 第1操作数(Rn), 第2操作数(Rm) {;注释}第三章CortexM3指令系统---汇编语言基础---语句格式ADD R0,R1,R2ADD R1,R1,R2ADDR1,R2;等价于ADDR1,R1,R2ADDR0,R1,R2,LSL#1-------------------------------MOV R0,R1MOV R0,#10------------------------------LDRR0,[R1]STRRO,[R1]LDMIARd!,{寄存器列表}STMIARd!,{寄存器列表}操作数在CPU内操作数在存储器单元判断依据助记符英文含义标志位作用根据四个状态标志位(Z、C、N、V)的状态来判断EQEQualZ=1判断两个数相等(不区分有无符号数)NENotEqualZ=0判断两个数不相等(不区分有无符号数)CS/HSCarrySet/HigherorSameC=1判断无符号数大于或等于CC/LOCarryClear/LOwerC=0判断无符号数小于MIMInusN=1判断结果是否为负数PLPLusN=0判断结果是否为正数或零VSoVerflowSetV=1判断有符号数溢出VCoVerflowClearV=0判断有符号数没有溢出根据有符号数或无符号数来判断(Higher,Lower)(Greater,Less)HIunsignedHIgherC=1ANDZ=0判断无符号数大于LSunsignedLowerorSameC=0ORZ=1判断无符号数小于或等于GEsignedGreaterthanorEqualN=V判断有符号数大于或等于LTsignedLessThanN!=V判断有符号数小于GTsignedGreaterThanZ=0ANDN=V判断有符号数大于LEsignedLessthanorEqualZ=1ORN!=V判断有符号数小于或等于第三章CortexM3指令系统---汇编语言基础---指令的条件码第三章CortexM3指令系统---汇编语言基础---指令编码格式16-bitencodingoftheADDinstruction(寄存器用四位编码,r0-r12都为16位指令)16-bitand32-bitencodingoftheORRSinstructionADDR0,R1=ADDR0,R0,R1;4408=0100010000001000ADDSR0,R1=ADDSR0,R0,R1 ;1840ORRSR1,R2;4311=0100001100010001ORRSR1,R1,R2;4311ORRSR1,R8 ;EA510108----32位指令,因为R8的原因16位表示不了ORRSR0,R1,R2;EA510002=11101010010100010000000000000010演示encode(寄存器用3位编码,r0-r7为16位指令,若用r8-r12就得用32位指令---S需要占位编码)第三章CortexM3指令系统---UnifiedAssemblerLanguage(统一的汇编语言)为了最有力地支持Thumb‐2,引了一个“统一汇编语言(UAL)”语法机制。对于16位指令和32位指令均能实现的一些操作(常见于数据处理操作),有时虽然指令的实际操作数不同,或者对立即数的长度有不同的限制,但是汇编器允许开发者以相同的语法格式书写,并且由汇编器来决定是使用16位指令,还是使用32位指令。以前,Thumb的语法和ARM的语法不同,在有了UAL之后,两者的书写格式就统一了。 ADD R0,R1;传统的Thumb语法 ADD R0,R0,R1;UAL语法允许的等值写法(R0=R0+R1)第三章CortexM3指令系统---UnifiedAssemblerLanguage(统一的汇编语言)在Thumb‐2指令集中,有些操作既可以由16位指令完成,也可以由32位指令完成。例如,R0=R0+1这样的操作,16位的与32位的指令都提供了助记符为“ADD”的指令。在UAL下,你可以让汇编器决定用哪个,也可以手工指定是用16位的还是32位的: ADDS R0,#1;汇编器将为了节省空间而使用16位指令 ADDS.N R0,#1;指定使用16位指令(N=Narrow) ADDS.W R0,#1;指定使用32位指令(W=Wide).W(Wide)后缀指定32位指令。如果没有给出后缀,汇编器会先试着用16位指令以缩小代码体积,如果不行再使用32位指令。因此,使用“.N”其实是多此一举,不过汇编器可能仍然允许这样的语法。再次重申,这是ARM公司汇编器的语法,其它汇编器的可能略有区别,但如果没有给出后缀,汇编器就总是会尽量选择更短的指令。KEILMDK5纯汇编程序工程架构(启动文件startup.s)
STACK_TOP EQU0x20005000 ;宏定义主堆栈指针STACK_TOP
IMPORT mycode AREA RESET, CODE ;代码段的名字RESET(必须为RESET)
DCD STACK_TOP ;向量表第一项:堆栈指针值
DCD start
;向量表第二项:主程序入口地址
ENTRY ;程序的入口start MOVR0,#0 MOVR1,#10 LDRR2,=mycode BLXR2 ;转名称为mycode的用户程序deadloop B deadloop ;在此死循环,空等待
END第三章CortexM3指令系统---汇编语言基础 EXPORT mycode AREA ADDCODE,CODE ;代码段的名字ADDCODE
mycode ADD R0,R0,R1 SUBS R1,#1 BNE mycode BX R14 END用户汇编文件:mycode.s第三章CortexM3指令系统---汇编语言基础演示1-100add纯汇编工程演示1-100addcall纯汇编工程课后作业任务要求:参照
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 烧碱动设备安装施工设计方案
- 园林绿化工程苗木栽植规范方案
- 麻醉循环管理指南
- 三叉神经痛治疗指南(2026版)
- 防洪防汛施工方案
- 防止人才流失的薪酬设计方案
- 设计模式在软件开发中的应用概述
- 新华人寿荣欣世家终身寿险利益条款
- 东鹏饮料跟踪报告:Q1收入增长有望超预期短期“糖税”传闻扰动无碍长期逻辑
- 论大数据时代下企业管理模式创新
- 八年级下册道德与法治第四课《公民义务》核心素养教学设计
- 2026届湖北省襄阳市高二下生物期末调研试题含解析
- 第8章边坡岩体稳定性分析
- 2026年3月山东济南轨道交通集团运营有限公司社会招聘备考题库含答案详解(完整版)
- 2026年初级社工考试题库及答案
- 借用营业执照协议书样板
- 化学贵州贵阳市2026年高三年级2月适应性考试(一)(贵阳一模)(2.27-2.28)
- 2026 年中小学“美育 + 健康”一体化健康学校建设工作方案
- 2025年“才聚齐鲁成就未来”山东健康集团高校毕业生春季校园招聘666人笔试参考题库附带答案详解
- MAG焊培训课件教学课件
- 海南封关数字经济与实体经济融合
评论
0/150
提交评论