/*
* MOV : 传送
*/
(Move)
MOV{条件}{S} <dest>, <op 1>
dest = op_1
MOV 从另一个寄存器、被移位的寄存器、或一个立即值装载一个值到目的寄存器。
你可以指定相同的寄存器来实现 NOP 指令的效果,你还可以专门移位一个寄存器:
MOV R0, R0 ; R0 = R0... NOP 指令
MOV R0, R0, LSL#3 ; R0 = R0 * 8
如果 R15 是目的寄存器,将修改程序计数器或标志。这用于返回到调用代码,方法是把连接寄存器的内容传送到 R15:
MOV PC, R14 ; 退出到调用者
MOVS PC, R14 ; 退出到调用者并恢复标志位
(不遵从 32-bit 体系)
mov r1, r0 // r0 的值传送到r1
mov pc, r14 // r14的值传送到pc, 常用于子程序返回
mov r1, r0, lsl#3 // r0 的值左移 3 位后传送到 r1
mov r1,#4096 // r1 = 4096
movs r0, #0 // r0=0 N=0 Z=1 C=0,
// MOVS总是会影响CPSR, 包括N,Z,C标志位,执行MOVS pc, lr时,
// CPSR会被SPSR覆盖(内核态,USER和SYSTEM模式下没有SPSR)
movcss r0, r2
MOVW 把 16 位立即数放到寄存器的底16位,高16位清0
MOVT 把 16 位立即数放到寄存器的高16位,低 16位不影响
/* reverse\beginners\051-c++\01-class.cpp */
10546: f240 50a8 movw r0, #1448 ; 0x5a8 /* r0 = 0x5a8 */
1054a: f2c0 0001 movt r0, #1 /* r0 = (1 << 16) | 0x05a8 = 0x105a8 */
1054e: f7ff ef38 blx 103c0 <printf@plt> /* printf("%d, %d\n", v1, v2); */
ARM base instruction -- mov
最新推荐文章于 2024-06-30 15:21:39 发布
本文详细介绍了ARM指令集中MOV指令的使用,包括如何从寄存器、立即数或移位寄存器装载值到目的寄存器,以及如何通过MOV指令实现NOP和位移操作。还提到了R15作为目的寄存器时如何改变程序计数器或标志,以及特殊应用如子程序返回。同时,文中示例展示了如何组合MOVW和MOVT指令加载32位立即数。最后,通过代码实例解释了MOV指令在实际程序中的应用,如调用printf函数。
摘要由CSDN通过智能技术生成