ARM处理器指令系统二 指令格式 存储器访问指令

本文详细介绍了ARM处理器的指令格式,包括必填项和可选项,如opcode、cond、S、Rd、Rn和operand2。讨论了如何利用灵活的operand2提高代码效率,以及条件码cond的高效逻辑操作。此外,还详细阐述了存储器访问指令,如LDR和STR,包括单寄存器操作和多寄存器操作,以及各种寻址方式和数据块传送指令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;文件名:TEST1.S
;功能:实现两个寄存器相加
;说明:使用ARMulate软件仿真调试
		AREA      RESET,CODE,READONLY      ;声明代码段RESET
		ENTRY ;标识程序入口
		CODE32 ;声明32位ARM指令
START   MOV R0,#0 ;设置参数
		MOV R1,#10
LOOP     BL ADD_SUB ;调用子程序ADD_SUB
		B LOOP ;跳转到LOOP
ADD_SUB
		ADDS R0,R0,R1 ;R0 = R0 + R1
		MOV PC,LR ;子程序返回
		END ;文件结束

先看上面这个两个寄存器相加的例子,分号后面的是注释,标号要顶格写,最后要有END声明结束


一指令格式

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

其中<>号内的项是必须的,{}号内的项是可选的。

opcode:指令助记符; 

cond:执行条件;
S:是否影响CPSR寄存器的值;
Rd:目标寄存器; Rn:第1个操作数的寄存器;
operand2:第2个操作数;


1 、灵活的使用第2个操作数“operand2”能够提高代码效率。它有如下的形式:

(1)#immed_8r——常数表达式;

该常数必须对应8位位图,即一个8位的常数通过循环右移偶数位得到。8位图立即数必须满足:能用8位长度的小窗把32位数据中所有的“1”圈起来,并且这个32位的数能通过某个8位的常数通过循环右移偶数位得到
 (2)Rm——寄存器方式;

在寄存器方式下,操作数即为寄存器的数值。比如:SUB R1,R1,R2
 (3)Rm,shift——寄存器移位方式;

将寄存器的移位结果作为操作数,但Rm值保持不变,移位方法如下 比如:ADD R1,R1,R1,LSL #3   ;R1=R1+R1*8=9R1

补充移位方式如下:

ASR #n 算术右移n位;  LSL #n 逻辑左移n位;  LSR #n 逻辑右移n位; ROR #n 循环右移n位;  RRX 带扩展的循环右移1位


<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值