二、指令集学习
(一) ARM指令集
1. 指令格式
2. 条件码
3. ARM存储器访问指令
1) LDR/ STR-加载/ 存储指令
2) LDM/ STM-多寄存器加载/ 存储指令
3) SWP-寄存器和存储器交换指令
4. ARM数据处理指令
1) 数据传送指令
a) MOV-数据传送指令
b) MVN-数据非传送指令
2) 算术逻辑运算指令
a) ADD-加法运算指令
b) SUB-减法运算指令
c) RSB-逆向减法指令
d) ADC-带进位加法指令
e) SBC-带进位减法指令
f) RSC-带进位逆向减法指令
g) AND-逻辑“与”
h) ORR-逻辑“或”
i) EOR-逻辑“异或”
j) BIC-位清除指令
3) 比较指令
a) CMP-比较指令
b) CMN-负数比较指令
c) TST-位测试指令
d) TEQ-相等测试指令
4) 乘法指令
a) MUL-32位乘法指令
b) MLA-32位乘加指令
c) UMULL-64位无符号乘法指令
d) UMLAL-64位无符号乘加指令
e) SMULL-64位有符号乘法指令
f) SMLAL-64位有符号乘加指令
5. ARM分支指令
1) B-分支指令
2) BL-带连接的分支指令
3) BX-带状态切换的分支指令
6. ARM协处理器指令
1) CDP-协处理器数据操作指令
2) LDC-协处理器数据读取指令
3) STC-协处理器数据写入指令
4) MCR-ARM处理器到协处理器的数据传送指令
5) MRC-协处理器到ARM处理器的数据传送指令
7. ARM杂项指令
1) SWI-软中断指令
2) MRS-读状态寄存器指令
3) MSR-写状态寄存器指令
8. ARM伪指令
1) ADR-小范围的地址读取伪指令
2) ADRL-中等范围的地址读取伪指令
3) LDR-大范围的地址读取伪指令
4) NOP-空操作伪指令
(二) Thumb指令集
1. Thumb指令集和ARM指令集的区别
2. Thumb存储器访问指令
1) LDR/ STR-加载/ 存储指令
2) PUSH/ POP-寄存器入栈 / 出栈指令
3) LDMIA/ STMIA-多寄存器加载/ 存储指令
3. Thumb数据处理指令
1) 数据传送指令
a) MOV-数据传送指令
b) MVN-数据非传送指令
c) NEG-数据取负指令
2) 算术逻辑运算指令
a) ADD-加法运算指令
b) SUB-减法运算指令
c) ADC-带进位加法指令
d) SBC-带进位减法指令
e) MUL-乘法运算指令
f) AND-逻辑“与”
g) ORR-逻辑“或”
h) EOR-逻辑“异或”
i) BIC-位清除指令
j) ASR-算术右移指令
k) LSL-逻辑左移指令
l) LSR-逻辑右移指令
m) ROR-循环右移指令
3) 比较指令
a) CMP-比较指令
b) CMN-负数比较指令
c) TST-位测试指令
4. Thumb分支指令
1) B-分支指令
2) BL-带连接的分支指令
3) BX-带状态切换的分支指令
5. Thumb杂项指令
1) SWI-软中断指令
6. Thumb伪指令
1) ADR-小范围的地址读取伪指令
2) LDR-大范围的地址读取伪指令
3) NOP-空操作伪指令
7。汇编指令API
MOV(MOVe) 传送指令PUSH 入栈指令
POP 出栈指令
XCHG(eXCHanG) 交换指令
XLAT(TRANSLATE) 换码指令
LEA (Load Effective Address) 有效地址送寄存器指令
LDS(Load DS with pointer) 指针送寄存器和DS指令
LES(Load ES with pointer) 指针送寄存器和ES指令
LAHF(Load AH with Flags) 标志位送AH指令
SAHF(Store AH into Flgs) AH送标志寄存器指令
PUSHF(PUSH the Flags) 标志进栈指令
POPF(POP the Flags) 标志出栈指令
ADD 加法指令
ADC 带进位加法指令
INC 加1指令
SUB(SUBtract) 不带借位的减法指令
SBB(SuVtrach with borrow) 带借位的减法指令
DEC(DECrement) 减1指领
NEG(NEGate) 求补指令
CMP(CoMPare) 比较指令
MUL(unsinged MULtiple) 无符号数乘法指令
IMUL(sIgned MUL tiple) 有符号数乘法指令
DIV(unsigned DIVide) 无符号数除法指令
IDIV(sIgned DIVide) 有符号数除法指令
CBW(Count Byte to Word) 字节转换为字指令
CWD(Count Word to Doble word) 字转换为双字指令
DAA 压缩的BCD码加法十进制调整指令
DAS 压缩的BCD码减法十进制调整指令
AAA 非压缩的BCD码加法十进制调整指令
AAS 非压缩的BCD码加法十进制调整指令
AND 逻辑与指令
OR 逻辑或指令
XOR 逻辑异或指令
NOT 逻辑非指令
TEST 测试指令
SHL(SHift logical Letf) 逻辑左移指令
SHR(SHift logical Right) 逻辑右移指令
ROL(Rotate Left ) 循环左移指令P58
ROR(Rotate Right) 循环右移指令P58
RCL(Rotate Left through Carry) 带进位循环左移
RCR(Rotate Right through Carry) 带进位循环左移
MOVS(MOVe String) 串传送指令
STOS(STOre into String) 存入串指令
LODS(LOad from string) 从串取指令
REP(REPeat) 重复操作前
CLD(CLear Direction flag) 清除方向标志指令
STD(SeT Direction flag) 设置方向标志指令
CMPS(CoMPare String) 串比较指令
SCAS(SCAn String) 串扫描指令
REPE/REPZ(REPeat while Equal/Zero)相等/为零时重复操作前缀
REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重复前缀
IN(INput) 输入指令
OUT(OUTput) 输出指令
JMP(JuMP) 无条件转移指令
JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 条件转移指令
LOOP 循环指令P70
LOOPZ/LOOPE 为零/相等时循环指令
LOOPNZ/LOOPNE 不为零/不相等时循环指令
CALL 子程序调用指令
RET(RETun) 子程序返回指令
CLC(CLear Carry) 进位位置0指令
CMC(CoMplement Carry) 进位位求反指令
SRC(SeT Carry) 进位位置1指令
NOP(No OPeretion) 无操作指令
HLT(HaLT) 停机指令
OFFSET 返回偏移地址
SEG 返回段地址
EQU(=) 等值语句
PURGE 解除语句
DUP 操作数字段用操作符
SEGMENT,ENDS 段定义指令
ASSUME 段地址分配指令
ORG 起始偏移地址设置指令
$ 地址计数器的当前值
PROC,ENDP 过程定义语句
NAME,TITLE,END 程序开始结束语句
MACRO,ENDM 宏定义指令
JZ OPR //结果为零转移
JNZ OPR //结果不为零转移
JS OPR //结果为负转移
JNS OPR //结果为正转移
JO OPR //溢出转移
JNO OPR //不溢出转移
JP OPR //结果为偶转移
JNP OPR //结果为奇转移
JC OPR //有进位转移
JNC OPR //无进位转移
上一篇:常用 ARM 指令集及汇编
下一篇:arm指令集 从汇编开始
推荐阅读最新更新时间:2024-03-16 14:53
设计资源 培训 开发板 精华推荐
- 【提问有礼】TI MCU,今天你提问了吗?
- 模电怎么学?TI帮你定制课程清单!体验“模电选课测试”功能,赢精彩好礼
- 下载喽:PCIe要了解的10件事和识别协议的BSX系列BERTScope误码率测试仪技术资料
- 看是德科技资料填调查问卷赢好礼
- 福禄克首款热成像万用表Fluke-279FC等你来尝鲜!晒心得享好礼喽!
- 更好的供电方式:使用更小、更轻的电源模块加速车辆电气化
- ADI有奖下载活动之9 电机控制解决方案—伺服控制
- 兆易创新 GD32E231 DIY 大赛,百套超值型开发板免费申请+重磅豪礼!
- 下载有礼:ADI公司生化分析仪解决方案!
- 【EE团】开抢啦!!!TI超值工业级模拟器件套装芯片再次登场!!!