第4节 Thumb指令集
推荐给好友
打印
加入收藏
更新于2008-08-07 23:32:36

Thumb指令集
Thumb指令集可以看做ARM指令集的一个子集,用于支持存储系统数据总线为16位的应用系统。
Thumb指令长度为16位,这样,与32位的ARM指令集相比,有效地节省了系统的存储空间。
但Thumb指令集中的数据处理指令的操作数仍然是32位的,指令寻址地址也是32位的。
Thumb指令集有4大类:数据处理指令、跳转指令、Load/Store指令、软件中断指令。

Thumb指令集特点
与ARM指令集相比,Thumb指令集特点如下:
采用16位二进制编码,而ARM指令是32位的;
由于是压缩的指令,在ARM指令流水线中实现Thumb指令时,先动态解压缩,然后作为标准的ARM指令来执行;
如何区分指令取决于CPSR中的第五位;
由ARM模式进入Thumb模式时,是显式的进入,而从Thumb模式进入ARM模式时可以是显式的也可以是隐式的。显式的进入是指使用转移交换指令。
Thumb指令集中没有:乘加指令、64位乘法指令、协处理器指令、数据交换指令、程序状态寄存器指令,而且指令的第二操作数受到限制,除了跳转指令B有条件执行功能外,其他指令均为无条件执行。
大多数Thumb数据处理指令采用2地址格式。

数据处理指令1

数据处理指令2

跳转指令

Load/Store指令 1

 Load/Store指令 2

软件中断指令

位操作指令应用
;将R2中高8位数据传送到R3的低8位中。
MOV R0, R2, LSR #24
ORR R3, R0, R3, LSL #8

用移位实现乘法应用
MOV R0, R0, LSL #n
; R0=R0<<n; R0=R0*(2**n)
ADD R0, R0, R0, LSL #n
; R0=R0+R0*(2**n)
RSB R0, R0, R0, LSL #n
; R0= R0*(2**n) - R0

64位数据加减运算应用
;假设,R1R0存放一个64位数据,R3R2存放另一个64位数据。
64位数据加法运算
ADDS R0, R0, R2
ADC R1, R1, R3
64位数据减法运算
SUBS R0, R0, R2
SBC R1, R1, R3

数据变换应用
;已知:R0=A B C D, 转换目标:R0= D C B A
程序一:
EOR R1, R0, R0, ROR #16 ;R1=A^C, B^D, C^A, D^B
BIC R1, R1, #0xFF0000 ;R1=A^C, 0, C^A, D^B位清除
MOV R0, R0, ROR #8 ;R0=D, A, B, C
EOR R0, R0, R1, LSR #8 ;R0=D, C, B, A
程序二:
MOV R2, #0xFF ;R2=0xFF
ORR R2, R2, #0xFF0000 ;R2=0x00FF00FF
AND R1, R2, R0 ;R1=0 B 0 D
AND R0, R2, R0, ROR #24 ;R0=0 C 0 A
ORR R0, R0, R1, ROR #8 ;R0=D C B A

条件执行举例
求最大公约数
C语言代码:
int gcd (int a, int b)
{ while (a != b)
if ( a > b )
a = a – b;
else
b = b – a;
return a;
}
对应的ARM代码段:R0=a, R1=b
gcd
CMP R0, R1 ;比较a和b大小
SUBGT R0, R0, R1 ;if (a>b) a=a-b (if a= = b do nothing)
SUBLT R1, R1, R0 ;if (b>a) b=b-a (if a= = b do nothing)
BNE gcd ;if (a!=b) then-跳转到gcd处继续执行
MOV PC, LR ;子程序结束,返回

条件判断语句
C语言代码:
if ( a = = 0 || b = = 1)
c = d + e ;
对应的ARM代码段:
CMP R0, #0 ;判断R0是否等于0
CMPNE R1, #1
;如果R0不等于0,判断R1是否等于1
ADDEQ R2, R3, R4
;R0=0或R1=1时,R2=R3+R4

循环语句
MOV R0, #loopcount
Loop
……
SUBS R0, R0, #1
BNE loop

复习题
1. 编写1+2+3+…+100的汇编程序。
2. 如何实现128位数的减法,举例说明。
3. 将存储器中起始地址M1处的4个字数据移动到地址M2处。
4. 参考CPSR寄存器中各标志位的含义,使处理器工作于系统模式。
5. 用跳转指令实现两段程序间的来回切换。

课堂作业
写出下面英文缩写的英文原文及中文意思:MPU,RTOS,SoC,MMU,IP
MPU: Microprocess Unit
RTOS: Real Time Operation Systom
Soc: System on Chip
MMU: Memory Management Unit
IP: Intellectual Property
ARM系统对字、半字、字节的存取是如何实现的?
使用专门的针对字、半字、字节的Load/Store指令
字:LDR/STR
无符号半字: LDRH/STRH
有符号半字: LDRSH/STRSH
无符号字节: LDRB/STRB
有符号字节: LDRSB/STRSB
如何从ARM指令集跳转到Thumb指令集?
使用跳转指令BX/BLX
格式:BX/BLX Rm 当Rm[0]为1时,从ARM态跳转到Thumb态
ARM处理器工作模式有几种?各种工作模式下分别有什么特点?
ARM微处理器支持7种工作模式:用户模式、系统模式、快速中断模式、外部中断模式、管理模式、中止模式、未定义指令模式。特点
ARM异常中断有几种?他们的优先级如何?
如何从异常中断程序中返回?
中断发生时,系统会将返回地址存放到链接寄存器R14中,在中断程序执行结束后,将R14的值复制给PC就可实现返回。

1.写出完成下面表达式的ARM指令
r0 = 16
Mov ro, #16
b ) r1 = r0 * 4
Mul r1, r0, 4
c) r0 = r1 / 16 ( r1 signed 2's comp.)
Mov r0, r1, LSR 4
d) r1 = r2 * 7
rsb r1,r2,r2,lsl 8
2. 下面指令完成什么功能?
ADDS r0, r1, r1, LSL #2
R0=r1*5
b) RSB r2, r1, #0
R2=-r1
3. 下面的语句序列完成什么功能?R0=127r1
ADD r0, r1, r1, LSL #1
SUB r0, r0, r1, LSL #4
ADD r0, r0, r1, LSL #7

<<上一节 下一节>>

相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.