您的位置 首页 分销

常用ARM指令集及汇编

一、ARM处理器的寻址方式二、指令集学习(一)ARM指令集1.指令格式2.条件码3.ARM存储器访问指令1)LDR/STR-加载/存储指令2)LDM/STM…

一、ARM处理器的寻址方法

二、指令集学习

(一)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 //无进位搬运

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/264031.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部