使用LDR伪指令实现 将任意一个32位数赋给寄存器

指令本质是二进制机器码,CPU可以直接执行,伪指令并不是指令,当处理器遇到无法直接执行的指令时,就会将该指令替换成其他指令执行 。比如
【使用LDR伪指令实现将任意一个32位数赋给寄存器】MOV R1, #0xFFFFFFFF
MOV 要求传递给寄存器的值必须是一个立即数,很显然不是一个立即数,处理器是无法直接执行该指令的,所以编译器会事先转化为CPU可以执行的指令 。

使用LDR伪指令实现  将任意一个32位数赋给寄存器

文章插图
MOV无法直接将一个32位的数搬移到寄存器中,如果是伪指令就可以做到 。
LDR R1, =0x12345678@ 0x12345678 是要被搬移的数,前面用的是“=”,不是“#”
其本质是先将保存到内存中,然后通过LDR指令从内存加载到寄存器 。
拓展: 除了上述使用方法外,LDR指令还可以将一个标记点的下一条指令的地址保存到寄存器,或者直接将指令保存到寄存器 。
LDR R1, =STOP@ 将标记点STOP的下一条指令的地址保存到寄存器中LDR R2, STOP@ 将标记点的下一条指令保存到寄存器中