资源描述
第二讲嵌入式操作系统软件第二讲嵌入式操作系统软件(run jin)成分成分第一页,共100页。1、ARM编程模型编程模型(mxng)ARM体系结构体系结构ARM编程模型编程模型(mxng)ARM指令集指令集2、嵌入式操作系统、嵌入式操作系统实时操作系统实时操作系统微内核和一体化内核微内核和一体化内核商用嵌入式操作系统商用嵌入式操作系统嵌入式系统(xtng)的软件成分第二页,共100页。本节提要(tyo)13 3254 46ARM体系结构体系结构ARM编程模型编程模型(mxng)微内核微内核(ni h)和一体化内核和一体化内核(ni h)ARM指令集指令集实时操作系统实时操作系统商用嵌入式操作系统商用嵌入式操作系统第三页,共100页。ARM体系结构版本(bnbn)-1lVersion 1(obsolete)Version 1(obsolete)l基本基本(jbn)(jbn)数据处理数据处理l字节字节,字以及多字字以及多字 load/store load/storel软件中断软件中断l26 bit 26 bit 地址总线地址总线lVersion 2(obsolete)Version 2(obsolete)lMultiply&Multiply-accumulateMultiply&Multiply-accumulatel支持协处理器支持协处理器l支持线程同步支持线程同步l26 bit 26 bit 地址总线地址总线第四页,共100页。ARM体系结构版本(bnbn)-2lV3V3版本推出版本推出3232位寻址能力位寻址能力,结构扩展变化为结构扩展变化为lT16T16位压缩指令集位压缩指令集lMM增强型乘法器增强型乘法器,产生全产生全6464位结果位结果(32X32(32X3264or32X32+64 64or32X32+64 64)64)lV4V4版本增加了半字版本增加了半字loadload和和storestore指令指令lV5V5版本改进了版本改进了ARMARM和和ThumbThumb之间的交互之间的交互,结构扩展变化为结构扩展变化为:lE-E-增强型增强型DSPDSP指令集指令集,包括全部算法操作和包括全部算法操作和1616位乘法操作位乘法操作lJ-J-支持新的支持新的JAVA,JAVA,提供提供(tgng)(tgng)字节代码执行的硬件和优化软件加速功能字节代码执行的硬件和优化软件加速功能第五页,共100页。ARM 体系结构更新(gngxn)第六页,共100页。体系结构变化(binhu)1*lTHUMBTHUMB指令集指令集(T)(T)lTHUMB THUMB 指令集指令集:32:32位位ARMARM指令集的子集,按指令集的子集,按1616位指令重新编码位指令重新编码l代码尺寸小代码尺寸小(up to 40%compression)(up to 40%compression)l简化简化(jinhu)(jinhu)设计设计第七页,共100页。体系结构变化(binhu)-2l长乘法指令长乘法指令(M)(M)l32x32=64 bit.32x32=64 bit.提供全提供全6464位结果位结果l增强增强(zngqing)DSP(zngqing)DSP指令集指令集(E)(E)l可附加在可附加在ARMARM中的中的DSPDSP指令指令l64 bit 64 bit 转换转换l在在v5v5版本中第一次推出版本中第一次推出l处理器内核的变化处理器内核的变化lD:D:在片调试在片调试.处理器可响应调试暂停请求处理器可响应调试暂停请求lI:Embedded ICE.I:Embedded ICE.支持片上断点调试支持片上断点调试第八页,共100页。体系结构变化(binhu)-3lARM DSP ARM DSP 指令集指令集l对于音频对于音频DSPDSP应用提供高达应用提供高达70%70%的处理速度的处理速度lJazelleJazellel提供比基于软件的提供比基于软件的JAVAJAVA虚拟机(虚拟机(JVMJVM)更高的性能)更高的性能 l与非与非JAVAJAVA加速核相比,提供加速核相比,提供8 8倍倍JAVAJAVA加速性能和降低加速性能和降低80%80%的功耗的功耗l139 139 字节码直接在硬件字节码直接在硬件(yn jin)(yn jin)上执行,上执行,8888个字节码在软件上执行个字节码在软件上执行第九页,共100页。本节提要(tyo)1 13 325 54 46 6ARM体系结构体系结构ARM编程模型编程模型(mxng)微内核微内核(ni h)和一体化内核和一体化内核(ni h)ARM指令集指令集实时操作系统实时操作系统商用嵌入式操作系统商用嵌入式操作系统第十页,共100页。ARM7的指令(zhlng)流水线取指译码执行从存储器取指从存储器取指指令指令(zhlng)(zhlng)所用的寄存器译码所用的寄存器译码从从寄存器组中读寄存器从从寄存器组中读寄存器移位移位(y wi)(y wi)和和ALUALU操作操作把寄存器写回到存储器组把寄存器写回到存储器组每条指令可以分每条指令可以分3 3个阶段执行个阶段执行第十一页,共100页。ARM单周期指令(zhlng)3段流水线操作*取指译码执行取指译码执行取指译码执行t指令(zhlng)123注注:程序计数器程序计数器PCPC指向指向(zh xin)(zh xin)正在取指的指令而不是正在执行的指令正在取指的指令而不是正在执行的指令第十二页,共100页。存储器模式(msh)*l大端模式大端模式l最高位字节最高位字节(z ji)(z ji)保存在最低位地址保存在最低位地址l字由最低位字节字由最低位字节(z ji)(z ji)的字节的字节(z ji)(z ji)地址寻址地址寻址l小端模式小端模式l最低位字节最低位字节(z ji)(z ji)保存在最低位地址保存在最低位地址l字由最低位字节字由最低位字节(z ji)(z ji)的字节的字节(z ji)(z ji)地址寻址地址寻址3124 2316 158 70字地址字地址11109887654432100 低地址低地址 高地址高地址3124 2316 158 70 字地址字地址89101184567401230 低地址低地址 高地址高地址第十三页,共100页。操作(cozu)模式lARM ARM 处理器通常有处理器通常有7 7种操作模式种操作模式:l用户模式用户模式(usr)(usr)l -正常正常(zhngchng)(zhngchng)的程序执行模式的程序执行模式l快速中断模式快速中断模式(fiq)(fiq)-支持高速数据传输或通道处理支持高速数据传输或通道处理l中断模式中断模式(irq)(irq)-用于通用中断处理用于通用中断处理l管理员模式管理员模式(svc)(svc)-操作系统的保护模式操作系统的保护模式.l中止模式中止模式(abt)(abt)-支持虚拟内存和支持虚拟内存和/或内存保护或内存保护l系统模式系统模式(sys)(sys)-支持操作系统的特殊用户模式支持操作系统的特殊用户模式(运行操作系统任务)运行操作系统任务)l未定义模式未定义模式(und)(und)-支持硬件协处理器的软件仿真支持硬件协处理器的软件仿真 l除了用户模式外,其他模式均可视为特权模式除了用户模式外,其他模式均可视为特权模式第十四页,共100页。寄存器-1l37 37 寄存器寄存器l31 31 个个3232位寄存器,包括程序计数器位寄存器,包括程序计数器PCPCl6 6 个状态寄存器个状态寄存器l15 15 通用寄存器通用寄存器(R0 to R14),(R0 to R14),以及以及1 1或者或者2 2个状态寄存器和程序计个状态寄存器和程序计数器在任何时候都中可见的数器在任何时候都中可见的l可见的寄存器取决于处理可见的寄存器取决于处理(chl)(chl)器的模式器的模式l其它寄存器其它寄存器(the banked registers)(the banked registers)的状态在支持的状态在支持IRQ,FIQ,IRQ,FIQ,管管理员理员,中止和未定义模式处理中止和未定义模式处理(chl)(chl)时被切换时被切换第十五页,共100页。寄存器-2lR0 R0 到到 R15 R15 可以直接访问可以直接访问lR0 R0 到到 R14 R14 是通用寄存器是通用寄存器lR13:R13:堆栈指针堆栈指针(sp)(sp)(通常通常)l每种处理器模式都有单独的堆栈,状态切换时每种处理器模式都有单独的堆栈,状态切换时spsp的值被自动保存。的值被自动保存。lR14:R14:链接寄存器链接寄存器(lr)(lr)lR15 R15 包含程序计数器包含程序计数器(PC)(PC)lCPSR CPSR 当前程序状态寄存器,包括代码标志当前程序状态寄存器,包括代码标志(biozh)(biozh)状态和当状态和当前模式位前模式位l5 5个个SPSRs-(SPSRs-(程序状态保存寄存器程序状态保存寄存器)当异常发生时保存当异常发生时保存CPSRCPSR状态状态第十六页,共100页。寄存器组织(zzh)3*注注:表明用户或系统模式使用的正常寄存器已经被异常模表明用户或系统模式使用的正常寄存器已经被异常模式指定式指定(zhdng)的另一个寄存器取代的另一个寄存器取代第十七页,共100页。程序(chngx)状态寄存器-1lARM ARM 核核包包含含当当前前程程序序状状态态寄寄存存器器 (CPSR),(CPSR),加加上上5 5个个程程序序状状态态保保存寄存器存寄存器SPSRSPSR,当异常发生时,用于保存,当异常发生时,用于保存CPSRCPSR的状态的状态 l这些寄存器的功能是这些寄存器的功能是:l包括关于最近执行的包括关于最近执行的ALUALU操作的信息操作的信息l控制中断的使能和禁止控制中断的使能和禁止l设置设置(shzh)(shzh)处理器操作模式处理器操作模式第十八页,共100页。程序(chngx)状态寄存器-2uN,Z,C and V N,Z,C and V 条件码标志条件码标志u可以在处理器中作为数学和逻辑操作改变可以在处理器中作为数学和逻辑操作改变u可以被所有的指令测试可以被所有的指令测试(csh)(csh),以决定指令是否被执行,以决定指令是否被执行uN:Negative.Z:Zero.C:Carry.V:OverflowN:Negative.Z:Zero.C:Carry.V:OverflowuI and F I and F 位是中断禁止位位是中断禁止位uM0,M1,M2,M3 and M4 M0,M1,M2,M3 and M4 位是模式位位是模式位第十九页,共100页。程序状态(zhungti)寄存器PSR的模式位第二十页,共100页。异常(ychng)-1l异常异常内部或外部中断源产生并引起内部或外部中断源产生并引起(ynq)(ynq)处理器处理一个事件,处理器处理一个事件,如外部中断或试图执行未定义指令都会引起如外部中断或试图执行未定义指令都会引起(ynq)(ynq)异常。异常。l处理异常之前必须保留处理器的状态处理异常之前必须保留处理器的状态l异常类型异常类型lFIQ FIQ lIRQ(Interrupt ReQuest)IRQ(Interrupt ReQuest)l未定义指令未定义指令l预取中止预取中止l数据中止数据中止l复位复位l软件中断软件中断Software interruptSoftware interruptl通过软件中断产生通过软件中断产生l进行管理员模式中获得进行管理员模式中获得l通常要求特殊的管理功能,如操作系统支持通常要求特殊的管理功能,如操作系统支持第二十一页,共100页。异常(ychng)-2u未定义的指令陷井未定义的指令陷井u当当ARMARM接接受受到到一一条条不不能能处处理理的的指指令令,ARM,ARM把把这这条条指指令令提提供供(tgng)(tgng)给给任任何何一一个个协协处理器执行处理器执行u如如果果协协处处理理器器可可以以执执行行这这条条指指令令但但此此时时协协处处理理器器忙忙,ARM,ARM将将等等待待直直到到协协处处理理器器准准备好或中断发生备好或中断发生u如果没有协处理器处理这条指令如果没有协处理器处理这条指令,那么那么ARMARM将处理未定义的指令陷井将处理未定义的指令陷井u异常优先级异常优先级u(1)Reset(highest priority)(1)Reset(highest priority)u(2)Data abort(2)Data abortu(3)FIQ(3)FIQu(4)IRQ(4)IRQu(5)Prefetch abort(5)Prefetch abortu(6)(6)未定义指令未定义指令,Software interrupt(,Software interrupt(最低优先级最低优先级)第二十二页,共100页。异常(ychng)-3l只要产生异常就会导致正常的程序流程被临时停止只要产生异常就会导致正常的程序流程被临时停止,例如外围中断。例如外围中断。l在异常被处理前在异常被处理前,当前的处理器状态必须被保存当前的处理器状态必须被保存,以便处理程序完成以便处理程序完成后后,最后的程序可以最后的程序可以(ky)(ky)被恢复。被恢复。第二十三页,共100页。异常(ychng)向量第二十四页,共100页。进入(jnr)异常的操作l在相应的链接寄存器在相应的链接寄存器LR(r14)LR(r14)中保存下一条指令的地址中保存下一条指令的地址l将将CPSRCPSR复制到相应的复制到相应的SPSRSPSR中中l强制使强制使CPSRCPSR模式模式(msh)(msh)位置成对应异常类型的值位置成对应异常类型的值l强制使程序计数器指向相应异常向量强制使程序计数器指向相应异常向量,取下一条指令取下一条指令第二十五页,共100页。例子例子:用户用户(yngh)(yngh)模式到模式到 FIQ FIQ模式模式*spsr_irqcpsrr7r4r5r2r1r0r3r6r15(pc)r14_irqr13_irq r12 r10 r11 r9 r8用户模式用户模式 CPSR 复制到复制到 IRQ 模模式式 SPSRcpsrr15(pc)r14(lr)r13(sp)r12r10r11r9r8r7r4r5r2r1r0r3r6返回一个从用户模式计算的地址返回一个从用户模式计算的地址,PC值存储在值存储在IRQ模式模式Registers in useRegisters in use异常异常用户模式用户模式IRQ 模式模式第二十六页,共100页。退出(tuch)异常的操作l将将LRLR寄存器中的值减去相应的偏移量送到寄存器中的值减去相应的偏移量送到PCPC中中l Linux Linux:SWISWI、UNDUND不变不变lIRQIRQ、FIQFIQ、取址异常减、取址异常减4 4l 数据异常减数据异常减8 8l将将 SPSR SPSR 复制回复制回 CPSR CPSRl清除清除(qngch)(qngch)禁止中断标志禁止中断标志,如果它被设置成禁止如果它被设置成禁止第二十七页,共100页。进入(jnr)/退出异常概述第二十八页,共100页。本节提要(tyo)13 325 54 46ARM体系结构体系结构ARM编程模型编程模型(mxng)微内核微内核(ni h)和一体化内和一体化内核核(ni h)ARM指令集指令集实时操作系统实时操作系统商用嵌入式操作系统商用嵌入式操作系统第二十九页,共100页。指令(zhlng)长度l指令集可以是以下任一种指令集可以是以下任一种(y zhn)(y zhn)l32 bits 32 bits 长长(ARM(ARM状态状态)l16 bits 16 bits 长长(Thumb (Thumb 状态状态)lARMARM(v4v4)支持支持3 3种数据类型种数据类型l字节字节(8-bit)(8-bit)l半字半字(16-bit)(16-bit)l字字(32-bit)(32-bit)l字必须被排成字必须被排成4 4个字节边界对齐个字节边界对齐,半字必须被排列成半字必须被排列成2 2个字节边界对齐个字节边界对齐第三十页,共100页。ARM 指令集lLoad-store Load-store 结构结构*l在通用寄存器中操作在通用寄存器中操作lload/store load/store 从存储器中读某个值从存储器中读某个值,操作完后再将其放回存储器中操作完后再将其放回存储器中l指令分类指令分类l数据数据(shj)(shj)处理指令处理指令 使用和改变寄存器的值使用和改变寄存器的值l数数据据(shj)(shj)传传送送指指令令 把把存存储储器器的的值值拷拷贝贝到到寄寄存存器器中中 (load)(load)or or 把寄存器中的值拷贝到存储器中把寄存器中的值拷贝到存储器中(store)(store)l控制流指令控制流指令 l分支分支l分支和链接分支和链接,保存返回的地址保存返回的地址,以恢复最先的次序以恢复最先的次序l陷入系统代码陷入系统代码第三十一页,共100页。指令(zhlng)格式l指令格式指令格式(g shi)(g shi)l3 3 地址指令格式地址指令格式(g shi)(g shi)l在在ARMARM状态中使用状态中使用l2 2 地址指令格式地址指令格式(g shi)(g shi)l在在 ARM ARM和和 THUMB THUMB 状态下使用状态下使用第三十二页,共100页。AARM指令集编码(bin m)*第三十三页,共100页。数据处理指令(zhlng)-1l数据处理指令的类别数据处理指令的类别l算术操作算术操作l按位逻辑操作按位逻辑操作l寄存器移位操作寄存器移位操作l比较操作比较操作l操作数操作数:32-bits:32-bits 宽宽;3;3种指定操作数的方式种指定操作数的方式l来自寄存器来自寄存器l第二操作数可以是常数第二操作数可以是常数(立即数立即数)l移位寄存器操作数移位寄存器操作数l结果结果:32-bits:32-bits 宽宽,放在寄存器中放在寄存器中l长乘法长乘法(chngf)(chngf)产生产生6464位结果位结果第三十四页,共100页。数据处理指令(zhlng)2*cond0 0operand 2#opcodeSRnRd3128 27 26 25 2421 20 1916 1512 110目的寄存器第一操作寄存器设置操作码算术/逻辑功能8-bit 立即数12511870#rotRm11765430#shiftRm025118765430RsSh010Shimmediate alignmentimmediate shift lengthshift typesecond operand register移位寄存器长度第三十五页,共100页。数据处理指令(zhlng)-3第三十六页,共100页。数据处理指令(zhlng)-4ADD r0,r1,r2r0:=r1+r2ADC r0,r1,r2r0:=r1+r2+CSUB r0,r1,r2r0:=r1-r2SBC r0,r1,r2r0:=r1-r2+C-1RSB r0,r1,r2r0:=r2 r1RSC r0,r1,r2r0:=r2 r1+C-1算术算术(sunsh)操作操作按位逻辑按位逻辑(lu j)操作操作AND r0,r1,r2r0:=r1 and r2ORR r0,r1,r2r0:=r1 or r2EOR r0,r1,r2r0:=r1 xor r2BIC r0,r1,r2r0:=r1 and(not)r2寄存器移位寄存器移位MOV r0,r2r0:=r2MVN r0,r2r0:=not r2比较操作比较操作CMP r1,r2set cc on r1-r2CMN r1,r2set cc on r1+r2TST r1,r2set cc on r1 and r2TEQ r1,r2set cc on r1 xor r2第三十七页,共100页。数据处理指令(zhlng)-5l立即数操作立即数操作(cozu):(cozu):立即数操作立即数操作(cozu)=(0-255)x 22n,0=n 255)x 22n,0=n=12l移位寄存器操作移位寄存器操作(cozu)(cozu)数数l第二个操作第二个操作(cozu)(cozu)数在与第一个操作数在与第一个操作(cozu)(cozu)数合成之前数合成之前,是服从于移位操作是服从于移位操作(cozu)(cozu)的的.ADD r3,r2,r1,LSL#3r3:=r2+8 x r1ADD r5,r5,r3,LSL r2r5:=r5+2r2 x r3ADD r3,r3,#3r3:=r3+3AND r8,r7,#&ffr8:=r77:0,&for hex第三十八页,共100页。数据处理指令(zhlng)-6l移位操作移位操作l在任何在任何(rnh)(rnh)数据处理指令中数据处理指令中,第二个寄存器操作数第二个寄存器操作数可以有应用该操作数的移位操作可以有应用该操作数的移位操作.l逻辑移位逻辑移位lLSL:LSL:逻辑左移逻辑左移l字的最小位空位清零字的最小位空位清零lLSR:LSR:逻辑右移字的最大位空位清零逻辑右移字的最大位空位清零.第三十九页,共100页。数据处理指令(zhlng)-7u算术移位算术移位(y wi)(y wi)uASR:=LSRASR:=LSRuASL:ASL:算术左移算术左移u循环移位循环移位(y wi):ROR,RRX(y wi):ROR,RRX第四十页,共100页。条件(tiojin)码标志l任何数据处理指令都可以设置条件码任何数据处理指令都可以设置条件码(N,Z,V,and C)(N,Z,V,and C)l适用于除比较适用于除比较(bjio)(bjio)操作外的所有数据处理指令操作外的所有数据处理指令l特殊的请求必须在汇编语言中实现特殊的请求必须在汇编语言中实现,这种请求是通过把这种请求是通过把”S”S”增加到增加到选择代码中指定的选择代码中指定的l算术操作设置所有的标志位算术操作设置所有的标志位(N,Z,C,and V)(N,Z,C,and V)l逻辑和移位操作设置逻辑和移位操作设置 N and Z N and ZADDS r2,r2,r0;carry out to C第四十一页,共100页。乘法(chngf)指令集l在寄存器在寄存器产产生生(chnshng)32位位值值第四十二页,共100页。乘法(chngf)l例子例子(乘法乘法,乘法累加器乘法累加器)l注意注意l最低最低 32-bits 32-bits 置于结果寄存器中置于结果寄存器中,其余被忽略其余被忽略 l不支持第二不支持第二(d r)(d r)立即操作数立即操作数l结果寄存器与源寄存器必须不同结果寄存器与源寄存器必须不同 lif S bit is set the V is preserved and if S bit is set the V is preserved and the C is rendered meaninglessthe C is rendered meaninglessMUL r4,r3,r2r4:=r3 x r2MLA r4,r3,r2,r1r4:=r3 x r2 +r1 第四十三页,共100页。数据(shj)传送指令-1l单数据传送单数据传送(LDR,STR)(LDR,STR)l单字单字(32bit),(32bit),半字半字(6 bit)(6 bit)以及字节以及字节(8 bit)(8 bit)传送传送l寻址寻址l寄存器偏移寄存器偏移l地址地址=基址基址(j zh)(j zh)寄存器偏移寄存器偏移l立即数偏移立即数偏移l地址地址=基址基址(j zh)(j zh)立即数常数立即数常数l后变址后变址Post-indexing:modify address after usePost-indexing:modify address after usel前变址前变址Pre-indexing:modify address before usePre-indexing:modify address before usel回写回写l如果可能如果可能,更新基址更新基址(j zh)(j zh)寄存器寄存器第四十四页,共100页。数据(shj)传送指令-2l多数据传送指令多数据传送指令(LDM,STM)(LDM,STM)lload(LDM)load(LDM)或或 store(STM)store(STM)当前可见寄存器的任意子集当前可见寄存器的任意子集l 使用使用l堆栈堆栈:maintaining full or empty stacks which can grow up:maintaining full or empty stacks which can grow up or down memoryor down memoryl上下文切换上下文切换:保存或重新保存或重新(chngxn)(chngxn)存储工作寄存器存储工作寄存器l块拷贝块拷贝:在主存储器中移动大数据块在主存储器中移动大数据块l寻址寻址lPre/Post indexingPre/Post indexinglAuto increment or decrementAuto increment or decrementl回写到基址寄存器回写到基址寄存器Write back the base registerWrite back the base register第四十五页,共100页。数据传送(chun sn)指令-3l单数据交换单数据交换(SWAP)(SWAP)l在寄存器和外部存储器之间交换字节或字在寄存器和外部存储器之间交换字节或字l读存储器和写存储器是是放在一起的读存储器和写存储器是是放在一起的l原子指令原子指令l执行时不能中断执行时不能中断l当当LOCK LOCK 信号输出操作信号输出操作(cozu)(cozu)时时,外部存储器管理单元被锁定外部存储器管理单元被锁定,当当l多线程操作多线程操作(cozu)(cozu)时使程序同步时使程序同步(OS(OS支持支持)l锁定锁定l信号量信号量第四十六页,共100页。数据传送(chun sn)指令-4LDR r0,r1r0:=mem32r1STR r0,r1mem32r1:=r0Note:r1 keeps a word address(2 LSBs are 0)LDR r0,r1,#4r0:=mem32r1+4寄存器间接(jin ji)寻址基址(j zh)+偏移量寻址(offset of up to 4Kbytes)LDR r0,r1,#4!r0:=mem32r1+4r1:=r1+4自动变址寻址LDR r0,r1,#4r0:=mem32r1r1:=r1+4后变址寻址LDRB r0,r1r0:=mem8r1Note:no restrictions for r1单单寄存器寄存器 load and store第四十七页,共100页。数据(shj)传送指令-5COPY:ADR r1,TABLE1;r1 points to TABLE1ADR r2,TABLE2;r2 points to TABLE2LOOP:LDR r0,r1STR r0,r2ADD r1,r1,#4ADD r2,r2,#4.TABLE1:.TABLE2:.COPY:ADR r1,TABLE1;r1 points to TABLE1ADR r2,TABLE2;r2 points to TABLE2LOOP:LDR r0,r1,#4STR r0,r2,#4.TABLE1:.TABLE2:.第四十八页,共100页。数据传送(chun sn)指令-6l块块拷拷贝贝l数数据被存据被存贮贮在基本寄存器的上面地址或下在基本寄存器的上面地址或下面地址面地址 l地址增加或地址增加或减减少是在存少是在存贮贮第一第一个个值值之前或之前或之后之后(zhhu)开开始的始的LDMIA r1,r0,r2,r5r0:=mem32r1r2:=mem32r1+4r5:=mem32r1+8Note:寄存器的部分或全部都可以(ky)用单指令传送Note:在表中的寄存器顺序并不重要Note:在表中包括 r15 i将造成控制流的改变多寄存器多寄存器数数据据传传送送 Increment After第四十九页,共100页。多寄存器传送(chun sn)寻址模式r5r1r9r0r9STMIA r9!,r0,r1,r5100016100c16101816r1r5r9STMDA r9!,r0,r1,r5r0r9100016100c16101816r5r9STMDB r9!,r0,r1,r5r1r0r9100016100c16101816r5r1r0r9r9STMIB r9!,r0,r1,r5100016100c16101816第五十页,共100页。条件(tiojin)执行l所有的所有的ARM指令都可以指令都可以条条件件执执行行(zhxng)l指令的指令的执执行行(zhxng)与与否取否取决决于于CPSR寄存器的寄存器的N,Z,C and V标标志位志位l所有的所有的Thumb指令都可以解指令都可以解压压成全部成全部条条件指令件指令lCondition Field in instructionl0000=EQ-Z set(equal)l0001=NE-Z clear(not equal)l0010=CS-C set(unsigned higher or same)l0011=CC-C clear(unsigned lower)l0100=MI-N set(negative)l0101=PL-N clear(positive or zero)l0110=VS-V set(overflow)l0111=VC-V clear(no overflow)l1000=HI-C set and Z clear(unsigned higher)l1001=LS-C clear or Z set(unsigned lower or same)l1010=GE-N set and V set,or N clear and V clear(greater or equal)l1011=LT-N set and V clear,or N clear and V set(less than)l1100=GT-Z clear,and either N set and V set,or N clear and V clear(greater than)l1101=LE-Z set,or N set and V clear,or N clear and V set(less than or equal)l1110=AL-alwaysl1111=NV-never第五十一页,共100页。控制流指令(zhlng)第五十二页,共100页。条件(tiojin)执行l条件执行避免使用分支条件执行避免使用分支(fnzh)(fnzh)指令指令lExampleExampleCMP r0,#5;BEQ BYPASS;if(r0!=5)ADD r1,r1,r0;r1:=r1+r0-r2SUB r1,r1,r2;BYPASS:.CMP r0,#5;ADDNE r1,r1,r0;SUBNE r1,r1,r2;.使用条件(tiojin)执行Note:add 2 letter condition after the 3-letter opcode;if(a=b)&(c=d)e+;CMP r0,r1CMPEQ r2,r3ADDEQ r4,r4,#1第五十三页,共100页。控制和分支(fnzh)指令l控制指令控制指令l分支和分支连接分支和分支连接l跳到希望的指令中跳到希望的指令中l保存当前的保存当前的PCPC并返回并返回(with L bit)(with L bit)l分支和交换分支和交换(jiohun)(jiohun)l跳到期望的指令中与指令集交换跳到期望的指令中与指令集交换(jiohun)(jiohun)lRm0=1:Subsequent inst.are THUMB.Rm0=1:Subsequent inst.are THUMB.lRm0=0:Subsequent inst.are ARM.Rm0=0:Subsequent inst.are ARM.condRm0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 03128276 54301L第五十四页,共100页。分支(fnzh)和链接指令l分支分支(fnzh)(fnzh)子程序子程序(r14 serves as a link register)(r14 serves as a link register)l嵌套子程序嵌套子程序BL SUBR;branch to SUBR.;return hereSUBR:.;SUBR entry pointMOV pc,r14;returnBL SUB1.SUB1:;save work and link registerSTMFD r13!,r0-r2,r14 BL SUB2.LDMFD r13!,r0-r2,pcSUB2:.MOV pc,r14;copy r14 into r15Full Descending第五十五页,共100页。请求(qngqi)管理程序l管理程序是在特权级操作管理程序是在特权级操作(cozu)(cozu)的程序的程序,它可以实现用户级程序它可以实现用户级程序不能实现的任务不能实现的任务lExample:send text to the displayExample:send text to the displaylARM ISA ARM ISA 包括包括 SWI(SoftWare Interrupt)SWI(SoftWare Interrupt);output r07:0SWI SWI_WriteC;return from a user program back to monitorSWI SWI_Exit第五十六页,共100页。转移(zhuny)表l根据程序根据程序(chngx)(chngx)计算值调用一个子程序计算值调用一个子程序(chngx)(chngx)BL JTAB.JTAB:CMP r0,#0BEQ SUB0CMP r0,#1BEQ SUB1CMP r0,#2BEQ SUB2Note:slow when the list is long,and all subroutines are equally frequentBL JTAB.JTAB:ADR r1,SUBTABCMP r0,#SUBMAX;overrun?LDRLS pc,r1,r0,LSL#2B ERRORSUBTAB:DCD SUB0DCD SUB1DCD SUB2.第五十七页,共100页。AREA HelloW,CODE,READONLY ;声明代码区SWI_WriteC EQU&0 ;输出r0中的字符SWI_Exit EQU&11 ;程序结束 ENTRY ;代码入口START ADR r1,TEXT ;r1-“Hello World”LOOP LDRB r0,r1,#1 ;读取下一字节 CMP r0,#0 ;检查(jinch)文本终点 SWINE SWI_WriteC ;若非终点,则打印 BNE LOOP ;并返回LOOP SWI SWI_Exit ;执行结束TEXT =“Hello World”,&0a,&0d,0 END ;程序结束Example:Hello ARM World!第五十八页,共100页。PSR 指令(zhlng)lPSR PSR 指令指令(MRS,MSR)(MRS,MSR)lThe The MRS MRS and and MSR MSR 指指令令是是从从数数据据处处理理指指令令子子集集(z(z j)j)形形成成的的.instructions.instructions are are formed formed from from
展开阅读全文