资源预览内容
第1页 / 共70页
第2页 / 共70页
第3页 / 共70页
第4页 / 共70页
第5页 / 共70页
第6页 / 共70页
第7页 / 共70页
第8页 / 共70页
第9页 / 共70页
第10页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
11 1ARM 指令第三章 ARM指令分类及寻址方式2ARM指令集ARM指令格式s , , Opcode 指令助记符,如LDRCond 执行条件S 是否影响CPSR寄存器的值,书写时影响,否则不影响Rd 目标寄存器Rn 第一个操作数的寄存器Operand 2 第二个操作数3lCond:指令的条件码。lOpcode:指令操作码。lS:操作是否影响cpsr。lRn:包含第一个操作数的寄存器编码。lRd:目标寄存器编码。lOperand2:第2操作数。Cond001OpcodeSRnRdOperand20111215161920212425272831784l注意l第二个操作数l在ARM指令中,灵活的使用第二个操作数能提高代码效率,第二 个操作数的形式如下:#immed_8rl常数表达式,该常数必须对应8位位图,即常数是由一个8位的常 数循环移位偶数位得到的。5l合法的常量l0x3FC,0,0XF0000000,200,0XFFl不合法的常量l0x101,0x102,0xff16l常数表达式应用举例lMOV R0,#1;lAND R1,R2,#0X0F;7lRml寄存器方式,在寄存器方式下操作数即为寄存器的数值。l举例:lSUB R1,R1,R2; R1-R2-R1lMOV PC,R0 ; PC=R0,程序跳转到指定地址lLDR R0,R1,-R2 ;读取R1地址上的存储器单元内容并存入 l R0,且R1= R1-R28lRm,shiftl寄存器移位方式,将寄存器的移位结果作为操作数,但Rm值保 存不变,移位方式如下:lASR #n 算术右移n位lLSL #n 逻辑左移n位lLSR #n 逻辑右移n位lROR #n 循环右移n位lRRX #n 带扩展的循环右移n9l应用举例:8lADD R1,R1,R1,LSL #3;R1=R1+R18lSUB R1,R1,R2,LSR #2;R1=R1-R2/410l条件码11l条件码应用举例:l比较两个值的大小,并进行相应的加1处理,C代码lIf(ab) a+;lElse b+;l对应的ARM汇编指令,R0表示a,R1为blCMP R0,R1lADDHI R0,R0,#1lADDLS R1,R1,#112ARM数据处理指令l数据处理指令为3大类:l数据传送指令(如MOV,MVN),l算术逻辑运算指令(如ADD,SUB,AND),l比较指令(如CMP,TST),l数据处理指令只能对寄存器的内容进行操作,所有的ARM数据处理 指令均可选择使用S后缀,以影响状态标志位,比较指令CMP, CMN,TST,TEQ不需要后缀S,它们会直接影响状态标志.1314l数据传送指令lMOVl 数据传送指令,将8位立即数或寄存器传送到目标寄存器,指令格 式如下;lMOVconds Rd,operand2l例lMOV R1,#0X10 ;lMOV R0,R1 ;lMOVS R3,R1,LSL #2;15lMVNl 数据非传送指令,将8位立即数或寄存器按位取反后传送到目标 寄存器,指令格式如下:lMVNcondS Rd, operand2l例lMVN R1,#0xff ;R1=0XFFFFFF00lMVN R1,R2 ;将R2取反,结果存到R116l算术逻辑运算指令lADDl指令格式:lADDcondS Rd,Rn,operand2l例lADDS R1,R1,#1lADD R1, R1, R2lADDS R3,R1,R2, LSL #217lSUBl指令格式:lSUBcondS Rd,Rn,operand2l例lSUBS R0, R0,#1lSUBS R2,R1,R2lSUB R6,R7,#0x1018lADCl带进位加法指令,CPSR中的C条件标志位l指令格式:lADCcondS Rd,Rn,operand2l例lADDS R0,R0,R2lADDC R1,R1,R3 ;(R1,R0)=(R1,R0)+(R3,R2)19lSBC 带进位减法指令l指令格式:lSBCcondS Rd,Rn,operand2l例lSUBS R0,R0,R2lSBC R1,R1,R3 ;(R1,R0)-(R3,R2)20lAND 逻辑与操作指令l指令格式如下:lANDcondS Rd,Rn,operand2l例lANDS R0,R0,#0X01lAND R2,R1,R321lORR 逻辑或操作指令l指令格式如下:lORRcond S Rd,Rn,operand2l例 lORR R0,R0,#0X0F ;lMOV R1,R2,LSR #24lORR R3,R1,R3,LSL #8 ;将R2中的高8位数据送到R3的低 l 8位中22lEOR 逻辑异或操作指令l指令格式如下:lEORcondS Rd,Rn,operand2l例lEOR R0,R0,#0X0F ;将R0中的低4位取反lEOR R2,R1,R3lEORS R0,R5,#0X0123lBIC 位清除操作指令l指令格式如下:lBICcondS Rd,Rn,operand2l例lBIC R0,R0,#0X0F ;将R0的低4位清零,其他位不变lBIC R2,R1,R3 ; 将R3的反码和R1相逻辑与,结果存到 l R224比较指令CMP比较指令,指令用寄存器Rn的值减去voperand2的值,根据操作的 结果更新CPSR中的相应条件标志位,以便后面的指令根据相应 的条件来判断是否执行,指令格式如下:CMPcond Rn,operand2例CMP R1,#10CMP R1,R2注:与SUB的指令区别,在于CMP不保存运算结果25lCMN 相反数比较指令 ,指令使用寄存器Rn的值加上voperand2 的值,根据操作的结果更新CPSR中的相应条件标志位,指令格式 如下:lCMNcond Rn,voperand2l例lCMN R0,#1 ;R0+1,判断R0是否为1的补码,若是Z置位l注:CMN指令与ADDS指令的区别在于CMN指令不保存运算结果26lTST 位测试指令,指令将寄存器Rn的值与voperand2的值按位作 逻辑与操作,根据操作的结构更新CPSR中相应的条件标志位,以 便后面的指令根据相应的条件标志来判断是否执行。指令格式如 下:lTSTcond Rn,operand2l例lTST R0,#0X01 ;判断R0的最低位是否为0lTST R1, #0X0F ; 判断R1的低4位是否为027lTEQ 相等测试指令,指令寄存器Rn的值与voperand2的值按位作 逻辑异或操作,根据操作的结果更新CPSR中的相应条件标志位, 以便后面的指令根据相应的条件来判断是否执行,指令格式如下 :lTEQcond Rn,operand2l例lTST R0,R1 ;判断R0和R1是否相等28乘法指令与乘加指令lARM微处理器支持的乘法指令与乘加指令共有6条,可分为运算结 果为32位和运算结果为64位两类,指令中的所有操作数、目的寄 存器必须为不同的通用寄存器,不能对操作数使用立即数或被移 位的寄存器。 l乘法指令与乘加指令共有以下6条:lMUL32位乘法指令lMLA32位乘加指令lSMULL64位有符号数乘法指令lSMLAL64位有符号数乘加指令lUMULL64位无符号数乘法指令lUMLAL64位无符号数乘加指令29lMUL指令的格式为:MUL条件S目的寄存器,操作数1,操作数2MUL指令完成将操作数1与操作数2的乘法运算,并把结 果放置到目的寄存器中,同时可以根据运算结果设置 CPSR中相应的条件标志位。其中,操作数1和操作数2 均为32位的有符号数或无符号数。lMULR0,R1,R2MULS R0,R1,R230lMLA指令的格式为:MLA条件S 目的寄存器,操作数1,操作数2,操作 数3MLA指令完成将操作数1与操作数2的乘法运算,再将乘 积加上操作数3,并把结果放置到目的寄存器中,同时 可以根据运算结果设置CPSR中相应的条件标志位。其 中,操作数1和操作数2均为32位的有符号数或无符号 数。lMLAR0,R1,R2,R3MLAS R0,R1,R2,R331lSMULL指令的格式为:SMULL条件S目的寄存器Low,目的寄存器低High ,操作数1,操作数2SMULL指令完成将操作数1与操作数2的乘法运算,并把 结果的低32位放置到目的寄存器Low中,结果的高32位 放置到目的寄存器High中,同时可以根据运算结果设 置CPSR中相应的条件标志位。其中,操作数1和操作数 2均为32位的有符号数。lSMULLR0,R1,R2,R332lSMLAL指令的格式为:SMLAL条件S目的寄存器Low,目的寄存器低High,操作数1,操作数2lSMLAL指令完成将操作数1与操作数2的乘法运算,并把结果的低32位同目 的寄存器Low中的值相加后又放置到目的寄存器Low中,结果的高32位同 目的寄存器High中的值相加后又放置到目的寄存器High中,同时可以根 据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均 为32位的有符号数。l对于目的寄存器Low,在指令执行前存放64位加数的低32位,指令执行后 存放结果的低32位。l对于目的寄存器High,在指令执行前存放64位加数的高32位,指令执行 后存放结果的高32位。lSMLALR0,R1,R2,R333lUMULL指令的格式为:UMULL条件S目的寄存器Low,目的寄存器低High ,操作数1,操作数2UMULL指令完成将操作数1与操作数2的乘法运算,并把 结果的低32位放置到目的寄存器Low中,结果的高32位 放置到目的寄存器High中,同时可以根据运算结果设 置CPSR中相应的条件标志位。其中,操作数1和操作数 2均为32位的无符号数。lUMULLR0,R1,R2,R334lUMLAL指令的格式为:UMLAL条件S目的寄存器Low,目的寄存器低High,操作数1,操作数2lUMLAL指令完成将操作数1与操作数2的乘法运算,并把结果的低32位同目 的寄存器Low中的值相加后又放置到目的寄存器Low中,结果的高32位同 目的寄存器High中的值相加后又放置到目的寄存器High中,同时可以根 据运算结果设置CPSR中相应的条件标志位。其中,操作数1和操作数2均 为32位的无符号数。l对于目的寄存器Low,在指令执行前存放64位加数的低32位,指令执行后 存放结果的低32位。l对于目的寄存器High,在指令执行前存放64位加数的高32位,指令执行 后存放结果的高32位。UMLALR0,R1,R2,R335程序状态寄存器访问指令lARM微处理器支持程序状态寄存器访问指令,用于在程 序状态寄存器和通用寄存
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号