Thumb指令集

发布时间:2023-11-28
thumb指令集可以看做arm指令集的一个子集,其用于支持存储系统数据总线为16位的应用系统。thumb指令长度为16位,这样,与32位的arm指令集相比,有效地节省了系统的存储空间。但thumb指令集中的数据处理指令的操作数仍然是32位的,指令寻址地址也是32位的。
在实际应用中,若对系统的性能有较高要求,则选arm指令集和32位的memory;若对系统的功耗有较高要求时,则选thumb指令集和16位的memory;一般将两者混合使用,根据系统不同部分的不同需求,选用合适的指令,发挥两者的优势。
thumb指令集由数据处理指令、跳转指令、load/store指令和软件中断指令4大类构成。
数据处理指令 格 式 功 能
mov rd,imm_8; rd=imm_8;rd为r0~r7,imm_8为8位立即数
mov rd,rn; rd=rn;rd、rn为r0~r15
mvn rd,rn; rd=~rn;rd、rn为r0~r7
neg rd,rn; rd=-rn;rd、rn为r0~r7
add rd,rn,imm; rd=rn+imm;rd为r0~r7,rn为r0~r7或pc或sp;
rn为pc或sp时,imm为10位立即数;
否则,imm为3位立即数
add rd,rn,rm; rd=rn+rm;rd、rn、rm为r0~r7
add rd,imm; rd=rd+imm;rd为r0~r7或sp
rd为sp时,imm为-508~+508间的4整数倍的数
否则,imm为8位立即数
add rd,rn; rd=rd+rn;rd、rn为r0~r15
adc rd,rn; rd=rd+rn+carry;rd、rn为r0~r7,carry为进位标志值
sub rd,rn,imm_3; rd=rn-imm_3;rd、rn为r0~r7,imm_3为3位立即数
sub rd,rn,rm; rd=rn-rm;rd、rn、rm为r0~r7,
sub rd,imm; rd=rd-imm;rd为r0~r7或sp
rd为sp时,imm为-508~+508间的4整数倍的数
否则,imm为8位立即数
sbc rd,rn; rd=rd-rn-!carry;rd、rn为r0~r7,carry为进位标志值
mul rd,rn; rd=rd×rn;rd、rn为r0~r7
and rd,rn; rd=rd&rn;rd、rn为r0~r7
orr rd,rn; rd=rd|rn;rd、rn为r0~r7
eor rd,rn; rd=rd^rn;rd、rn为r0~r7
bic rd,rn; rd=rd&(~rn);rd、rn为r0~r7
asr rd,rn; rd=rd算术右移rn位;rd、rn为r0~r7
asr rd,rn,imm_5; rd=rn算术右移imm_5位;rd、rn为r0~r7,
imm_5为1~32间的数值
lsl rd,rn; rd=rd逻辑左移rn位;rd、rn为r0~r7
lsl rd,rn,imm_5; rd=rn逻辑左移imm_5位;rd、rn为r0~r7
lsr rd,rn; rd=rd逻辑右移rn位;rd、rn为r0~r7
lsr rd,rn,imm_5; rd=rn逻辑右移imm_5位;rd、rn为r0~r7
ror rd,rn; rd=rd循环右移rn位;rd、rn为r0~r7
cmp rn,rm; 根据rn-rm的值,修改cpsr的状态标志位;
rn、rm为r0~r7
cmp rn,imm_8; 根据rn-imm_8的值,修改cpsr的状态标志位;
rn为r0~r7
cmn rn,rm; 根据rn+rm的值,修改cpsr的状态标志位;
rn、rm为r0~r7
tst rn,rm; 根据rn&rm的值,修改cpsr的状态标志位;
rn、rm为r0~r7
跳转指令 格 式 功 能
b{cond} label pc=label;
若有cond,则label必须在当前指令的-256~+256字节范围内;
否则,label必须在当前指令的-2kb~+2kb范围内
bl label r14=pc+4,pc=label;
label必须在当前指令的-4mb~+4mb范围内
bx rn pc=rn,且切换处理器状态
load/store指令 格 式 功 能
ldr rd,[rn,imm]; rd=地址(rn+imm)中的字数据;rd为r0~r7,rn为r0~r7或sp或pc;若rn为pc或sp,imm为5位立即数,否则imm为8位立即数
ldr rd,[rn,rm]; rd=地址(rn+rm)中的字数据;rd、rn、rm为r0~r7
ldrh rd,[rn,imm_5]; rd=地址(rn+imm_5)中的无符号半字数据;rd、rn为r0~r7,imm_5为5位立即数
ldrh rd,[rn,rm]; rd=地址(rn+rm)中的无符号半字数据;rd,rn,rm为r0~r7
ldrb rd,[rn,imm_5]; rd=地址(rn+imm_5)中的无符号字节数据;rd、rn为r0~r7
ldrb rd,[rn,rm]; rd=地址(rn+rm)中的无符号字节数据;rd,rn,rm为r0~r7
ldrsh rd,[rn,rm]; rd=地址(rn+rm)中的有符号半字数据;rd,rn,rm为r0~r7
ldrsb rd,[rn,rm]; rd=地址(rn+rm)中的有符号字节数据;rd,rn,rm为r0~r7
ldr rd,label; rd=地址(label)中的字数据;rd为r0~r7
str rd,[rn,imm]; 地址(rn+imm)处的字数据=rd;rd为r0~r7,rn为r0~r7或sp或pc;若rn为pc或sp,imm为5位立即数,否则imm为8位立即数
软件中断指令 格 式 功 能
swi 8位立即数 8位立即数为中断号
上一个:如何将安卓的数据传到苹果上(如何把安卓数据导入iphone)
下一个:oppoa59怎么看像素,oppoa59像素从哪里看

电脑键盘功能基础知识打字手势,电脑打字手该在键盘上怎么放
如何快速学会26键打字,怎么才能学会打26键
哪些苗木适合室内无土栽培法?
导致开关插座引发火灾的十大隐患
常见海鱼的种类图片和名字,海鱼 种类 快点 多少个都行
win11 分盘,惠普win11分盘
复合地板主材计算方法有哪些?
沙糖桔的运输要求与方式
魅族2手电筒怎么打开,魅族MX2 37自带手电筒在哪
iphone官网怎么查找序列号(进入iphone官网查序列号苹果官网)