第四章、Thumb指令集 ·存储器访问指令 ·数据处理指令 ·分支指令 ·中断和断点指令 ·伪指令
第四章、Thumb指令集 • 存储器访问指令 • 数据处理指令 • 分支指令 • 中断和断点指令 • 伪指令
内容综述 ·Thumb指令集是针对代码密度的问题而提 出的,可以看作是ARM指令压缩形式的子 集。 所有的Thumb指令都有相对应的ARM指 令,其编程模型也对应于ARM的编程模 型
内容综述 • Thumb指令集是针对代码密度的问题而提 出的,可以看作是ARM指令压缩形式的子 集。 • 所有的Thumb指令都有相对应的ARM指 令,其编程模型也对应于ARM的编程模 型
·Thumb是一个不完整的体系结构。当面 临异常时,自动进入ARM模式。 ·ARM的开发工具完全支持Thumb指令。 ·应用程序可以灵活地将ARM和Thumb子 程序混合编程,以便在例程的基础上提高 性能或代码密度
• Thumb是一个不完整的体系结构。当面 临异常时,自动进入ARM模式。 • ARM的开发工具完全支持Thumb指令。 • 应用程序可以灵活地将ARM和Thumb子 程序混合编程,以便在例程的基础上提高 性能或代码密度
CPSR中的Thumb指示位 ·支持Thumb指令的ARM微处理器也可以执 行标准的32位标准的ARM指令集 在如何时刻,对指令流的解释取决于CPSR 的第5位,即位T。 ·不是所有的ARM处理器都支持Thumb指 令,只有在命名中有字面T的才支持
• 支持Thumb指令的ARM微处理器也可以执 行标准的32位标准的ARM指令集 • 在如何时刻,对指令流的解释取决于CPSR 的第5位,即位T。 • 不是所有的ARM处理器都支持Thumb指 令,只有在命名中有字面T的才支持。 CPSR中的Thumb指示位
进入Thumb模式 ·复位时,ARM启动并执行ARM指令。 转向执行Thumb指令的通常方法是执行一条交换 转移指令BX。 其句法为: BLX{cond}Rm 或: BLX label 其中:Rm是含有转移地址的寄存器,Rm的第0 位拷贝到CPSR中的T位,位[31:1]移入PC
进入Thumb模式 • 复位时,ARM启动并执行ARM指令。 • 转向执行Thumb指令的通常方法是执行一条交换 转移指令BX。 其句法为: BLX{cond} Rm 或: BLX label 其中:Rm是含有转移地址的寄存器,Rm的第0 位拷贝到CPSR中的T位,位[31:1]移入PC
·若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置位