ARM 指令集的位数可以通过访问处理器的系统寄存器得到。
具体而言,可以使用汇编指令 MRS(Move to Register from Special register)和 MSR(Move to Special register from Register)来读取和设置系统寄存器的值。其中,CP15 的控制寄存器中包含了关于 CPU 架构和指令集的信息。
以下是使用汇编语言读取 CP15 的控制寄存器并提取 ARM 指令集位数的示例代码:
// 定义 MRC 汇编指令,读取 CP15 的控制寄存器
#define MRC(coproc, opcode1, Rt, CRn, CRm, opcode2) \
__asm__ __volatile__ ("mrc " #coproc ", " #opcode1 ", %0, " \
#CRn ", " #CRm ", " #opcode2 \
: "=r" (Rt) : )
// 读取 CP15 的控制寄存器 0
unsigned int control_reg;
MRC(p15, 0, control_reg, c1, c0, 0)
// 从控制寄存器中提取指令集位数
int instruction_set_bits = ((control_reg >> 16) & 0xF);
该代码中,使用了预处理指令 #define
定义了一个 MRC 汇编指令,用于读取 CP15 的控制寄存器。然后读取 CP15 中的控制寄存器 0,并从中提取指令集位数。最后,得到的指令集位数保存在整型变量 instruction_set_bits
中。