汇编常用指令记录

ARM汇编常用指令记录

指令的一般格式:

<opcode>{<cond>}{S} <Rd>,<Rn>{,<op2>}

其中<>为不可省略,{}为可以省略。
注意:opcode、cond、S之间没有空格,S和Rd之间使用空格隔开。

  1. LSL 左移指令
	MOV R1,R0,LSL#3          //将寄存器R0中的值左移3位后传送到寄存器R1中 
  1. CMP 比较指令
	CMP R1,R0                //将寄存器R1的值与寄存器R2的值相减,并根据结果来设置CPSR的标志位
	CMP R1,#100             //将寄存器R1的值与立即数100相减,并根据结果来设置CPSR的标志位
  1. TST 位测试指令
	TST R1,#0x01		      //将寄存器R1中的值与立即数0x01按位与,并根据是结果来设置CPSR的标志位
	TST R1,#0xFE	          //将寄存器R1中的值与立即数0xFE按位与,并根据是结果来设置CPSR的标志位
  1. TEQ 相等测试指令
	TEQ R1,R2	              //将寄存器R1中的值与寄存器R1中的值按位异或,并根据是结果来设置CPSR的标志位
  1. ADD 加法指令
	ADD R0,R1,R2	          //即 R0 = R1 + R2
	ADD R0,R1,#256	          //即 R0 = R1 + 256
	ADD R0,R2,R3,LSL#3	 	  //即 R0 = R2 + (R3<<3)

注意:ADD、ADC、ADDS、ADCS的区别:
ADD是不带进位的加法指令
ADC是带进位的加法指令
----------------------------------------------
ADDS和ADCS后加S是代表更新CPSR状态

	ADDS R1,R2,R3			  //即 R1 = R2 + R3且更新CPSR状态
	ADCS R5,R6,R7			  //即 R5 = R6 + R7,带进位且更新了CPSR状态
  1. SUB 减法指令
	SUB R0,R1,R2	          //即 R0 = R1 - R2
	SUB R0,R1,#256	          //即 R0 = R1 - 256
	SUB R0,R2,R3,LSL#3	 	  //即 R0 = R2 - (R3<<3)

注意:SBC是带借位的减法指令,其与SBCS、SUBS使用与加法指令类似。

  1. AND 与指令
	AND R0, R0,#3	          //将寄存器中R0中的值与立即数3按位与,并且将结果放入R0中

注意:AND通常用来保留特定位,清零其它位

  1. ORR 或指令
	ORR R1,R1,#3              //将寄存器中R1中的值与立即数3按位或,并且将结果放入R1中

注意:ORR通常用来置位特定位

  1. BIC 位清除指令
	BIC R0,R0,#0x0B           // 将寄存器R0中值的第0、1、3位清零(0x0B是0000_1011),其余位保持不变。
  1. MRS 程序状态寄存器到通用寄存器的数据传输指令
	MRS和MSR的格式: MRS{cond} Rd,<PSR> //PSR可以是CPSR或SPSR
	MRS R0,CPSR 	          //传输CPSR中的内容到R0当中
	MRS R1,SPSR               //传输SPSR中的内容到R1当中
  1. MSR 通用寄存器到程序状态寄存器的数据传输指令
	格式: MSR{cond} Rd,<PSR>_<fields>,Rm       //PSR可以是CPSR或SPSR,fields为域

程序状态寄存器可分为4个域:
PSR[31:24]为条件标志位域,用f表示,f为小写
PSR[23:16]为状态位域,用s表示,s为小写
PSR[15:8]为扩展位域,用x表示,x为小写
PSR[7:0]为控制位域,用c表示,c为小写

	MSR CPSR,R0	               //传送R0的内容到CPSR中
	MSR SPSR,R1	               //传送R1的内容到SPSR中
	MSR CPSR_c,R2	           //传送R2的内容到CPSR中,但仅仅修改CPSR中的控制位域

注意:MRS和MSR一般用于需要改变程序状态寄存器的内容 或者 是异常处理和进程切换时要保留程序状态寄存器中的值时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值