【ARM汇编】ARM 指令集和Thumb 指令集

【ARM汇编】ARM 指令集和Thumb 指令集指令集汇总关于指令集ARM指令集Thumb指令集简单的指令集操作关于指令集指令集是汇编的基础,是芯片的架构,不懂指令集看着汇编就只能干瞪眼了,所以把ARM指令集全都记录下来做个笔记。可能会和WIN32的指令集有出入,比如WIN32中MOV可以把数据从内存中加载到寄存器中去,但在ARM的RISC结构中,MOV只能将数据从寄存器移动到寄存器,WIM32的看小甲鱼的视频。说白了X86是复杂指令集(CISC),ARM是精简指令集(RISC)。复杂指令集是将很多操作集成起来,精简是可以很细节的去处理。51的

大家好,欢迎来到IT知识分享网。【ARM汇编】ARM

关于指令集

指令集是汇编的基础,是芯片的架构,不懂指令集看着汇编就只能干瞪眼了,所以把ARM指令集全都记录下来做个笔记。

可能会和WIN32的指令集有出入,比如WIN32中MOV可以把数据从内存中加载到寄存器中去,但在ARM的RISC结构中,MOV只能将数据从寄存器移动到寄存器,WIM32的看小甲鱼的视频。说白了X86是复杂指令集(CISC),ARM是精简指令集(RISC)。
复杂指令集是将很多操作集成起来,精简是可以很细节的去处理。
51的看刘健老师
ARM汇编初学者视频

ARM指令集

ARM指令是32位的,而Thumb指令时16位的。
如果在1K的存储空间中,可以放32条ARM指令,就可以放64条Thumb指令,因此在存放Thunb指令时,代码密度高。

助记符 操作
MOV 移动
ADD
SUB
RSB 反减
CMP 比较
TST 测试
AND 逻辑与
EOR 逻辑或
LSL 逻辑左移
ASR 算术右移
MUL 有符号长乘
SMUL
SMLAL 有符号长累乘
MSR 移入状态寄存器
B 分支
BX 分支与交换
LDR 载入字
LDRH 载入半字
LDRB 载入字节
LDRSH 载入有符号半字
LDRSB 载入有符号字节
LDM 载入乘
LDRBT 转化载入寄存器字节
LDRT 转化载入寄存器
MCR 移入协处理器
LDC 协处理器数据处理
MVN 移非
ADC 带进位加
SBC 带进位减
RSC 带进位反减
CMN 比较取反
TEQ 测试等价
BIC 位清零
ORR 逻辑 ( 包括 ) 或
MLA 累乘
UMULL 无符号长乘
UMLAL 无符号长累乘
MRS 由状态寄存器移出
BL 分支与链接
SWI 软件中断
STR 恢复字
STRH 恢复半字
STRB 恢复字节
STRBT 转化保存寄存器字节
STRT 转化保存寄存器
STM 多路保存
SWPB 交换字节
MRC 由协处理器移出
STC 由协处理器保存

Thumb指令集

PS:和C不同,在汇编中可不区分大小写。

助记符 操作
MOV 移动
ADD
SUB
CMP 比较
TST 测试
AND 逻辑与
EOR 逻辑或
LSL 逻辑左移
ASR 算术右移
MUL
B 分支
BX 分支与交换
LDR 载入字
LDRH 载入半字
LDRB 载入字节
LDRSH 载入有符号半字
LDMIA 载入乘
PUSH 将寄存器推入堆栈
MVN 移非
ADC 带进位加
SBC 带进位减
CMN 比较取反
NEG 去反
BIC 位清零
ORR 逻辑 ( 包括 ) 或
LSR 逻辑右移
ROR 右转
BL 分支与链接
SWI 软件中断
STR 保存字
STRH 保存半字
STRB 保存字节
LDRSB 载入有符号字节
STMIA 多路保存
PUSH 将寄存器推入堆栈 POP 将寄存器推出堆栈

Thumb不是完整的指令集
Thumb是ARM 指令集的一个子集
Thumb指令可以看做是ARM指令压缩形式的子集,是针对代码密度【1】的问题而提出的,它具有16为的代码密度。Thumb不是一个完整的体系结构,不能指望处理程序只执行Thumb指令而不支持ARM指令集。因此,Thumb指令只需要支持通用功能,必要时,可借助完善的ARM指令集,例如:所有异常自动进入ARM状态。

在编写Thumb指令时,先要使用伪指令CODE16声明,而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。编写ARM指令时,可使用伪指令CODE32声明。

Thumb 指令集分为:

  • 分支指令
  • 数据处理指令
  • 载入与保存指令
  • 批量载入与保存指令
  • 异常产生指令

Thumb模式下,R0~R7八个通用功能寄存器有效。与执行ARM指令时的R0~R7相同。 某些 Thumb 指令还访问程序计数器 (ARM 寄存器 15)、链接寄存器 (ARM 寄存器 14) 及
堆栈指针 (ARM 寄存器 13)。其他指令对 ARM 寄存器 8 ~ 15 的访问有所限制。

简单的指令集操作

mov ax,18		;18送入AX	ax=18
mov ah,78		;78送入AH		ah=78
add ax,8		;将寄存器AX中的数值加上8	ax+=8
LDR R0,0x1234	;0x1234这个地址存放到R0中

初学汇编,内容仅为笔记和参考。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/12397.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信