指令本质是二进制机器码,CPU可以直接执行,伪指令并不是指令,当处理器遇到无法直接执行的指令时,就会将该指令替换成其他指令执行。比如
MOV R1, #0xFFFFFFFF
MOV 要求传递给寄存器的值必须是一个立即数,0xFFFFFFFF很显然不是一个立即数,处理器是无法直接执行该指令的,所以编译器会事先转化为CPU可以执行的指令。
MOV无法直接将一个32位的数搬移到寄存器中,如果是伪指令就可以做到。
LDR R1, =0x12345678 @ 0x12345678 是要被搬移的数,前面用的是“=”,不是“#”
其本质是先将 0x12345678 保存到内存中,然后通过LDR指令从内存加载到寄存器。
拓展: 除了上述使用方法外,LDR指令还可以将一个标记点的下一条指令的地址保存到寄存器,或者直接将指令保存到寄存器。
- LDR R1, =STOP @ 将标记点STOP的下一条指令的地址保存到寄存器中
- LDR R2, STOP @ 将标记点的下一条指令保存到寄存器中
评论记录:
回复评论: