微处理器系统结构与嵌入式系统-第八章课件.ppt
文本预览下载声明
伪指令 在ARM汇编指令中,有一类特殊的指令没有对应的指令编码。在汇编时根据情况会解释为相应的ARM、Thumb-2或Thumb-2之前的Thumb指令的组合。这类指令被ARM公司称为“伪指令”。 需要特别注意的是,这几条指令和第9章中介绍的伪指令虽然形式上类似,但作用却大不相同。第9章中介绍的伪指令用于指导汇编器完成相应的汇编工作,符合通常意义上对伪指令的定义,而本节所介绍的这几条伪指令的作用和正常的ARM汇编指令类似,设计这几条伪指令的目的主要是使用一条指令替代多条指令的组合,方便程序员完成汇编程序设计工作,其作用类似于80x86处理器的宏指令。 伪指令 ADR/ADRL 将相对于程序或相对于寄存器的地址载入寄存器中(中等范围,与位置无关)。 指令书写格式:ADR(ADRL)[cond] Rd, label …… MOV R0, #0x18 ; 给R0赋值用于查表 ADR R3, JumpTable ; 装载跳转表的首地址 LDR PC, [R3,R0,LSL#2] ; 查表,将查到的地址赋给PC JumpTable …… 伪指令 LDR 将32位常数或地址载入寄存器(无范围限制,但与位置相关) 指令书写格式:LDR[cond][.W] Rd, =expr/=label_expr expr取值为一个数值常数 如果expr的值位于范围内,则汇编器将会生成一个MOV或MVN指令 如果expr的值不在MOV或MVN指令的范围内,则汇编器会将常数放入文字池中,并会生成一个相对于程序的LDR指令,该指令可从文字池中读取此常数 指令举例 LDR R3,=0xFF0 ; 把立即数0xFF0赋值给R3 LDR R2,=place ; 把标号place对应的地址赋值给R2 伪指令 MOV32 将32位常数或地址载入寄存器(无范围限制,但与位置相关) 仅可用于ARMv6T2及更高版本 指令书写格式:MOV32[cond][.W] Rd, =expr expr可以是symbol(程序区域中的标号)、constant(任何32位常数)或symbol+constant(一个加上32位常数的标号)。 伪指令 UND 生成无体系结构定义的指令 指令书写格式:UND[cond][.W] #expr 执行未定义指令会引发未定义指令异常。程序员可以利用指令异常完成相应的异常处理。 作业 8.2、8.3、8.4、8.5、8.8、8.9 练习 1.以下数据中可以作为ARM数据处理指令中有效的立即数是( )。 A、0xA220 B、0xF000000F C、0xFF1 D、0xFF000001 2. ARM处理器中用于反映其工作状态的是CPSR寄存器中的( )。 A、I位 B、T位 C、F位 D、C位 3.能实现对寄存器R2的值乘8的指令是( )。 A、MOV R2,R2,LSR #3 B、LSR R2,#3 C、LSL R2,#3 D、MOV R2,R2,LSL #3 练习 4.分析如下ARM汇编程序段,并回答相关问题(7分) MOV R0, #0x01 LDR R1, =0xFFFFFFFF CMP R1, R0 ADDSLT R0, R0, R1 请问:第三条指令CMP执行之后,标志位Z=( 0 ),C=( 1 )。 整个程序段执行完成后,N=( 0 ),Z=( 1 ),C=( 1 ),V=( 0 ),R0=( 0 )。 * SWI:0* TST指令:如果指令的结果为0,则Z=1;不等于0,则Z=0 EQ:Z=1;NE:Z=0 算术运算指令 指 令 格 式 说 明 操 作 ADD{cond}{S} Rd,Rn,operand2 加法 Rd←Rn+operand2 SUB{cond}{S} Rd,Rn,operand2 减法 Rd←Rn-operand2 RSB{cond}{S} Rd,Rn,operand2 逆向减法 Rd←operand2-Rn ADC{cond}{S} Rd,Rn,operand2 带进位加法 Rd←Rn+operand2+C SBC{cond}{S} Rd,Rn,operand2 带借位减法 Rd←Rn-operand2-~C RSC{cond}{S} Rd,Rn,operand2 带借位逆向减法 Rd←operand2-Rn-~C 可影响N,Z,C和V标志位。 ADDS R1,R1,#1020 ;R1=R1+1020,并影响标志位 ADD R1,R1,R2,
显示全部