一、CPSR的中断禁止位
中断禁止位包括I、F,用来禁止或允许IRQ和FIQ两类中断,当I=1时,表示禁止IRQ中断,I=0时,表示允许IRQ中断;当F=1时,表示禁止FIQ中断,F=0时,表示允许FIQ中断。
思考:是否可以利用禁用中断位达到反调试的目的?
摘自:《汇编语言程序设计——基于ARM体系结构(第2版)》P53
二、汇编指令格式
用助记符表示的ARM指令一般格式如下:
<opcode> {<cond>} {S}<Rd>,<Rn> {,<OP2>}
格式中<>的内容必不可少,{}中的内容可省略。如<opcode>是指令助记符,是必须的。而{<cond>}为指令的执行条件,是可选的,缺省情况下表示使用默认条件AL(无条件执行)。
<opcode>表示操作码,如ADD表示算术加法。
{<cond>}表示指令执行的条件域,如EQ、NE等,缺省为AL。
{S}决定指令的执行结果是否影响CPSR的值,使用该后缀则指令执行的结果影响CPSR的值,否则不影响。
<Rd>表示目的寄存器。
<Rn>表示第一个操作数,为寄存器。
<op2>表示第二个操作数,可以是立即数、寄存器和寄存器移位操作数。
例如指令ADDEQS R0, R1, #8;其中操作码为ADD,条件域cond为EQ,S表示指令的执行影响CPSR寄存器的值,目的寄存器Rd为R0,第一个操作数寄存器Rn为R1,第二个操作数OP2为立即数#8。
摘自:《汇编语言程序设计——基于ARM体系结构(第2版)》P65