在使用 ARM MRS 指令读取特定寄存器的值时,如果该寄存器中的某些位是只读的,可能会出现矛盾的情况。例如,使用 ARM MRS 指令读取 CPSR 寄存器的值时,可以使用以下代码:
MRS r0, CPSR
但是,如果 CPSR 中的某些位是只读的,使用 MRS 指令进行读取时可能会出现矛盾的情况。为了避免这种情况,应该使用 MSR 指令将值写入一个临时寄存器中,然后再读取该寄存器的值。例如:
MSR CPSR_c, #0 ; 将 CPSR 中禁用 IRQ 的位清零
MRS r0, CPSR_c ; 读取 CPSR 中禁用 IRQ 的值
这种方法可以确保读取的值不会与只读的位产生矛盾,同时也允许对需要修改的位进行处理。