最近在读mbed uvisor的源码,在rpc_gateway_exports.h中有段代码不是很了解

/* ldr pc, [pc, #<label - instr + 4>]
* LDR (immediate) - ARMv7M ARM section A7.7.42
* 1111;1 00 0; 0 10 1; <Rn - 1111>; <Rt - 1111>; <imm12> (Encoding T3) */
#define LDR_PC_PC_IMM_OPCODE(instr, label) \
((uint32_t) (0xF000F8DFUL | ((((uint32_t) (label) - ((uint32_t) (instr) + 4)) & 0xFFFUL) << 16))

这段代码是往PC寄存器中 存放数值么?其中0XF000F8DFUL是PC寄存器的值?

Parents
  • 可以这么简单理解为直接写入执行指令,0XF000F8DFUL是机器指令,注释中描述很清楚,也有参考出处,需要的话可以深入看下 ARMv7M 参考手册

    /* ldr pc, [pc, #<label - instr + 4>]
    * LDR (immediate) - ARMv7M ARM section A7.7.42
    * 1111;1 00 0; 0 10 1; <Rn - 1111>; <Rt - 1111>; <imm12> (Encoding T3) */

Reply
  • 可以这么简单理解为直接写入执行指令,0XF000F8DFUL是机器指令,注释中描述很清楚,也有参考出处,需要的话可以深入看下 ARMv7M 参考手册

    /* ldr pc, [pc, #<label - instr + 4>]
    * LDR (immediate) - ARMv7M ARM section A7.7.42
    * 1111;1 00 0; 0 10 1; <Rn - 1111>; <Rt - 1111>; <imm12> (Encoding T3) */

Children