·若Rm的位0为1,则指令将CPSR中的标志T置 位,处理器切换执行Thumb指令,并在Rm中 的地址处开始执行。 ·但须将最低位清0,使之以半字的边界对齐 0 如果Rm的第0位为0,则处理器继续执行ARM 指令,并在Rm中的地址处开始执行。 ·但须将Rm的第1位清0,使之以字的边界对 准
• 若Rm的位0为1,则指令将CPSR中的标志T置 位,处理器切换执行Thumb指令,并在Rm中 的地址处开始执行。 • 但须将最低位清0,使之以半字的边界对齐 • 如果Rm的第0位为0,则处理器继续执行ARM 指令,并在Rm中的地址处开始执行。 • 但须将Rm的第1位清0,使之以字的边界对 准
Thumb指令 ·分支指令 一向后转移形成循环。 一条件结构下向前转移 一转向子程序 -处理器从Thumb状态切换到ARM状态。 一程序相对转移,特别是条件分支在范围上有更多的限制,转向子 程序只具有无条件的转移。 数据处理指令 -访问寄存器R8~R15受到一定限制。 除MOV或ADD指令访问寄存器R8-R15外,数据处理指令总是不 断地更新CPSR中的ALU状态标志。 o 单寄存器加载和存储指令 限定只能访问寄存器R0~R7 多寄存器加载和存储指令 -PUSH和POP指令使用堆栈指针(R13)作为基址实现满递减堆 栈。除可传送RO-R7外,PUSH还可用于存储链接寄存器,并且 POP可用于加载程序指针
Thumb 指令 • 分支指令 – 向后转移形成循环。 – 条件结构下向前转移 – 转向子程序 – 处理器从Thumb状态切换到ARM状态。 – 程序相对转移,特别是条件分支在范围上有更多的限制,转向子 程序只具有无条件的转移。 • 数据处理指令 – 访问寄存器R8~R15受到一定限制。 – 除MOV或ADD指令访问寄存器R8-R15外,数据处理指令总是不 断地更新CPSR中的ALU状态标志。 • 单寄存器加载和存储指令 限定只能访问寄存器R0~R7 • 多寄存器加载和存储指令 – PUSH和POP指令使用堆栈指针(R13)作为基址实现满递减堆 栈。除可传送R0-R7外,PUSH还可用于存储链接寄存器,并且 POP可用于加载程序指针
Thumb指令可访问的寄存器 ·Thumb指令集中对寄存器分为两类 -低寄存器(r0~r7) -高寄存器(r8~r15) Thumb对低寄存器(r0~r7)具有全部访问权限,对 寄存器r13~r15进行扩展以做特殊应用。 -13用作堆栈指针。 一14用作链接寄存器。 -r15用作程序计数器PC。 其它寄存器(r8~r12及CPSR)只能做有限访问: 少数指令可以使用高寄存器(8~r15):CPSR的条件标 志位由算术和逻辑操作设置并控制条件转移
Thumb指令可访问的寄存器 • Thumb指令集中对寄存器分为两类 – 低寄存器(r0~r7) – 高寄存器(r8~r15) • Thumb对低寄存器(r0~r7)具有全部访问权限,对 寄存器r13~r15进行扩展以做特殊应用。 – r13用作堆栈指针。 – r14用作链接寄存器。 – r15用作程序计数器PC。 • 其它寄存器(r8~r12及CPSR)只能做有限访问: 少数指令可以使用高寄存器(r8~r15);CPSR的条件标 志位由算术和逻辑操作设置并控制条件转移
ARM的指令集编码 ·ARM的条件代码域 312827 0 cond
ARM的指令集编码 • ARM的条件代码域 31 28 27 0 cond
ARM的条件码 操作码 助记符 解释 用于执行的标志位 0000 EQ 相等/等0 Z置位 0001 NE 不等 Z清0 0010 CS/HS 进位无符号 C置位 数高于或等于 0011 CC/LO 无进位/无符 C清0 号数低于 0100 MI 负数 N置位
ARM的条件码 操作码 助记符 解释 用于执行的标志位 0000 EQ 相等/等0 Z置位 0001 NE 不等 Z清0 0010 CS/HS 进位/无符号 C置位 数高于或等于 0011 CC/LO 无进位/无符 C清0 号数低于 0100 MI 负数 N置位