[PPT]嵌入式系统概论—基于32位微处理器与实时操作系统第四讲.ppt
《[PPT]嵌入式系统概论—基于32位微处理器与实时操作系统第四讲.ppt》由会员分享,可在线阅读,更多相关《[PPT]嵌入式系统概论—基于32位微处理器与实时操作系统第四讲.ppt(108页珍藏版)》请在三一办公上搜索。
1、嵌入式系统概论基于32位微处理器与实时操作系统第四讲 ARM指令集与编程北京航空航天大学机器人研究所魏洪兴,指令长度,指令集可以是以下任一种32 bits 长(ARM状态)16 bits 长(Thumb 状态)ARM7TDMI 支持3种数据类型字节(8-bit)半字(16-bit)字(32-bit)字必须被排成4个字节边界对齐,半字必须被排列成2个字节边界对齐,ARM 指令集的特点,向后兼容:新版本增加指令,并保持指令向后兼容;Load-store 结构*load/store 从存储器中读某个值,操作完后再将其放回存储器中只对存放在寄存器的数据进行处理;对于存储器中的数据,只能使用load/s
2、tore指令进行存取,指令格式,指令格式3 地址指令格式 在ARM状态中使用例,ARM 指令分类,数据处理指令 使用和改变寄存器的值数据传送指令 把存储器的值拷贝到寄存器中(load)or 把寄存器中的值拷贝到存储器中(store)控制流指令 分支分支和链接,保存返回的地址,以恢复最先的次序软件中断指令程序状态寄存器指令协处理器指令,ARM指令编码格式,说明Cond指令执行的条件编码Opcode指令操作符编码S决定指令的操作是否影响CPSR的值Rd操作目标寄存器编码Rn包含第一操作数的寄存器编码Shifter_operand表示第二操作数,31 28 27 25 24 21 20 19 16
3、15 12 11 8 7 0,ARM指令集,数据处理指令-1,数据处理指令的类别算术操作按位逻辑操作寄存器移位操作比较操作操作数:32-bits 宽;有3种指定操作数的方式来自寄存器第二操作数可以是常数(立即数)移位寄存器操作数结果:32-bits 宽,放在寄存器中长乘法产生64位结果,数据处理指令 2*,数据处理指令-3,数据处理指令-4,算术操作,按位逻辑操作,寄存器移位,比较操作,数据处理指令-MOV,MOV指令是把一个数N送到目标寄存器中,N可以是寄存器,也可以是立即数。MOV指令语法:指令cond S Rd,N例:PRE r0=5,r2=6 MOV r0,r2 POST r0=6,r
4、2=6,桶形移位器,桶形移位器的使用,PRE r0=8,r2=5MOV r0,r2,LSL#2(逻辑左移两位:r22=r5*4)POST r0=20,r2=5,数据处理指令,移位操作在任何数据处理指令中,第二个寄存器操作数可以有应用该操作数的移位操作.逻辑移位LSL:逻辑左移字的最小位空位清零LSR:逻辑右移字的最大位空位清零.,桶形移位器操作,LSL:逻辑左移(Logical Shift Left)。寄存器中字的低端空出的位补0。LSR:逻辑右移(Logical Shift Right)。寄存器中字的高端空出的位补0。ASR:算术右移(Arithmetic Shift Right)。算术移位
5、的对象是带符号数,在移位过程中必须保持操作数的符号不变。若源操作数为正数,则字的高端空出的位补0。若源操作数为负数,则字的高端空出的位补1。ROR:循环右移(Rotate Right)。从字的最低端移出的位填入字的高端空出的位。RRX:扩展为1的循环右移(Rotate Right Extended by 1 place)。操作数右移一位,空位(位31)用原C标志填充。,数据处理指令-7,移位操作(contd)算术移位ASR:算术右移ASL:算术左移循环移位:ROR,RRX,数据处理指令,立即数操作:移位寄存器操作数第二个操作数在与第一个操作数合成之前,是服从于移位操作的.,条件码标志,任何数据
6、处理指令都可以设置条件码(N,Z,V,and C)适用于除比较操作外的所有数据处理指令特殊的请求必须在汇编语言中实现,这种请求是通过把”S”增加到选择代码中指定的算术操作设置所有的标志位(N,Z,C,and V)逻辑和移位操作设置 N and Z当无移位操作时,保存V和C,或根据移位操作设置,ARM指令可以通过添加适当的条件码后缀来达到条件执行的目的。这样可以提高代码密度,减少分支跳转指令数目,提高性能。CMP r3,#0 CMP r3,#0 BEQ skip ADDNE r0,r1,r2 ADD r0,r1,r2 skip默认情况下,数据处理指令不影响程序状态寄存器的条件码标志位,但可以选择
7、通过添加“S”来影响标志位。CMP不需要增加“S”就可改变相应的标志位。loop SUBS r1,r1,#1 BNE loop,条件执行及标志位*,Condition Codes,下表为所有可能的条件码:注意:AL为默认状态,不需要单独指出,条件执行示例,一系列的指令都使用条件指令if(a=0)func(1);CMP r0,#0MOVEQ r0,#1;把func()函数的参数赋给r0 BLEQ func置标志位,再使用不同的条件码if(a=0)x=0;r0:a,r1:x if(a0)x=1;CMP r0,#0MOVEQ r1,#0MOVGT r1,#1使用条件比较指令if(a=4|a=10)x
8、=0;CMP r0,#4CMPNE r0,#10MOVEQ r1,#0,条件执行,所有的ARM指令都可以条件执行指令的执行与否取决于CPSR寄存器的N,Z,C and V标志位所有的Thumb指令都可以解压成全部条件指令Condition Field in instruction0000=EQ-Z set(equal)0001=NE-Z clear(not equal)0010=CS-C set(unsigned higher or same)0011=CC-C clear(unsigned lower)0100=MI-N set(negative)0101=PL-N clear(positi
9、ve or zero)0110=VS-V set(overflow)0111=VC-V clear(no overflow)1000=HI-C set and Z clear(unsigned higher)1001=LS-C clear or Z set(unsigned lower or same)1010=GE-N set and V set,or N clear and V clear(greater or equal)1011=LT-N set and V clear,or N clear and V set(less than)1100=GT-Z clear,and either
10、N set and V set,or N clear and V clear(greater than)1101=LE-Z set,or N set and V clear,or N clear and V set(less than or equal)1110=AL-always1111=NV-never,乘法指令集,在寄存器产生32位值,乘法,例子(乘法,乘法累加器)注意最低 32-bits 置于结果寄存器中,其余被忽略 不支持第二立即操作数结果寄存器与源寄存器必须不同 if S bit is set the V is preserved and the C is rendered mea
11、ningless,数据传送指令-1,单指令传送(LDR,STR)单字(32bit),半字(6 bit)以及字节(8 bit)传送寻址寄存器偏移地址=基址 寄存器偏移立即数偏移地址=基址 立即数常数后变址Post-indexing:modify address after use前变址Pre-indexing:modify address before use回写如果可能,更新基址寄存器,单寄存器传送指令,寻址方式,例子,PRE r0=0 x00000000,r1=0 x00009000,Mem320 x00009000=0 x01010101 Mem320 x00009004=0 x02020
12、202回写型前变址寻址:LDR r0,r1,#0 x4!POST r0=0 x02020202,r1=0 x00009004前变址寻址:LDR r0,r1,#0 x4 POST r0=0 x02020202,r1=0 x00009000后变址寻址:LDR r0,r1,#0 x4POST r0=0 x01010101,r1=0 x00009004,数据传送指令-5,多寄存器数据传送指令-LDM,多数据传送指令(LDM,STM)load(LDM)或 store(STM)当前可访问寄存器的任意子集 使用堆栈:maintaining full or empty stacks which can gro
13、w up or down memory上下文切换:保存或重新存储工作寄存器块拷贝:在主存储器中移动大数据块寻址Pre/Post indexingAuto increment or decrement回写到基址寄存器Write back the base register,多寄存器数据传送指令的要点,多寄存器Load/Store指令会增加中断的延迟,因为ARM不会打断正在执行的指令去响应中断,而必须等到指令执行完成;一般编译器将提供一个选项以控制Load/Store指令可以传送的最大寄存器数目,以限制最大中断延迟。,多寄存器传送指令的寻址模式,注:!决定Rn的值是否随着传送而改变,例子,要求:保
14、存r1r3到内存地址0 x90000 x900c,并且更新基址寄存器r4PRE:r1=0 x00000001,r2=0 x00000002,r3=0 x00000003,r4=0 x9000执行操作:STMIA r4!,r1,r2,r3(执行后增加)POST:mem320 x9000=0 x00000001 mem320 x9004=0 x00000002 mem320 x9008=0 x00000003 r4=0 x900c,多寄存器传送寻址模式,r5,r1,r9,r0,r9,STMIA r9!,r0,r1,r5,1000,16,100c,16,1018,16,r1,r5,r9,STMDA
15、r9!,r0,r1,r5,r0,r9,1000,16,100c,16,1018,16,r5,r9,STMDB r9!,r0,r1,r5,r1,r0,r9,1000,16,100c,16,1018,16,r5,r1,r0,r9,r9,STMIB r9!,r0,r1,r5,1000,16,100c,16,1018,16,例1:将存储器中的连续数据装载到寄存器,PRE mem320 x80018=0 x03,mem320 x80014=0 x02,mem320 x80010=0 x01,r0=0 x00080010,r1=0 x00000000,r2=0 x00000000,r3=0 x000000
16、00执行指令:LDMIA r0!,r1-r3POST r0=0 x0008001c,r1=0 x00000001,r2=0 x00000002,r3=0 x00000003,地址指针 存储地址 数据,r3=0 x00000000r2=0 x00000000r1=0 x00000000,r0=0 x80010,例2:完成一个存储器数据块拷贝,注:r9存放源数据的起始地址 r10存放目标起始地址 r11存放源结束地址 loop LDMIA r9!,r0-r7;装载32字节并更新r9指针 STMIA r10!,r0-r7;存储32字节并更新r10指针 CMP r9,r11;是否到达结束地址 BNE
17、loop;不相等跳转,堆栈操作,ARM使用多寄存器Load/Store指令来完成堆栈操作;使用堆栈时,需要确定堆栈在存储空间中是向上生长(递增的“A”)还是向下生长(递减的“D”);满堆栈(“F”)是指堆栈指针指向堆栈的最后一个已使用的地址或满位置;相反,空堆栈(“E”)是指SP指向堆栈的第一个没有使用的地址或空位置;,堆栈操作寻址方式,堆栈,100,FF,1234,A0BE,8034,ARM堆栈操作通过块传送指令来完成:STMFD(Push)块存储-Full Descending stack STMDBLDMFD(Pop)块装载-Full Descending stack LDMIA,STM
18、FD sp!,r4-r7,lr,例:把寄存器内容放入堆栈,更新sp,PRE 地址 数据,POST 地址 数据,SP,SP,PRE:r1=0 x00000002,r4=0 x00000003,sp=0 x00080014执行指令:STMFD sp!,r1,r4POST:r1=0 x00000002,r4=0 x00000003,sp=0 x0008000c,单数据交换指令-SWAP,单数据交换(SWAP)在寄存器和外部存储器之间交换字节或字读存储器和写存储器是是放在一起的原子指令执行时不能中断当LOCK 信号输出操作时,外部存储器管理单元被锁定,当多线程操作时使程序同步(OS支持)锁定信号量,在
19、寄存器和存储器之间,由一次存储器读和一次存储器写组成的原子操作。完成一个字节或字的交换。语法:SWPB Rd,Rm,Rn可用作信号量不能由armcc编译产生,必须使用汇编器。,Rm,Rd,temp,存储器,Rn,SWP,SWAP指令的用法,PRE mem320 x9000=0 x12345678,r0=0 x00000000,r1=0 x11112222,r2=0 x00009000执行操作:SWP r0,r1,r2POST:mem320 x9000=0 x11112222,r0=0 x12345678,r1=0 x11112222,r2=0 x00009000交换指令多用于实现操作系统中的信
20、号量和互斥操作,该指令有修饰符B,即有字交换和字节交换两种形式;,SWP指令应用示例,Spin MOV r1,=semaphore MOV r2,#1 SWP r3,r2,r1 CMP r3,#1 BEQ spin注:信号量指向的单元是0或1,如果为1,则表示该服务被另一个过程使用,程序继续循环,直至为0,软件中断(SWI),产生一个异常陷阱,跳转到SWI 硬件向量。SWI 处理程序可以检测SWI号,从而决定采取何种操作。通过SWI机制,运行在用户模式下的应用程序,可请求操作系统执行一系列特权操作。语法:SWI,软件中断(SWI)执行的操作,SWI中断处理程序,处理软件中断的代码段称为中断处理
21、程序(SWI Handler),中断处理程序是通过执行指令的地址获取软件中断号,指令地址是从lr计算出来的;SWI号的确定方法:SWI_Number=and NOT(0 xff00000000),28,31,24,27,0,Cond 1 1 1 1,SWI number(ignored by processor),23,条件域,SWI处理程序应用示例,SWI_handler;保存寄存器r0r12和lr STMFD sp!,r0-r12,lr;read the SWI instruction LDR r10,lr,#-4;make off top 8 bits BIC r10,r10,#0 xf
22、f000000;r10-contains the SWI number BL service_routine;return from SWI handler LDMFD sp!,r0-r12,pc,控制和分支指令,控制指令分支和分支连接跳到希望的指令中保存当前的PC并返回(with L bit)分支和交换跳到期望的指令中与指令集交换Rm0=1:Subsequent inst.are THUMB.Rm0=0:Subsequent inst.are ARM.,Branch:B labelBranch with Link:BL subroutine_label处理器把偏移量左移两位,进行符号扩展后再
23、与PC相加 跳转范围:32 Mbyte?如何执行长跳转?,28,31,24,0,Cond 1 0 1 L 偏移量,条件码区域,Link bit0=Branch1=Branch with link,23,25,27,分支指令,控制流指令,分支和链接指令,分支子程序(r14 serves as a link register)嵌套子程序,Full Descending,请求管理程序,管理程序是在特权级操作的程序,它可以实现用户级程序不能实现的任务Example:send text to the displayARM ISA 包括 SWI(SoftWare Interrupt),转移表,根据程序计算
24、值调用一个子程序,Note:slow when the list is long,and all subroutines are equally frequent,程序状态寄存器访问指令,程序状态寄存器访问指令(MRS,MSR)MRS 程序状态寄存器到通用寄存器的数据传送指令MSR 通用寄存器到程序状态寄存器的数据传送指令,PSR 传送指令,MRS和MSR允许传送CPSR/SPSR中的内容到/从一个通用寄存器中。语法:MRS Rd,;Rd=MSR,Rm;=Rm在这里:=CPSR or SPSR_fields=fsxc的任意组合也允许送一个立即数到 psr_fields MSR,#Immedia
25、te用户模式下,所有位均可以被读取,但只有条件标志位(_)可被写。,协处理器指令-1,协处理器一般原理是通过增加核扩展指令集Example:如 MMU&cache.FPU等系统控制器寄存器协处理器专用ARM 控制数据流协处理器只包含数据处理和存贮器传送操作协处理器数据操作(CDP)这类指令是用来告诉协处理器执行某些内部操作无结果返回ARM,ARM并不等待操作完成,协处理器指令,ARM体系支持16个协处理器针对每个协处理器的指令占用 ARM指令集中的固定部分 如果相应的协处理器不存在,将发生一个未定义指令异常。这有三种协处理器指令协处理器数据处理指令 CDP:初始化协处理器数据处理操作协处理器寄
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PPT 嵌入式 系统 概论 基于 32 微处理器 实时 操作系统 第四
链接地址:https://www.31ppt.com/p-5683567.html