依据指令中给出的操作数的不同格式,ARM 指令系统具有 8 种常见的寻址方式。我们这次就来讨论一下立即寻址。
立即寻址的特点
在立即寻址,操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。例子如下:
ADD R0, R1, #5 ;R0=R1+5
MOV R0, #0x55 ;R0=0x55
在这两个例子中,操作数 5 和 0x55 就是立即数。
注意:立即数在指令中要以 “#”为前缀,后面跟实际数值。
立即数形式
我们看到上面两个立即数一个是十进制一个是十六进制,那么这个立即数有哪些形式呢?
#后的立即数形式:
- 0x 或 & 表示十六进制数
- 0b 表示二进制数
- 0d 或缺省表示十进制数
合法立即数
现在又有一个问题,我们怎么判断这个立即数是不是合法的,也就是计算机能够准确表示出来的呢?
立即寻址机器指令格式
这里首先涉及到数据编码的知识。我们知道我们写出的是汇编指令,而汇编指令不是计算机能够理解的,计算机所能理解的只是 0 1 这两种数字。所以,我们写出的汇编指令还要经过译码器译码成机器指令才能被计算机所理解。
在 ARM 中,机器指令的格式大致有如下这么多种,还有一些更具体的这里不提(图片来自 ARM Architecture reference Manual
):