记录在学习微机原理时候的知识点,以便温故而知新。
汇编指令
数据传送指令
1.MOV 指令
将源操作数的值赋给目的操作数,源操作数可以是寄存器或立即数,目的操作数只能是寄存器。
MOV Rd,Rn/#num
2.MRS和MSR指令
作用和MOV指令相同,将源操作数(寄存器)的值赋给目的操作数(寄存器)MRS指令的源寄存器只能是特殊寄存器,MSR指令的目标寄存器只能是特殊寄存器。
MRS Rd,Rn
MSR Rd,Rn
3.MOVT指令
高16位赋值操作,将源操作数赋给目的操作数的高16位,而低16位保持不变。作用范围:R0~R12、LR等寄存器,源操作数范围:(0 ~ 0xFFFF)。
MOVT Rd,#num
如下图操作所示,需要将32位任意立即数加载到寄存器,可以用MOV指令将立即数的低16位加载到寄存器低16位,用MOVT指令将立即数的高16位加载到寄存器。
基本运算指令
1.ADD和ADC指令
ADD和ADC的区别在于,ADC指令在完成求和并赋值给目的操作数后,会使目的操作数加上进位标志位,即当进位标志位为1时,ADC指令的结果等于ADD指令的结果加1。
进位标志位(Carry Flag,通常简写为CF) 是计算机处理器中的一个标志位,用于反映运算过程中是否产生了进位或借位。当执行加法或减法运算时,如果结果的最高有效位产生了进位(加法)或借位(减法),则进位标志位CF会被设置为1;如果没有进位或借位发生,则CF被设置为0。
ADD/ADC Rd,Rn
ADD/ADC Rd,#num
ADD/ADC Rd,Rn,Rm
ADD/ADC Rd,Rn,#num
;加上后缀S可影响APSR寄存器中的N、Z、C、V标志位。
ADDS/ADCS
2.SUB和SBC指令
SUB/SBC Rd,Rn
SUB/SBC Rd,#num
SUB/SBC Rd,Rn,Rm
SUB/SBC Rd,Rn,#num
;加上后缀S可影响APSR寄存器中的N、Z、C、V标志位。
SUBS/SBCS
3.MUL指令
乘法指令,当源操作数仅有1个时,指令作用为将目的操作数与源操作数乘积后的结果赋值给目的操作数;当操作数有两个时,将两个源操作数乘积后的结果赋值给目的操作数。
MUL Rd,Rn
MUL Rd,Rn,Rm
4.SDIV和UDIV指令
除法指令,当源操作数仅有1个时,指令作用为将目的操作数除以源操作数的商赋值给目的操作数;当操作数有两个时,将第1源操作数除以第2源操作数的商赋值给目的操作数。SDIV将寄存器视为32有符号整数,UDIV指令视其为无符号整数。
SDIV/UDIV Rd,Rn
SDIV/UDIV Rd,Rn,Rm
逻辑运算指令
1.AND(与)、ORR(或)、MVN(非)指令
AND、ORR支持以下的书写格式,当源操作数仅有1个时,指令作用为将目的操作数与源操作数进行相应逻辑运算后的结果赋值给目的操作数;当操作数有两个时,将两个源操作数进行相应逻辑运算后的结果赋值给目的操作数。
AND Rd,Rn
AND Rd,#num
AND Rd,Rn,Rm
AND Rd,Rn,#num
2.BIC(非与)、ORN(或非)、EOR(异或)指令
MVN指令支持将源操作数赋值给目的操作数的格式如下
MVN Rd,Rn
MVN Rd,#num