




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统与开发第2章ARM体系结构2024/1/17中国矿业大学——信电学院——张林22024/1/17中国矿业大学——信电学院——张林22024/1/17中国矿业大学——信电学院——张林2本章内容ARM微处理器结构ARM体系结构简介ARM微处理器的寄存器结构ARM微处理器的异常处理ARM的存储器结构ARM微处理器指令系统ARM微处理器的接口ARM微处理器指令系统ARM指令概述1基本寻指方式2ARM指令基本格式3ARM指令集4Thumb指令集52024/1/17中国矿业大学——信电学院——张林4ARM指令集系统概述32位ARM指令集和相关译码机制非常简洁高效ARMV4版中增加了16位Thumb指令集2003年后出现了更高性能的Thumb-2指令集ARM指令集效率高,但是代码密度低Thumb指令集具有较高的代码密度,却仍然保持ARM的大多数性能上的优势,它是ARM指令集的子集所有的ARM指令都可以条件执行,而Thumb指令仅有一条指令条件执行ARM程序和Thumb程序可相互调用,相互之间的状态切换开销几乎为零2024/1/17中国矿业大学——信电学院——张林5ARM指令集系统概述ARM支持3种数据类型字节、半字、字字必须4个字节边界对齐,半字必须2个字节边界对齐新版本增加指令,并保持指令向后兼容Load-store结构load/store:从存储器中读某个值,操作完后再将其放回存储器中只对存放在存放器的数据进行处理对于存储器中的数据,只能使用load/store指令进行存取2024/1/17中国矿业大学——信电学院——张林6ARM汇编语言根本格式要求不同的汇编语言开发环境或汇编器对格式有不同的要求,以下以ADS为例;错误的例子STARTMOVR0,#1ABC:MOVR1,#2MOV R2,#3loop Mov R2,#3 B Loop;正解的例子START MOV R0,#1ABC MOV R1,#2 MOV R2,#3LOOP MOV R2,#3 B LOOPARM微处理器指令系统ARM指令概述1基本寻指方式2ARM指令基本格式3ARM指令集4Thumb指令集5ARM处理器寻址方式寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式ARM处理器具有9种根本寻址方式2024/1/17中国矿业大学——信电学院——张林81寄存器寻址2立即寻址3寄存器移位寻址4寄存器间接寻址5基址寻址6多寄存器寻址7堆栈寻址8块拷贝寻址9相对寻址2024/1/17中国矿业大学——信电学院——张林9SUBR0,R1,R2
;将R1的值减去R2的值,结果保存到R0操作数的值在存放器中,指令中的地址码字段指出的是存放器编号,指令执行时直接取出存放器值来操作。存放器寻址指令举例如下:MOVR1,R2 ;将R2的值存入R10xAA0x55R2R1寻址方式分类——存放器寻址MOVR1,R20xAA0xAA0x55R1R0SUBR0,R1,R20xA0R20x0AARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林10立即寻址指令中的操作码字段后面的地址码局部即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下:SUBS R0,R0,#1;R0减1,结果放入R0,并且影响标志位MOV R0,#0xFF00;将立即数0xFF00装入R0存放器0x55R0MOVR0,#0xFF00程序存储寻址方式分类——立即寻址MOVR0,#0xFF000xFF00从代码中获得数据ARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林11存放器移位寻址是ARM指令集特有的寻址方式。当最后一个操作数是存放器移位方式时,此操作数在与前面操作数结合之前,首先进行移位操作。存放器移位寻址指令举例如下:MOV R0,R2,LSL#3 ;R2的值左移3位,结果放入R0, ;即是R0=R2×8ANDS R1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相 ;“与〞操作,结果放入R10x55R0R20x01寻址方式分类——存放器移位寻址MOVR0,R2,LSL#30x080x08逻辑左移3位ARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林12存放器间接寻址指令中的地址码给出的是一个通用存放器的编号,所需的操作数保存在存放器指定地址的存储单元中,即存放器为操作数的地址指针。存放器间接寻址指令举例如下:LDR R1,[R2] ;将R2指向的存储单元的数据读出 ;保存在R1中SWP R1,R1,[R2] ;将存放器R1的值和R2指定的存储 ;单元的内容交换0x55R0R20x400000000xAA0x40000000寻址方式分类——存放器间接寻址LDRR0,[R2]0xAAARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林13基址寻址就是将基址存放器的内容与指令中给出的偏移量〔<4K〕相加/减,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件存放器访问等。存放器间接寻址是偏移量为0的基址寻址。基址寻址指令举例如下(前索引寻址):LDR R2,[R3,#0x0C] ;读取R3+0x0C地址上的存储单元 ;的内容,放入R2STR R1,[R0,#-4]! ;先R0=R0-4,然后把R1的值存放 ;到保存到R0指定的存储单元寻址方式分类——基址寻址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA将R3+0x0C作为地址装载数据0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]!0xAA将R3+0x0C作为地址装载数据0x4000000CARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林14
基址寻址指令举例如下:LDR R0,[R1],#4;R0=[R1],R1=R1+4 ;后索引基址寻址
;ARM这种自动索引机制不消耗额外的时间LDRR0,[R1,R2];R0=[R1+R2]寻址方式分类——基址寻址ARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林15多存放器寻址一次可传送几个存放器值,允许一条指令传送16个存放器的任何子集或所有存放器。多存放器寻址指令举例如下:LDMIA R1!,{R2-R7,R12};将R1指向的单元中的数据读出到 ;R2~R7、R12中(R1自动加4)STMIA R0!,{R2-R7,R12};将存放器R2~R7、R12的值保 ;存到R0指向的存储;单元中 ;(R0自动加4)0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存储器寻址方式分类——多存放器寻址LDRR1!,{R2-R4,R6}0x010x020x030x040x40000010ARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林16堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出〞。堆栈寻址是隐含的,它使用一个专门的存放器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈寻址方式分类——堆栈寻址ARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林17寻址方式分类——堆栈寻址栈底栈顶栈区SP
堆栈存储区栈顶栈底栈区
SP向下增长向上增长0x123456780x12345678堆栈压栈堆栈压栈ARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林18栈顶SP
栈顶SP
栈底空堆栈栈底满堆栈堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。寻址方式分类——堆栈寻址0x123456780x12345678栈顶SP
0x12345678栈顶SP
压栈压栈ARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林19所以可以组合出四种类型的堆栈方式:满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA、STMFA等;空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等;满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD、STMFD等;空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。寻址方式分类——堆栈寻址ARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林20多存放器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。如:LDMIA R0!,{R1-R7}STMIA R0!,{R1-R7} ;将R1~R7的数据保存到存储器中。 ;存储指针R0在保存第一个值之后增加, ;增长方向为向上增长。STMIB R0!,{R1-R7} ;将R1~R7的数据保存到存储器中。 ;存储指针R0在保存第一个值之前增加, ;增长方向为向上增长。寻址方式分类——块拷贝寻址ARM处理器寻址方式2024/1/17中国矿业大学——信电学院——张林21相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下:
BL SUBR1 ;调用到SUBR1子程序
BEQ LOOP ;条件跳转到LOOP标号处
...LOOP MOV R6,#1 ...SUBR1 ...
寻址方式分类——相对寻址ARM处理器寻址方式ARM微处理器指令系统ARM指令概述1基本寻指方式2ARM指令基本格式3ARM指令集4Thumb指令集52024/1/17中国矿业大学——信电学院——张林2323ARM指令的编码格式一条实际的指令的语法结构〔助记符〕为ADDEQSR0,R1,R231~2827~2524~212019~1615~1211~0cond
opcodeSRnRdop200000010100100010000000000000010该指令的编码格式为:ARM指令的一般格式2024/1/17中国矿业大学——信电学院——张林24ARM指令集指令编码一览2024/1/17中国矿业大学——信电学院——张林25ARM是三地址指令格式,指令的根本格式如下:<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}
其中<>号内的项是必须的,{}号内的项是可选的。各项的说明如下:opcode:指令助记符; cond:执行条件;S:是否影响CPSR存放器的值;Rd:目标存放器; Rn:第1个操作数的存放器;operand2:第2个操作数;指令语法目标寄存器(Rd)第一操作数(Rn)第二操作数(Rm)ADDr3,r1,r2r3r1r2例:ARM根本指令格式2024/1/17中国矿业大学——信电学院——张林26ARM指令的根本格式如下:ARM指令根本格式ARM指令集——第2个操作数<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}
灵活的使用第2个操作数“operand2〞能够提高代码效率。它有如下的形式:#immed_8r——常数表达式;Rm——存放器方式;Rm,shift——存放器移位方式;2024/1/17中国矿业大学——信电学院——张林27ARM指令格式——操作数2024/1/17中国矿业大学——信电学院——张林282024/1/17中国矿业大学——信电学院——张林29ARM指令格式ARM指令集——第2个操作数——立即数 ADDR1,R2,0x1122AABB没有直接对32位立即数直接进行操作的指令如果直接将oprand2的12位立即数,那么只能表示0x0000~0x0FFF 如何实现对更大立即数的处理?ARM只利用12位oprand2中的8位表示立即数#immed_8,其值为0~255#immed_8可循环右移假设干偶数位(ROR0,2,4,…,30,用4比特表示),从而可得到比12位立即数更大的数能编码吗?2024/1/17中国矿业大学——信电学院——张林30ARM指令格式ARM指令集——第2个操作数#immed_8r——常数表达式该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。循环右移10位0x12000100100x00000000000x00000000000x00000000000x00000000000x00000000000x80100000000x04000001008位常数2024/1/17中国矿业大学——信电学院——张林31ARM指令格式ARM指令集——第2个操作数#immed_8r——常数表达式该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。例如:AND R1,R2,#0x0F0000002024/1/17中国矿业大学——信电学院——张林32ARM指令格式ARM指令集——第2个操作数Rm——存放器方式在存放器方式下,操作数即为存放器的数值。例如:SUB R1,R1,R22024/1/17中国矿业大学——信电学院——张林33ARM指令格式ARM指令集——第2个操作数Rm,shift——存放器移位方式将存放器的移位结果作为操作数〔移位操作不消耗额外的时间〕,但Rm值保持不变,移位方法如下:操作码说明操作码说明ASR#n算术右移n位ROR#n循环右移n位LSL#n逻辑左移n位RRX#n带扩展的循环右移n位LSR#n逻辑右移n位TypeRsType为移位的一种类型,Rs为偏移量寄存器,低8位有效。2024/1/17中国矿业大学——信电学院——张林34
桶形移位器操作助记符说明移位操作结果Y值LSL逻辑左移xLSLyx<<y#0-31orRsLSR逻辑右移xLSRy(unsigned)x>>y#1-32orRsASR算术右移xASRy(signed)x>>Y#1-32orRsROR算术右移xRORy(unsigned)x>>y|(x<<32-y)#1-32orRsRRX扩展的循环右移xRRXy(c_flag<<31)|(unsigned)x>>1#1-32orRsARM指令格式2024/1/17中国矿业大学——信电学院——张林35ARM指令格式ARM指令集——第2个操作数LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C2024/1/17中国矿业大学——信电学院——张林36ARM指令格式ARM指令集——第2个操作数Rm,shift——存放器移位方式例如:ADD R1,R1,R1,LSL#3 ;R1=R1+R1<<3SUB R1,R1,R2,LSRR3 ;R1=R1-R2>>R3试写出计算R2=R3*153的程序MOV R2,#0x00ADD R2,R2,R3,LSL#7 ;R2=R2+R3<<7ADD R2,R2,R3,LSL#4 ;R2=R2+R3<<4ADD R2,R2,R3,LSL#3 ;R2=R2+R3<<3ADD R2,R2,R3 ;R2=R2+R32024/1/17中国矿业大学——信电学院——张林37ARM指令的根本格式如下:条件码ARM指令集——条件码<opcode>{<cond>}{S}<Rd>,<Rn>{,<operand2>}
使用条件码“cond〞可以实现高效的逻辑操作(节省跳转和条件语句),提高代码效率2024/1/17中国矿业大学——信电学院——张林38操作码条件助记符标志含义0000EQZ=1相等0001NEZ=0不相等0010CS/HSC=1无符号数大于或等于0011CC/LOC=0无符号数小于0100MIN=1负数0101PLN=0正数或零0110VSV=1溢出0111VCV=0没有溢出1000HIC=1,Z=0无符号数大于1001LSC=0,Z=1无符号数小于或等于1010GEN=V有符号数大于或等于
1011LTN!=V有符号数小于
1100GTZ=0,N=V有符号数大于
1101LEZ=1,N!=V有符号数小于或等于
1110AL任何无条件执行
(指令默认条件)1111NV任何从不执行(不要使用)指令条件码表2024/1/17中国矿业大学——信电学院——张林39ARM指令集——条件码C代码(无符号):c=a-bif(c>0) a--;else b--;对应的汇编代码:SUBS R2,R0,R1;R0〔a〕与R1〔b〕相减SUBHI R0,R0,#1;假设R0>R1,那么R0=R0-1SUBLS R1,R1,#1;假设R0≤R1,那么R1=R1-1例如:所有的ARM指令都可以条件执行,如果指令不标明条件代码,将默认为无条件〔AL〕执行Thumb指令只有B〔跳转〕指令具有条件执行功能条件码ARM微处理器指令系统ARM指令概述1基本寻指方式2ARM指令基本格式3ARM指令集4Thumb指令集52024/1/17中国矿业大学——信电学院——张林411.ARM分支指令2.数据处理指令3.存储器访问指令4.乘法指令5.PSR指令6.软件中断指令7.伪指令ARM指令目录2024/1/17中国矿业大学——信电学院——张林42指令集介绍ARM指令集——分支指令在ARM中有两种方式可以实现程序的跳转,一种是使用分支指令直接跳转,另一种那么是直接向PC存放器赋值实现跳转。分支指令有以下四种:分支指令B;带链接的分支指令BL;带状态切换的分支指令BX。带链接与状态切换的分支指令BLX。2024/1/17中国矿业大学——信电学院——张林43ARM分支指令——指令编码分支指令B/BL指令编码格式指令执行的条件码L区别B指令〔L为0〕和BL指令〔L为1〕24位有符号立即数〔偏移量〕分支指令BX指令编码格式指令执行的条件码Rm目标地址存放器,该存放器装载跳转地址2024/1/17中国矿业大学——信电学院——张林44助记符说明操作条件码位置Blabel分支指令PC←labelB{cond}BLlabel带链接的分支指令LR←PC-4,PC←labelBL{cond}BXRm带状态切换的分支指令PC←Rm,切换处理器状态BX{cond}BLXRm带链接和状态切换的分支指令PC←Rm,PC←label,切换处理器状态BLX{cond}ARM指令——分支指令2024/1/17中国矿业大学——信电学院——张林45ARM指令——分支指令分支指令——B指令,该指令跳转范围限制在当前指令的±32M字节地址内(ARM指令为字对齐,最低2位地址固定为0)。指令格式如下:B{cond}Label应用例如:B WAITA ;跳转到WAITA标号处B 0x1234 ;跳转到相对地址0x1234处助记符说明操作条件码位置Blabel分支指令PC←labelB{cond}BLlabel带链接的分支指令LR←PC-4,PC←labelBL{cond}BXRm带状态切换的分支指令PC←Rm,切换处理器状态BX{cond}BLXRm带链接和状态切换的分支指令PC←Rm,PC←label,切换处理器状态BLX{cond}2024/1/17中国矿业大学——信电学院——张林46BLLabelxxxxxxLabelxxxMOVPC,LRAddr1Addr2xxxxxxLRPCARM指令——分支指令带链接的分支指令——BL指令适用于子程序调用,使用该指令后,下一条指令的地址被拷贝到R14(即LR)连接存放器中,然后跳转到指定地址运行程序。跳转范围限制在当前指令的±32M字节地址内。指令格式如下:BL{cond}LabelAddr1LabelAddr2Addr21.当程序执行到BL跳转指令时,硬件将下一条指令的地址Addr2装入LR存放器,并把跳转地址装入程序计数器〔PC〕2.程序跳转到目标地址Label继续执行,当子程序执行结束后,将LR存放器内容存入PC,返回调用函数继续执行应用例如〔调用子程序〕:BL Label 助记符说明操作条件码位置Blabel分支指令PC←labelB{cond}BLlabel带链接的分支指令LR←PC-4,PC←labelBL{cond}BXRm带状态切换的分支指令PC←Rm,切换处理器状态BX{cond}BLXRm带链接和状态切换的分支指令PC←Rm,PC←label,切换处理器状态BLX{cond}2024/1/17中国矿业大学——信电学院——张林47ARM指令——分支指令带状态切换的分支指令——BX指令,该指令可以根据跳转地址〔Rm〕的最低位来切换处理器状态。其跳转范围限制在当前指令的±32M字节地址内(ARM指令为字对齐,最低2位地址固定为0)。指令格式如下:BX{cond}Rm跳转地址Rm[0]跳转后CPSR标志T位处理器状态00ARM11Thumb助记符说明操作条件码位置Blabel分支指令PC←labelB{cond}BLlabel带链接的分支指令LR←PC-4,PC←labelBL{cond}BXRm带状态切换的分支指令PC←Rm,切换处理器状态BX{cond}BLXRm带链接和状态切换的分支指令PC←Rm,PC←label,切换处理器状态BLX{cond}2024/1/17中国矿业大学——信电学院——张林48ARM指令——分支指令带状态切换的分支指令——BX指令,该指令可以根据跳转地址〔Rm〕的最低位来切换处理器状态。其跳转范围限制在当前指令的±32M字节地址内(ARM指令为字对齐,最低2位地址固定为0)。Rm的位[0]不用作地址的一局部。假设Rm的位[0]为1,那么指令将CPSR中的标志T置位,且将目标地址的代码解释为Thumb代码;假设Rm的位[0]为0,那么Rm的位[1]就不能为1。指令格式如下:BX{cond}Rm应用例如:ADRLR0,ThumbFun+1;将Thumb程序的入口地址加1存入R0BXR0 ;跳转到R0指定的地址, ;并根据R0的最低位来切换处理器状态助记符说明操作条件码位置Blabel分支指令PC←labelB{cond}BLlabel带链接的分支指令LR←PC-4,PC←labelBL{cond}BXRm带状态切换的分支指令PC←Rm,切换处理器状态BX{cond}BLXRm带链接和状态切换的分支指令PC←Rm,PC←label,切换处理器状态BLX{cond}2024/1/17中国矿业大学——信电学院——张林491.ARM分支指令2.数据处理指令3.存储器访问指令4.乘法指令5.PSR指令6.软件中断指令7.伪指令ARM指令目录2024/1/17中国矿业大学——信电学院——张林50ARM数据处理指令数据处理指令大致可分为3类:存放器间数据传送指令;算术逻辑运算指令;比较指令。数据处理指令只能对存放器的内容进行操作,而不能对内存中的数据进行操作。所有ARM数据处理指令均可选择使用S后缀,以使指令影响状态标志。2024/1/17中国矿业大学——信电学院——张林51ARM数据处理指令最大的ARM指令家族,所有指令遵守同一指令格式包含:存放器间数据传送指令算术、逻辑运算指令比较指令ARM是Load/Store结构所有指令只对存放器操作所有指令都将对1到2个存放器操作第一操作数总是存放器:Rn第二操作数总是通过桶形移位器送到ALU2024/1/17中国矿业大学——信电学院——张林52ARM数据处理指令——指令编码指令执行的条件码I用于区别立即数〔I为1〕和存放器移位〔I为0〕opcode数据处理指令操作码第二操作数Rd目标存放器Rn第一操作数存放器S设置条件码,与指令中的S位对应带进位加法ADC0101带进位减法指令SBC0110带进位逆向减法指令RSC0111位测试指令TST1000相等测试指令TEQ1001比较指令CMP1010负数比较指令CMN1011逻辑或操作指令ORR1100数据传送MOV1101位清除指令BIC1110数据非传送MVN1111加法运算指令ADD0100逆向减法指令RSB0011减法运算指令SUB0010逻辑异或操作指令EOR0001逻辑与操作指令AND0000说明指令助记符操作码opcode操作码功能表2024/1/17中国矿业大学——信电学院——张林53助记符说明操作条件码位置MOVRd,operand2数据传送Rd←operand2MOV{cond}{S}MVNRd,operand2数据非传送Rd←(~operand2)MVN{cond}{S}ARM数据处理指令——数据传送注:当后缀S时,这些指令根据结果更新标志N和Z,在计算Operand2时更新标志C,不影响标志V。2024/1/17中国矿业大学——信电学院——张林54助记符说明操作条件码位置MOVRd,operand2数据传送Rd←operand2MOV{cond}{S}MVNRd,operand2数据非传送Rd←(~operand2)MVN{cond}{S}ARM数据处理指令——数据传送
MOV指令将8位图立即数(参看“第2操作数:#immed_8r——常数表达式”)或寄存器传送到目标寄存器(Rd),可用于移位运算等操作。指令格式如下:MOV{cond}{S}Rd,operand2
MOV指令举例如下:
MOV R1,#0xF000000BMOV R0,R1 MOVS R3,R1,LSL#2
MOV PC,LR ;R1=0xF000000B;R0=R1;R3=R1<<2,并影响标志位;PC=LR,子程序返回2024/1/17中国矿业大学——信电学院——张林55助记符说明操作条件码位置MOVRd,operand2数据传送Rd←operand2MOV{cond}{S}MVNRd,operand2数据非传送Rd←(~operand2)MVN{cond}{S}ARM数据处理指令——数据传送
MVN指令将8位图立即数(参看“第2操作数:#immed_8r——常数表达式”)或寄存器(operand2)按位取反后传送到目标寄存器(Rd),因为其具有取反功能,所以可以装载范围更广的立即数。指令格式如下:MVN{cond}{S}Rd,operand2
MVN指令举例如下:
MVN R1,#0xFF00 MVN R1,R2 ;R1=0xFFFF00FF;将R2按位取反,结果存到R12024/1/17中国矿业大学——信电学院——张林56助记符说明操作条件码位置ADDRd,Rn,operand2加法运算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2减法运算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向减法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2带进位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2带进位减法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2带进位逆向减法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM数据处理指令——算术运算注:这些指令影响N,Z,C和V标志位。2024/1/17中国矿业大学——信电学院——张林57助记符说明操作条件码位置ADDRd,Rn,operand2加法运算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2减法运算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向减法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2带进位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2带进位减法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2带进位逆向减法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM数据处理指令——算术运算加法运算指令——ADD指令将operand2的值与Rn的值相加,结果保存到Rd存放器。指令格式如下:ADD{cond}{S}Rd,Rn,operand2应用例如:ADDSR1,R1,#1020ADDR1,R1,R2,LSL#2;R1=R1+1020,并影响标志位
;R1=R1+R2<<2
2024/1/17中国矿业大学——信电学院——张林58助记符说明操作条件码位置ADDRd,Rn,operand2加法运算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2减法运算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向减法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2带进位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2带进位减法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2带进位逆向减法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM数据处理指令——算术运算减法运算指令——SUB指令用存放器Rn减去operand2,结果保存到Rd中。指令格式如下:SUB{cond}{S}Rd,Rn,operand2应用例如:SUBS R0,R0,#240 ;R0=R0-240,并影响标志位SUBS R2,R1,R2 ;R2=R1-R2,并影响标志位2024/1/17中国矿业大学——信电学院——张林59助记符说明操作条件码位置ADDRd,Rn,operand2加法运算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2减法运算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向减法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2带进位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2带进位减法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2带进位逆向减法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM数据处理指令——算术运算逆向减法运算指令——RSB指令将operand2的值减去Rn,结果保存到Rd中。指令格式如下:RSB{cond}{S}Rd,Rn,operand2应用例如:RSBR3,R1,#0xFF00;R3=0xFF00-R1RSBSR1,R2,R2,LSL#2;R1=(R2<<2)-R2=R2×3影响标志位2024/1/17中国矿业大学——信电学院——张林60助记符说明操作条件码位置ADDRd,Rn,operand2加法运算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2减法运算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向减法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2带进位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2带进位减法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2带进位逆向减法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM数据处理指令——算术运算带进位加法指令——ADC将operand2的值与Rn的值相加,再加上CPSR中的C条件标志位,结果保存到Rd存放器。指令格式如下:ADC{cond}{S}Rd,Rn,operand2应用例如〔使用ADC实现64位加法,结果存于R1〔高32位〕、R0中〕:ADDSR0,R0,R2 ;R0等于低32位相加,并影响标志位
ADCR1,R1,R3
;R1等于高32位相加,并加上低位进位2024/1/17中国矿业大学——信电学院——张林61助记符说明操作条件码位置ADDRd,Rn,operand2加法运算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2减法运算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向减法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2带进位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2带进位减法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2带进位逆向减法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM数据处理指令——算术运算带进位减法指令——SBC用存放器Rn减去operand2,再减去CPSR中的C条件标志位的非(即假设C标志清零,那么结果减去1),结果保存到Rd中。指令格式如下:SBC{cond}{S}Rd,Rn,operand2应用例如〔使用SBC实现64位减法,结果存于R1、R0中〕:SUBSR0,R0,R2 ;低32位相减,并影响标志位SBCR1,R1,R3 ;高32位相减,并减去低位借位2024/1/17中国矿业大学——信电学院——张林62助记符说明操作条件码位置ADDRd,Rn,operand2加法运算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2减法运算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向减法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2带进位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2带进位减法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2带进位逆向减法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM数据处理指令——算术运算带进位逆向减法指令——RSC指令用存放器operand2减去Rn,再减去CPSR中的C条件标志位的非,结果保存到Rd中。指令格式如下:RSC{cond}{S}Rd,Rn,operand2应用例如〔使用RSC指令实现求64位数值的负数〕:RSBSR2,R0,#0;R2=-R0RSCR3,R1,#0;R3=-R1-!Carry2024/1/17中国矿业大学——信电学院——张林63助记符说明操作条件码位置ANDRd,Rn,operand2逻辑与操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2逻辑或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2逻辑异或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM数据处理指令——逻辑运算指令注:当后缀S时,这些指令根据结果更新标志N和Z,在计算Operand2时更新标志C,不影响标志V。2024/1/17中国矿业大学——信电学院——张林64助记符说明操作条件码位置ANDRd,Rn,operand2逻辑与操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2逻辑或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2逻辑异或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM数据处理指令——逻辑运算指令逻辑与操作指令——AND指令将operand2的值与存放器Rn的值按位作逻辑“与〞操作,结果保存到Rd中。指令格式如下:AND{cond}{S}Rd,Rn,operand2应用例如:ANDSR0,R0,#0x01 ANDEQR2,R1,R3 ;R0=R0&0x01,取出最低位数据;R2=R1&R32024/1/17中国矿业大学——信电学院——张林65助记符说明操作条件码位置ANDRd,Rn,operand2逻辑与操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2逻辑或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2逻辑异或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM数据处理指令——逻辑运算指令逻辑或操作指令——ORR指令将operand2的值与寄存器Rn的值按位作逻辑“或”操作,结果保存到Rd中。指令格式如下:ORR{cond}{S}Rd,Rn,operand2应用示例:
ORRR0,R0,#0x0F
;将R0的低4位置1MOV R1,R2,LSR#24
ORR R3,R1,R3,LSL#8
;使用ORR指令将R2的高8位;数据移入到R3低8位中2024/1/17中国矿业大学——信电学院——张林66助记符说明操作条件码位置ANDRd,Rn,operand2逻辑与操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2逻辑或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2逻辑异或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM数据处理指令——逻辑运算指令逻辑异或操作指令——EOR指令将operand2的值与存放器Rn的值按位作逻辑“异或〞操作,结果保存到Rd中。指令格式如下:EOR{cond}{S}Rd,Rn,operand2应用例如:EOR R1,R1,#0x0F EORR2,R1,R0 EORS R0,R5,#0x01
;将R1的低4位取反;R2=R1^R0;将R5和0x01进行逻辑异或,;结果保存到R0,并影响标志位
2024/1/17中国矿业大学——信电学院——张林67助记符说明操作条件码位置ANDRd,Rn,operand2逻辑与操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2逻辑或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2逻辑异或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM数据处理指令——逻辑运算指令位去除指令——BIC指令将存放器Rn的值与operand2的值的反码按位作逻辑“与〞操作,结果保存到Rd中。指令格式如下:BIC{cond}{S}Rd,Rn,operand2应用例如:BICR1,R1,#0x0F BIC R1,R2,R3
;将R1的低4位清零,其它位不变;将R3的反码和R2相逻辑“与〞,;结果保存到R1中2024/1/17中国矿业大学——信电学院——张林68助记符说明操作条件码位置CMPRn,operand2比较指令标志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2负数比较指令标志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位测试指令标志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等测试指令标志N、Z、C、V←Rn^operand2TEQ{cond}ARM数据处理指令——比较指令注:这些指令影响N,Z,C和V标志位。2024/1/17中国矿业大学——信电学院——张林69助记符说明操作条件码位置CMPRn,operand2比较指令标志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2负数比较指令标志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位测试指令标志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等测试指令标志N、Z、C、V←Rn^operand2TEQ{cond}ARM数据处理指令——比较指令比较指令——CMP指令将存放器Rn的值减去operand2的值,根据操作的结果更新CPSR中的相应条件标志位(N/Z/C/V),以便后面的指令根据相应的条件标志来判断是否执行。CMP指令与SUBS指令的区别在于CMP指令不保存运算结果。指令格式如下: CMP{cond} Rn,operand2应用例如:CMP R1,#10 ;R1与10比较,设置相关标志位CMPGT R1,R2 ;R1与R2比较,设置相关标志位 ;假设R1>10,那么执行本指令2024/1/17中国矿业大学——信电学院——张林70助记符说明操作条件码位置CMPRn,operand2比较指令标志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2负数比较指令标志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位测试指令标志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等测试指令标志N、Z、C、V←Rn^operand2TEQ{cond}ARM数据处理指令——比较指令负数比较指令——CMN指令使用存放器Rn的值加上operand2的值,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。指令格式如下:CMN{cond} Rn,operand2应用例如:CMN R0,#1 ;R0+1,判断R0是否为1的补码 ;如果是,那么设置Z标志位2024/1/17中国矿业大学——信电学院——张林71助记符说明操作条件码位置CMPRn,operand2比较指令标志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2负数比较指令标志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位测试指令标志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等测试指令标志N、Z、C、V←Rn^operand2TEQ{cond}ARM数据处理指令——比较指令负数比较指令——CMN指令使用存放器Rn的值加上operand2的值,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。指令格式如下:CMN{cond} Rn,operand2注意:CMN指令与ADDS指令的区别在于CMN指令不保存运算结果。CMN指令可用于负数比较,比方CMNR0,#1指令那么表示R0与-1比较,假设R0为-1(即1的补码),那么Z置位;否那么Z复位。2024/1/17中国矿业大学——信电学院——张林72助记符说明操作条件码位置CMPRn,operand2比较指令标志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2负数比较指令标志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位测试指令标志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等测试指令标志N、Z、C、V←Rn^operand2TEQ{cond}ARM数据处理指令——比较指令位测试指令——TST指令将存放器Rn的值与operand2的值按位作逻辑“与〞操作,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。指令格式如下:TST{cond}Rn,operand2应用例如:TST R0,#0x01 ;判断R0的最低位是否为0TST R1,#0x0F ;判断R1的低4位是否为02024/1/17中国矿业大学——信电学院——张林73助记符说明操作条件码位置CMPRn,operand2比较指令标志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2负数比较指令标志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位测试指令标志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等测试指令标志N、Z、C、V←Rn^operand2TEQ{cond}ARM数据处理指令——比较指令位测试指令——TST指令将存放器Rn的值与operand2的值按位作逻辑“与〞操作,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。指令格式如下:TST{cond}Rn,operand2注意:TST指令与ANDS指令的区别在于TST指令不保存运算结果。TST指令通常与EQ、NE条件码配合使用,当所有测试位均为0时,EQ有效〔Z=1〕,而只要有一个测试位不为0,那么NE有效〔Z=0〕。2024/1/17中国矿业大学——信电学院——张林74助记符说明操作条件码位置CMPRn,operand2比较指令标志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2负数比较指令标志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位测试指令标志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等测试指令标志N、Z、C、V←Rn^operand2TEQ{cond}ARM数据处理指令——比较指令相等测试指令——TEQ指令将存放器Rn的值与operand2的值按位作逻辑“异或〞操作,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。指令格式如下:TEQ{cond}Rn,operand2应用例如:TEQ R0,R1 ;比较R0与R1是否相等(不影响V位和C位)2024/1/17中国矿业大学——信电学院——张林75助记符说明操作条件码位置CMPRn,operand2比较指令标志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2负数比较指令标志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位测试指令标志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等测试指令标志N、Z、C、V←Rn^operand2TEQ{cond}ARM数据处理指令——比较指令相等测试指令——TEQ指令将存放器Rn的值与operand2的值按位作逻辑“异或〞操作,根据操作的结果更新CPSR中的相应条件标志位,以便后面的指令根据相应的条件标志来判断是否执行。指令格式如下:TEQ{cond}Rn,operand2注意:TEQ指令与EORS指令的区别在于TEQ指令不保存运算结果。使用TEQ进行相等测试时,常与EQ、NE条件码配合使用。当两个数据相等时,EQ有效;否那么NE有效。2024/1/17中国矿业大学——信电学院——张林76例题12024/1/17中国矿业大学——信电学院——张林77例题12024/1/17中国矿业大学——信电学院——张林781.ARM分支指令2.数据处理指令3.存储器访问指令4.乘法指令5.PSR指令6.软件中断指令7.伪指令ARM指令目录2024/1/17中国矿业大学——信电学院——张林793.3.3Load/Store指令ARM指令集——存储器访问指令ARM处理器是典型的RISC处理器,对存储器的访问只能使用加载和存储指令实现。ARM的RAM存储空间及I/O映射空间统一编址,除对RAM操作以外,对外围IO、程序数据的访问均要通过加载/存储指令进行。存储器访问指令分为单存放器操作指令、多存放器操作指令和交换指令。2024/1/17中国矿业大学——信电学院——张林803.3.3Load/Store指令根本存储/加载指令是字/字节存储/加载指令:LDR/STR/LDRB/STRBARMV4后添加对半字及有符号数的支持存储/加载半字:LDRH/STRH加载有符号半字/字节:LDRSH/LDRSB所有存储/加载均可条件执行,条件码在LDR/STR之后格式:<LDR|STR>{cond}{size}{T}Rd,<address>2024/1/17中国矿业大学——信电学院——张林81助记符说明操作条件码位置LDRRd,addressing加载字数据Rd←[addressing],addressing索引LDR{cond}LDRBRd,addressing加载无符号字节数据Rd←[addressing],addressing索引LDR{cond}BLDRTRd,addressing以用户模式加载字数据Rd←[addressing],addressing索引LDR{cond}TLDRBTRd,addressing以用户模式加载无符号字节数据Rd←[addressing],addressing索引LDR{cond}BTLDRHRd,addressing加载无符号半字数据Rd←[addressing],addressing索引LDR{cond}HLDRSBRd,addressing加载有符号字节数据Rd←[addressing],addressing索引LDR{cond}SBLDRSHRd,addressing加载有符号半字数据
Rd←[addressing],addressing索引
LDR{cond}SHARM存储器访问指令——单存放器加载2024/1/17中国矿业大学——信电学院——张林82助记符说明操作条件码位置STRRd,addressing存储字数据[addressing]←Rd,addressing索引STR{cond}STRBRd,addressing存储字节数据[addressing]←Rd,addressing索引STR{cond}BSTRTRd,addressing以用户模式存储字数据[addressing]←Rd,
addressing索引STR{cond}TSTRBTRd,addressing以用户模式存储字节数据[addressing]←Rd,addressing索引STR{cond}BTSTRHRd,addressing存储半字数据[addressing]←Rd,addressing索引STR{cond}HARM存储器访问指令——单存放器存储LDR/STR指令用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作等。假设使用LDR指令加载数据到PC存放器,那么实现程序跳转功能。所有单存放器加载/存储指令可分为“字和无符号字节加载存储指令〞和“半字和有符号字节加载存储指令。2024/1/17中国矿业大学——信电学院——张林83LDR和STR——字和无符号字节加载/存储指令LDR指令用于从内存中读取单一字或字节数据存入存放器中,STR指令用于将存放器中的单一字或字节数据保存到内存。指令格式如下:ARM存储器访问指令——单存放器存储LDR{cond}{T} Rd,<地址>;将指定地址上的字数据读入RdSTR{cond}{T} Rd,<地址>;将Rd中的字数据存入指定地址
LDR{cond}B{T} Rd,<地址>;将指定地址上的字节数据读入RdSTR{cond}B{T} Rd,<地址>;将Rd中的字节数据存入指定地址其中,T为可选后缀。假设指令有T,那么即使处理器是在特权模式下,存储系统也将访问看成是在用户模式下进行的。T在用户模式下无效,不能与前索引偏移一起使用T。2024/1/17中国矿业大学——信电学院——张林84ARM存储器访问指令——单存放器存储LDR和STR——字和无符号字节加载/存储指令编码指令执行的条件码I为1时,偏移量为12位立即数,为0时,偏移量为存放器移位P表示前/后变址U表示加/减B为1表示字节访问,为0表示字访问W表示回写为指令的寻址方式Rd为源/目标存放器Rn为基址存放器L用于区别加载〔L为1〕或存储〔L为0〕2024/1/17中国矿业大学——信电学院——张林85ARM存储器访问指令——单存放器存储LDR和STR——字和无符号字节加载/存储指令LDR/STR指令寻址非常灵活,它由两局部组成,其中一局部为一个基址存放器,可以为任一个通用存放器;另一局部为一个地址偏移量。地址偏移量有以下3种格式:立即数。立即数可以是一个无符号的数值。这个数据可以加到基址存放器,也可以从基址存放器中减去这个数值。如:LDRR1,[R0,#0x12];R1<-[R0+0x12]存放器。存放器中的数值可以加到基址
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于人工智能的个性化医疗解决方案
- 开发民俗体验的背景意义及必要性
- 掌握英语学习策略
- 老旧厂区改造项目投融资与财务方案
- 2025雇佣合同 合同协议
- 共育明日之星
- 博士探索:科研之路
- 2025年热塑性弹性体项目规划申请报告
- 财务报销流程规范培训
- 石油监事考试题库及答案
- 中国哲学经典著作导读知到章节答案智慧树2023年西安交通大学
- 全科专业住院医师规范化培训全科教学查房规范
- -AAR工具的介绍课件完整版
- 糖尿病足溃疡感染的抗生素治疗
- 药用菊花规范化种植及深加工项目可研报告
- GB/T 22315-2008金属材料弹性模量和泊松比试验方法
- 文字图形创意课件
- (完整版)普外科出科考试试题
- 残疾青少年与扶持课件
- 2022年宁夏宁东开发投资有限公司招聘笔试试题及答案解析
- 冠脉造影术前术后的护理课件
评论
0/150
提交评论