版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、六、bootloader 外部中断非向量中断响应过程六、bootloader 中断向量表0 x00000018 六、bootloader IsrIRQ中断服务器程序IsrIRQsub sp,sp,#4 ; 保留 PC stmfd sp!,r8-r9 ;将r8,r9入栈ldr r9,=I_ISPR ;中断寄存器地址=r9ldr r9,r9 ;读出中断寄存器I_ISPR的值,存入R9中mov r8,#0 x00 ;局部标号movs r9,r9,lsr #1 ;LSR 逻辑右移bcs %F1 ; %F 向前搜索局部标号 判断是否把置位Cadd r8,r8,#4;根据I_ISPR的值 b %B0;判断
2、该中断在普通中断向量表中的偏移量,存入R8 ;%B 向后搜索局部标号1 ;局部标号ldr r9,=HandleADC;HandleADC为普通中断向量表的起始地址,add r9,r9,r8;起始地址+偏移地址实际的中断向量地址ldr r9,r9;取出中断向量的值,即服务程序的地址str r9,sp,#8ldmfd sp!,r8-r9,pc;跳转到普通中断服务程序,开始执行 六、bootloader 普通中断向量分配空间外部中断包括的26种普通中断的向量空间分配HandleADC # 4 HandleRTC#4 HandleUTXD1# 4 HandleUTXD0# 4 . . . . . .
3、HandleEINT3 # 4 HandleEINT2 # 4 HandleEINT1 #4 HandleEINT0 # 4 ; 3.2 指令格式 一、ARM汇编语言组成1、汇编语言指令组成机器指令:ARM指令和Thumb指令;伪指令:宏指令:2、指令含义机器指令:能够被处理器直接执行的指令伪指令:源程序汇编期间,由汇编程序执行 的指令(定义段,定义变量等)宏指令: 是一段独立的程序代码,汇编时用宏体替代宏指令3.2 指令格式 二、编码格式1、ARM汇编指令格式(助记符格式)ARM汇编指令: ADDEQS R0,R1,R2; 该指令的编码格式为: 31282725242120191615121
4、10condopcodeSRnRdop2000000101001000100000000000000103.2 指令格式 二、编码格式 S , 其中:是必选项是可选项 操作码,如ADD表示算术加操作指令; 决定指令执行的条件域;S 决定指令执行是否影响CPSR寄存器的值; 目的寄存器; 第一个操作数,为寄存器; 第二个操作数。2、例如 指令 ADDEQS R1,R2,5 二、编码格式 3、条件域几乎所有的ARM指令都可以根据当前程序状态寄存器CPSR中标志位的值,有条件地执行。ARM指令的条件域有16种类型。 二、编码格式 3、条件域二、编码格式 3、条件域三、 寻址方式 9种:立即数寻址寄存
5、器寻址寄存器移位寻址寄存器间接寻址 基址变址寻址相对寻址 多寄存器寻址 块拷贝寻址 堆栈寻址 三、 寻址方式 1、立即数寻址在立即数寻址中,操作数包含在指令中。称此种操作数为立即数。#后接0 x或&表示十六进制数或0b表示二进制数或0d或缺省表示十进制数表示立即数。例: ADD R0,R1,5; R0=R15 MOV R0,0 x55; R0=0 x55其中:操作数5,0 x55就是立即数,立即数在指令中要以“”为前缀,后面跟实际数值。三、 寻址方式 2、寄存器寻址所有操作数都为寄存器例: ADD R0,R1,R2; R0=R1R2 MOV R0,R1; R0=R1三、 寻址方式 3、寄存器移
6、位寻址操作数由寄存器的数值做相应移位而得到。移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。例: ADD R0,R1,R2,ROR 5 ;R0=R1R2循环右移5位 MOV R0,R1,LSL R3 ;R0=R1逻辑左移R3位移位操作在ARM指令集中不作为单独的指令使用,ARM指令集共有5种位移操作。ARM指令集的5种位移操作LSL逻辑左移 :Rx,LSL LSR逻辑右移 : Rx,LSR ASR算术右移 :Rx,ASR ROR循环右移 :Rx,ROR RRX带扩展的循环右移:Rx,RRX 三、 寻址方式 4、寄存器间接寻址寄存器中的值为操作数的物理地址,而实
7、际的操作数存放在此地址存储器中。例: STR R0,R1;R1=R0 LDR R0,R1;R0=R1三、 寻址方式 5、基址变址寻址将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操作数的物理地址。例: LDR R0,R1,5;R0=R1+5 LDR R0,R1,R2;R0=R1+R2三、 寻址方式 6、相对寻址相对寻址同基址变址寻址相似,区别只是将程序计数器PC作为基址寄存器,指令中的标记作为地址偏移量。例: BEQ process1 process1 三、 寻址方式 7、多寄存器寻址在多寄存器寻址方式中,一条指令可实现一组寄存器值的传送。连续的寄存器间用“”连接,否
8、则用“,”分隔。例: LDMIA R0,R1-R5 ;R1=R0 ;R2=R0+4 ;R3=R0+8 ;R4=R0+12 ;R5=R0+16指令中IA表示在执行完一次Load操作后,R0自增4。该指令将以R0为起始地址的5个字数据分别装入R1,R2,R3,R4,R5中。三、 寻址方式 8、块拷贝寻址块拷贝寻址可实现连续地址数据从存储器的某一位置拷贝到另一位置。例: LDR R0,=0 x40003000 LDR R1,=0 x40003200 LDMIA R0,R2-R6; STMIA R1,R2-R6;第一条指令从以R0的值为起始地址的存储单元中取出5个字的数据,第二条指令将取出的数据存入以
9、R1的值为起始地址的存储单元中。实际上是多寄存器寻址的组合。三、 寻址方式 9、堆栈寻址堆栈:按照“后进先出”(“先进后出”)的原则进行数据存储的特定区域。使用专门的寄存器(堆栈指针SP(R13))指向堆栈栈顶。堆栈种类:向上增长:数据进栈,堆栈指针递增.向下增长:数据进栈,堆栈指针递减.满堆栈:堆栈指针指向最后压入堆栈的有效数据。空堆栈:堆栈指针指向下一个要压入数据的地址。三、 寻址方式 9、堆栈寻址满递增FA:数据进栈,地址向上增长,堆栈指针指向含有有效数据的最高地址.满递减FD:数据进栈,地址向下递减,堆栈指针指向含有有效数据的最低地址.空递增EA:数据进栈,地址向上增长,堆栈指针指向含
10、有有效数据的最高地址的下一个字地址(空地址).空递减ED:数据进栈,地址向下增长,堆栈指针指向含有有效数据的最地地址的下一个字地址(空地址).三、 寻址方式 9、堆栈寻址堆栈寻址用于数据栈与寄存器组之间批量数据传输。当数据写入和读出内存的顺序不同时,使用堆栈寻址可以很好的解决这问题。例: STMFD R13!,R0,R1,R2,R3,R4; LDMFD R13!,R0,R1,R2,R3,R4第一条指令,将R0R4中的数据压入堆栈,R13为堆栈指针;第二条指令,将数据出栈,恢复R0R4原先的值。3.3 ARM指令集6种类型(53种主要助记符) :数据处理指令(22种主要助记符)跳转指令(4种主要
11、助记符)Load/Store指令(16种主要助记符)程序状态寄存器指令(2种主要助记符)协处理器指令(5种主要助记符)软件中断指令 (2种主要助记符)一、数据处理指令1MOV 数据传送指令格式:MOVS ,;功能:Rdop1op1可以是寄存器、被移位的寄存器或立即数。例如:MOV R0,5;R0=5MOV R0,R1;R0=R1MOV R0,R1,LSL5;R0=R1左移5位 一、数据处理指令2MVN 数据取反传送指令格式:MVNS ,;功能:将op1表示的值传送到目的寄存器Rd中,但该值在传送前被按位取反, Rd= !op1;op1可以是寄存器、被移位的寄存器或立即数。例如:MVN R0,0
12、;R0=0 xFFFFFFFF 一、数据处理指令3ADD 加法指令格式:ADDS ,;功能:RdRn+op2op2可以是寄存器,被移位的寄存器或立即数。例如:ADD R0,R1,5;R0=R1+5ADD R0,R1,R2;R0=R1+R2ADD R0,R1,R2,LSL5;R0=R1+R2左移5位 一、数据处理指令4ADC 带进位加法指令格式:ADCS ,;功能:Rd=Rn+op2+carryop2可以是寄存器、被移位的寄存器或立即数;carry为进位标志值。该指令用于实现超过32位的数的加法。例如:第一个64位操作数存放在(R3,R2)中;第二个64位操作数存放在(R5,R4)中;64位结果
13、存放在(R1,R0)中。64位的加法可由以下语句实现:ADDS R0,R2,R4;低32位相加,S表示结果影响条件标志位的值ADC R1,R3,R5;高32位相加 一、数据处理指令5SUB 减法指令格式:SUBS ,;功能:RdRn-op2op2可以是寄存器、被移位的寄存器或立即数。例如:SUB R0,R1,5;R0=R1-5SUB R0,R1,R2;R0=R1-R2SUB R0,R1,R2,LSL5;R0=R1-R2左移5位 一、数据处理指令6RSB 反向减法指令格式:RSBS ,;功能:同SUB指令,但倒换了两操作数的前后位置,即Rdop2-Rn。例如:RSB R0,R1,5;R0=5-R
14、1RSB R0,R1,R2;R0=R2-R1RSB R0,R1,R2,LSL5;R0=R2左移5位-R1 一、数据处理指令7SBC 带借位减法指令格式:SBCS ,;功能:RdRn-op2-!carry解释 op2可以是寄存器、被移位的寄存器或立即数。 SUB和SBC生成进位标志的方式不同于常规,如果需要借位则清除进位标志,所以指令要对进位标志进行一个非操作。应用: 超过32位的减法运算例如:两个64位数相减第一个64位操作数存放在(R3,R2)中;第二个64位操作数存放在(R5,R4)中;64位结果存放在(R1,R0)中。64位的减法(第一个操作数减去第二个操作数)可由以下语句实现:程序SU
15、BS R0,R2,R4;低32位相减,S表示结果影响条件标志位的值SBC R1,R3,R5;高32位相减 一、数据处理指令8RSC 带借位的反向减法指令格式:RSCS ,;功能:同SBC指令,但倒换了两操作数的前后位置,即Rdop2-Rn-!carry。例如:前提条件与SBC例子相同,操作数1-操作数2的实现语句需改为:SUBS R0,R2,R4;低32位相减,S表示结果影响寄存器CPSR的值RSC R1,R5,R3;高32位相减 一、数据处理指令9MUL 32位乘法指令格式:MULS ,;功能:RdRnop2该指令根据S标志,决定操作是否影响CPSR的值;其中op2必须为寄存器。Rn和op2
16、的值为32位的有符号数或无符号数。例如:MULS R0,R1,R2;R0R1R2,结果影响寄存器CPSR的N,Z位 一、数据处理指令10MLA 32位乘加指令格式:MLAS ,;功能:RdRnop2+op3op2和op3必须为寄存器。Rn、op2和op3的值为32位的有符号数或无符号数。例如:MLA R0,R1,R2,R3;R0R1R2+R3 11SMULL 64位有符号数乘法指令格式: SMULLS ,;功能:Rdh RdlRnop2Rdh、Rdl和op2均为寄存器。Rn和op2的值为32位的有符号数。例如:SMULL R0,R1,R2,R3;R0R2R3的低32位;R1R2R3的高32位 一、数据处理指令12SMLAL 64位有符号数乘加指令格式: SMLALS ,;功能:Rdh RdlRnop2+Rdh RdlRdh、Rdl和op2均为寄存器。Rn和op2的值为32位的有符号数,Rdh Rdl的值为64位的加数。例如:SMLAL R0,R1,R2,R3;R0R2R3的低32位+R0;R1R2R3的高32位+R1 一、数据处理指令13UM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年房产年度总结模板5篇
- 电子商务个人实习总结3篇
- 销售年底工作感悟总结5篇
- 高三英语教案(15篇)
- 敬老院项目可行性研究报告
- 普外科常用诊疗技术操作常规培训讲学
- 人员合同登记表
- 沙盘合同解除说明
- 赡养协议书文案
- 商务接送服务合同模板
- 浙江省宁波市小升初数学真题重组卷
- 高等教育论文:论数字法学课程实验教学体系的构建
- 家庭成员我照顾(第一课时) 劳动技术七年级下册
- 火电厂信息化建设规划方案
- 技改项目报告
- “中信泰富”事件的反思
- 2024年医学高级职称-皮肤与性病学(医学高级)笔试历年真题荟萃含答案
- 工业机器人系统运维知识竞赛题库及答案(100题)
- 智慧农贸市场解决方案
- 徐州市2023-2024学年九年级上学期期末道德与法治试卷(含答案解析)
- 北师大版二年级上册100以内加减法混合运算大全500题及答案
评论
0/150
提交评论