ARM汇编编程基础(二) -- 基本寻址方式与基本指令

本文介绍了ARM汇编编程的基础知识,包括寄存器寻址、立即数寻址和寄存器间接寻址,并详细解析了如LDR、STR、B、BL等常用指令。此外,还探讨了条件执行的概念和相关指令。

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



本系列文章节选自本人所著《深入浅出嵌入式底层软件开发》





要想进行ARM的汇编编程,首当其冲要知道最基本、最常用的指令,而要了解指令则必须要了解寻址方式。所以这里将聚焦在——基本寻址方式和基本指令。

首先,来看一看我们已经见过的2条指令:MOV pc, lr和BL addsub

最简单的汇编指令格式是操作码(例如:MOV、BL)和操作数(例如:pc, lr, addsub)。操作码易于理解,例如MOV表示将某个值从一处传送到另一处,BL表示跳转到某处;而操作数则表示一处和另一处到底是哪里(是在寄存器中还是内存中),要跳转的位置在哪里(或者是绝对地址或者是相对地址)。

操作数部分要解决的问题是:到哪里去获得操作数?因此就有了寻址方式的分类。基本上来讲,ARM共有8种寻址方式,这里我们先了解其中最基本的3种寻址方式:寄存器寻址、立即数寻址、寄存器间接寻址。

1.2.1 最常见寻址方式精解

1. 寄存器寻址

MOV pc, lr 表示操作数来源于寄存器(pc和lr)。对于这种寻址方式而言,在指令的32位机器码中的地址码部分,存放的是寄存器(pc和lr)的编号,故称之为寄存器寻址。

2. 立即数寻址

MOV pc, #64 表示将常数64放入寄存器pc,其中常数64被称为立即数。立即数寻址指令中的地址码部分就是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(故称为立即数)。

这里,可能大家会看出一个问题:由于立即数是位于32位机器码中的,而32位机器码中除了操作数外还有操作码,这就意味着不可能用全部32bit来表示立即数。事实上,ARM机器指令中,仅用了最低的12bit来表示立即数。那么我们自然推论立即数的范围是-2048——2047,这意味着MOV pc, #8192这样的指令是非法的。但事实情况并非如此,MOV pc,#8192是合法且能正常运行的。真实情况是,ARM机器指令可以表示的立即数范围是-2^31--2^31-1,只不过它只能表示这其中的 2^12个数字而已。ARM是这样用12bit来表

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值