第三章ARM指令集 ·条件执行 ·指令分类说明 一存储器访问指令 一数据处理指令 一分支指令 一协处理器指令 一杂项指令 -ARM伪指令
第三章 ARM指令集 • 条件执行 • 指令分类说明 – 存储器访问指令 – 数据处理指令 – 分支指令 – 协处理器指令 – 杂项指令 – ARM伪指令
ARM指令集概要 ·ARM指令的一般编码格式 ARM指令字长为固定的32位。一条典型的ARM指令编码 格式为: 31 28272524 2120 19 1615 1211 0 cond 001 opcode S Rn Rd Shifter_Operand 其中: opcode:指令操作符代码。 cond:指令执行的条件编码。 S:决定指令的操作是否影响CPSR的值。 Rd:目标寄存器编码。 Rn:包含第1个操作数的目标寄存器编码。 shift operand:表示第2个操作数
• ARM指令的一般编码格式 ARM指令字长为固定的32位。一条典型的ARM指令编码 格式为: 其中: opcode:指令操作符代码。 cond:指令执行的条件编码。 S:决定指令的操作是否影响CPSR的值。 Rd:目标寄存器编码。 Rn:包含第1个操作数的目标寄存器编码。 shift_operand:表示第2个操作数。 ARM指令集概要 cond 001 opcode S Rn Rd Shifter_Operand 31 28 27 25 24 21 20 19 16 15 12 11 0
ARM指令集概要 ·一条典型的ARM指令语法格式如下: <opcode>{<cond>}{S}<Rd>,<Rn>,<shift operand> 其中: <opcode>是指令助记符,如ADD,Mov等。 {<cond>}表示指令执行的条件。 S}决定指令的操作是否影响CPSR的值。 <Rd>表示目标寄存器 <Rn>表示包含第1个操作数的寄存器。 <shifter operand>表示第2个操作数。 例如:ADDEQS R1,R2,#5
• 一条典型的ARM指令语法格式如下: <opcode>{<cond>} {S} <Rd>,<Rn>,<shift_operand> 其中: <opcode>是指令助记符,如ADD,Mov等。 {< cond>}表示指令执行的条件。 {S}决定指令的操作是否影响CPSR的值。 <Rd>表示目标寄存器 <Rn>表示包含第1个操作数的寄存器。 <shifter_operand>表示第2个操作数。 例如:ADDEQS R1,R2,#5 ARM指令集概要
条件执行 ·几乎所有的ARM指令均可包含一个可选的 条件码,只有在CPSR中的条件码满足指定 的条件时,带条件码的指令才能执行。 ·几乎所有的ARM数据处理指令均可根据执 行结果来选择是否更新条件码标志。如果 要更新条件标志,需要在指令后面加“S”. 一些指令eg:CMP,CMN,TST,TEQ不需要加 “S”。它们唯一的功能就是更新条件码标 志,且始终更新条件码标志
条件执行 • 几乎所有的ARM指令均可包含一个可选的 条件码,只有在CPSR中的条件码满足指定 的条件时,带条件码的指令才能执行。 • 几乎所有的ARM数据处理指令均可根据执 行结果来选择是否更新条件码标志。如果 要更新条件标志,需要在指令后面加“S”. • 一些指令eg:CMP,CMN,TST,TEQ不需要加 “S”。它们唯一的功能就是更新条件码标 志,且始终更新条件码标志
ARM条件码 操作码[31:28] 助记符后缀 标志 含义 0000 EQ Z置位 相等 0001 NE Z清零 不等 0010 CS/HS C置位· 大于或等于(无符号>=) 0011 CC/LO· C清零 小于(无符号<) 0100 MI N置位 负 0101 PL N清零 正或零 0110 VS V置位 溢出 0111 VC V清零 未溢出 1000 HI C置位且Z清零 大于(无符号>) 1001 LS C清零或Z置位 小于或等于(无符号<=) 1010 GE N和V相同 带符号>= 1011 LT N和V不同 带符号< 1100 GT Z清零且N和V相同 带符号> 1110. LE Z置位或N和V不同 带符号<= 1111 AL 任何 总是(通常省略)
ARM条件码