Thumb-2指令系统

上传人:sha****en 文档编号:22120591 上传时间:2021-05-20 格式:PPT 页数:47 大小:772.60KB
收藏 版权申诉 举报 下载
Thumb-2指令系统_第1页
第1页 / 共47页
Thumb-2指令系统_第2页
第2页 / 共47页
Thumb-2指令系统_第3页
第3页 / 共47页
资源描述:

《Thumb-2指令系统》由会员分享,可在线阅读,更多相关《Thumb-2指令系统(47页珍藏版)》请在装配图网上搜索。

1、Thumb-2 指 令 系 统( Thumb-2 指 令 体 系 架 构 ) 主 要 内 容1 . 概 述2 . Thumb-2 指 令 集 分 类3 . 统 一 的 汇 编 语 言4 . Cortex-M3 常 用 的 Thumb-2 指 令 集5 . 小 结 1 . 概 述 对 于 确 定 的 微 处 理 器 而 言 , 编 写 紧 凑 的 代码 以 降 低 消 耗 显 得 至 关 重 要 。 通 常 , 存 储 器 的 大 小 是 固 定 的 , 而 产 品 的功 能 特 性 却 各 异 , 选 择 恰 当 的 处 理 器 并 精心 调 整 代 码 是 明 智 的 。 1 . 概 述 (

2、 续 )对 于 ARM体 系 架 构 的 来 说 : 微 处 理 器 有 两 种 工 作 状 态 :ARM工 作 状 态Thumb工 作 状 态 Thumb指 令 集 是 添 加 到 ARM的 标 准 RISC指 令 集 之 上的 独 立 指 令 集 ; Thumb指 令 集 包 括 了 基 本 的 加 法 、 减 法 、 循 环 移 位以 及 跳 转 等 大 约 3 6 条 1 6 位 指 令 ; Thumb指 令 集 作 为 ARM指 令 集 的 压 缩 方 案 , 简 洁 、有 效 , 应 用 广 泛 并 得 到 很 好 的 支 持 , 通 过 Thumb指令 替 换 ARM指 令 ,

3、可 以 将 某 些 代 码 的 规 模 减 小 大 约 2 0 %到 3 0 %。 1 . 概 述 ( 续 )对 于 ARM体 系 架 构 的 来 说 ( 续 ) : 但 是 , 有 限 的 Thumb指 令 仅 对 基 本 的 算 术 和 逻 辑 操作 有 用 :Thumb状 态 下 , 处 理 器 将 仅 可 使 用 有 限 数 量 的 寄 存 器 ,R8-R12的 使 用 受 到 限 制 ,无 法 完 成 诸 如 处 理 中 断 、 长 跳 转 、 原 子 存 储 器 (atomic memory)操 作 , 或 协 处 理 器 操 作 等 等 复 杂 任 务 ,也 无 法 像 ARM模

4、 式 那 样 进 行 条 件 执 行 和 移 位 或 循 环 移位 等 操 作 。 Thumb代 码 和 标 准 ARM代 码 不 能 混 杂 使 用 , 必 须 显式 地 在 两 种 工 作 状 态 间 进 行 切 换 , 这 迫 使 程 序 员 必 须将 所 有 的 1 6 位 代 码 与 3 2 位 代 码 分 开 并 隔 离 到 独 立 的 模 块 中 。 1 . 概 述 ( 续 )对 于 ARM体 系 架 构 的 来 说 ( 续 ) : 其 次 , 两 种 工 作 状 态 之 间 来 回 切 换 需 要 消 耗 时 间 ,导 致 代 码 运 行 速 度 降 低 大 约 1 5 %,

5、不 仅 要 增 加 代 码 ,而 且 还 需 要 几 十 个 前 导 (preamble)以 及 后 同 步 指 令 (postamble)来 组 织 指 针 并 清 空 CPU的 流 水 线 。 虽 然 Thumb指 令 能 够 实 现 较 高 密 度 的 代 码 , 缓 存 使用 效 率 更 高 , 但 实 现 ARM指 令 代 码 的 功 能 往 往 需 要 较 多的 Thumb指 令 代 码 , 相 比 较 而 言 , ARM指 令 使 用 起 来 更灵 活 。 1 . 概 述 ( 续 ) Thumb-2并 不 是 Thumb的 升 级 它 是 另 起 炉 灶 , 继 承 并 集 成

6、了 传 统 的 Thumb指令 集 和 ARM指 令 集 的 各 自 优 点 , 可 以 完 全 代替 Thumb和 原 先 的 ARM指 令 集 , 是 Thumb指 令 集 和 ARM指 令 集 的 一 个 超 集 。 Thumb-2指 令 集 体 系 架 构 , 无 需 处 理 器 进 行 工作 状 态 的 显 示 切 换 , 就 可 运 行 16位 与 32位 混 合代 码 。 与 ARM体 系 架 构 相 比 , 速 度 提 高 大 约 15%到20%。 1 . 概 述 ( 续 ) Cortex-M3处 理 器 使 用 的 指 令 集 是 Thumb-2指 令 集 的 子 集 , 它

7、 的 ( 指 令 ) 工 作 状 态 只有 一 个 , 那 就 是 Thumb-2状 态 。 Cortex-M3处 理 器 的 两 种 工 作 状 态 : Thumb-2状 态 调 试 状 态 2 . Thumb-2 指 令 集 分 类 按 照 指 令 的 长 度 分 类 , Thumb-2指 令 集 可分 为 两 种 :( 1) 16-bit指 令 集 ;( 2) 32-bit指 令 集 。 2 . Thumb-2 指 令 集 分 类 ( 续 ) 按 功 能 和 寻 址 方 式 分 类( 1) 数 据 传 送 指 令( 2) Load/Store指 令( 3) 批 量 Load/Store指

8、 令( 4) 算 术 四 则 运 算 指 令( 5) 逻 辑 操 作 指 令( 6) 移 位 和 循 环 指 令( 7) 符 号 扩 展 指 令( 8) 字 节 调 序 指 令 REV, REVH,REV16,REVSH( 9) 位 域 处 理 指 令( 10) 子 程 序 调 用 与 无 条 件 转 移 指 令( 11) 隔 离 (barrier)指 令 ( 12) 饱 和 运 算 指 令( 13) If Then指 令( 15) 比 较 跳 转 指 令 等 2 . Thumb-2 指 令 集 分 类 ( 续 ) 基 于 Thumb-2指 令 体 系 架 构 编 写 的 代 码 在 执行 过

9、 程 中 , 处 理 器 不 存 在 ARM工 作 状 态 和Thumb工 作 状 态 之 间 的 切 换 。 那 么 , 处 理 器 必 须 能 够 自 动 识 别 当 前 指 令 长度 , 是 16-bit还 是 32-bit, 以 正 确 地 执 行 Thumb-2指 令 代 码 , 它 是 如 何 识 别 呢 ? 2 . Thumb-2 指 令 集 分 类 ( 续 ) 指 令 长 度 的 确 定 PC寄 存 器 指 向 的 半 字 中 , Bits决 定 该 半 字 是 16-bit指 令 , 还 是 属 于 32-bit指 令 的 一 部 分 。 图 3-1说 明 了Bits确 定

10、指 令 长 度 的 功 能 。 2 . Thumb-2 指 令 集 分 类 ( 续 ) 不 同 指 令 长 度 的 Bits编 码 格 式 PC寄 存 器 所 指 向 半 字 的 Bits的 编 码 格 式 决 定 了CPU所 处 理 指 令 的 长 度 。 Thumb-2 指 令 集 空 间 被 划 分 为 1 6 -bit 和 3 2 -bit 两 个 子 集 。其 中 , x原 则 上 可 以 为 “ 0 ” 、 “ 1 ” 任 意 值 , 但 x 的 取 值不 能 使 得 0 b1 1 1 xx=0 b1 1 1 0 0 , 以 及 0 bxxxxx=0 b1 1 1 xx或 者0 b

11、xxxxx=0 b1 1 1 0 0 。Halfword1 Bits 功 能0b11100 16-bit 无 条 件 分 支 Thumb-2指令 , 在 所 有 Thumb-2体 系 结 构中 定 义0b111xx ( xx00) 32-bit Thumb-2 指 令 , 在Thumb-2中 定 义0bxxxxx ( xxxxx111xx) 16-bit Thumb -2指 令 3 . 统 一 的 汇 编 语 言 ARM指 令 集 体 系 架 构 下 , ARM指 令 与 Thumb指 令 分 属 不 同 的 程 序 模 块 , 由 不 同 的 汇 编器 对 其 分 别 进 行 汇 编 。 T

12、humb-2 指 令 集 体 系 架 构 下 , 1 6 bit指 令 与3 2 bit指 令 可 以 在 同 一 程 序 模 块 出 现 , 并 由同 一 汇 编 器 对 其 进 行 汇 编 。 Toolchain flow with ARM7r13 (sp)r14 (lr) spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)r15 (pc)cpsrr0r1r2r3r4r5r6r7User/S

13、ystemRegister File AssemblerARM C/C+ CompilerThumb C/C+CompilerC/C+ FilesASMARM7TDMI C/C+ FilesASMState Change eg. ISR entry/exitUserOptimizedCode which operates on the visible Register file NB: Most compilers automatically provide the Assembler code stubs shown here, allowing majority of code in Hi

14、gh Level C language ARM Cortex-M3 Toolchain FlowUser/SystemRegister File Unified AssemblerThumb(2) C/C+ CompilerC/C+ FilesASM(UAL)UnifiedAssemblerLanguageCode which operates on the visible Register fileARM Cortex-M3No State Change:Automated by NVICr13 (psp)r14 (lr)spsrr8r9r10r11r12r13(msp)r14 (lr)r1

15、5 (pc)cpsrr0r1r2r3r4r5r6r7(Hand Optimized Code / Previously Written 32-Bit ARM Assembler Files)The combination of a conditional instruction sequence IT (If/Then) with the same visible register file set as ARM7 enabled the creation of a Unified Assembler which allows Thumb-2 to mimic 32-bit ARM instr

16、uctions 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集( 1 ) 数 据 传 送 指 令 Cortex-M3 中 的 数 据 传 送 类 型 包 括 : 两 个 寄 存 器 间 传 送 数 据 寄 存 器 与 特 殊 功 能 寄 存 器 间 传 送 数 据 把 一 个 立 即 数 加 载 到 寄 存 器指 令 功 能 描 述MOV , # 将 8 位 立 即 数 传 送 到 目 标 寄 存 器MOV , 将 低 寄 存 器 值 传 送 给 低 目 标 寄 存 器MOV , 将 高 或 低 寄 存 器 值 传 送 给 高 或 低 目 标 寄 存 器 MVN , 将 寄

17、 存 器 值 取 反 后 传 送 给 目 标 寄 存 器M O V S . W , # 将 12位 立 即 数 传 送 到 寄 存 器 中MOVS.W , , 将 移 位 后 的 寄 存 器 值 传 送 到 寄 存 器 中MOVT.W , # 将 16位 立 即 数 传 送 到 寄 存 器 的 高 半 字 31:16中MOVW.W , # 将 16位 立 即 数 传 送 到 寄 存 器 的 低 半 字 15:0中 ,并 将 高 半 字 31:16清 零MRS , 将 状 态 传 送 到 寄 存 器 中MSR _, 传 送 到 状 态 寄 存 器 中 4 . Cortex-M3 常 用 的 Th

18、umb-2 指 令 集 ( 续 )( 1 ) 数 据 传 送 指 令 ( 续 ) MRS/MSR 用 于 特 权 级 别 条 件 下 访 问 特 殊 功 能 寄存 器 。 指 令 语 法 如 下 :MRS , ; 加 载 特 殊 功 能 寄 存 器 的 值 到 RnMSR , ; 存 储 Rn 的 值 到 特 殊 功 能 寄 存 器其 中 , SReg 可 以 是 下 表 中 的 一 个 。 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 1 ) 数 据 传 送 指 令 ( 续 ) MRS/MSR 指 令 中 的 Sreg寄 存 器 :符 号 功 能IPSR

19、当 前 服 务 中 断 号 寄 存 器EPSR 执 行 状 态 寄 存 器 ( 读 回 来 的 总 是 0) 。 它 里 面 含 T 位 , 在 CM3 中 T 位 必 须 是 1。APSR 上 条 指 令 结 果 的 标 志 IEPSR IPSR+EPSRIAPSR IPSR+APSREAPSR EPSR+APSRPSR xPSR = APSR+EPSR+IPSRMSP 主 堆 栈 指 针PSP 进 程 堆 栈 指 针PRIMASK 常 规 异 常 屏 蔽 寄 存 器BASEPRI 常 规 异 常 的 优 先 级 阈 值 寄 存 器BASEPRI_MAX 等 同 BASEPRI, 但 是 施

20、 加 了 写 的 限 制 : 新 的 优 先 级 比 较 比 旧 的 高 ( 更 小 的 数 )FAULTMASK fault 屏 蔽 寄 存 器 ( 同 时 还 包 含 了 PRIMASK 的 功 能 , 因 为 faults 的 优 先 级 更 高 ) CONTROL 控 制 寄 存 器 ( 堆 栈 选 择 , 特 权 等 级 ) 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 2 ) Load/Store指 令指 令 功 能 描 述LDRB Rd, Rn, #offset 从 地 址 Rn+offset 处 读 取 一 个 字 节 到 RdLDRH Rd

21、, Rn, #offset 从 地 址 Rn+offset 处 读 取 一 个 半 字 到 RdLDR Rd, Rn, #offset 从 地 址 Rn+offset 处 读 取 一 个 字 到 RdLDRD Rd1, Rd2, Rn, #offset 从 地 址 Rn+offset 处 读 取 一 个 双 字 (64 位 整 数 )到 Rd1( 低 32 位 ) 和 Rd2( 高 32 位 ) 中 。 STRB Rd, Rn, #offset 把 Rd 中 的 低 字 节 存 储 到 地 址 Rn+offset 处STRH Rd, Rn, #offset 把 Rd 中 的 低 半 字 存 储

22、 到 地 址 Rn+offset 处STR Rd, Rn, #offset 把 Rd 中 的 低 字 存 储 到 地 址 Rn+offset 处LDRD Rd1, Rd2, Rn, #offset 把 Rd1( 低 32 位 ) 和 Rd2( 高 32 位 ) 表 达 的双 字 存 储 到 地 址 Rn+offset 处 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 2 ) Load/Store指 令 ( 续 )预 索 引 (Pre indexing) :LDR.W R0, R1, #20! ;预 索 引该 指 令 先 把 地 址 R1 +offset 处

23、的 值 加 载 到 R0 , 然 后 , R1 = R1 + 2 0 ; 这 里 的 “! ”就 是 指 在 传 送 前 更 新 基 址 寄 存 器 R1 的 值 。即 : 步 骤 : R1 = R1 + 2 0 , 步 骤 : R0 R1 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 2 ) Load/Store指 令 ( 续 )预 索 引 (Pre indexing) :指 令 功 能 描 述LDR.W Rd, Rn, #offset!LDRB.W Rd, Rn, #offset!LDRH.W Rd, Rn, #offset! 字 /字 节 /半 字 /

24、双 字 的 带 预 索 引 加 载 ( 不做 带 符 号 扩 展 , 没 有 用 到 的 高 位 全 清 0)LDRD.W Rd1, Rd2, Rn, #offset! LDRSB.W Rd, Rn, #offset!LDRSH.W Rd, Rn, #offset! 字 节 /半 字 的 带 预 索 引 加 载 , 并 且 在 加载 后 执 行 带 符 号 扩 展 成 32 位 整 数STR.W Rd, Rn, #offset!STRB.W Rd, Rn, #offset!STRH.W Rd, Rn, #offset!STRD.W Rd1, Rd2, Rn, #offset! 字 /字 节 /

25、半 字 /双 字 的 带 预 索 引 存 储 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 2 ) Load/Store指 令 ( 续 ) 后 索 引 (Post indexing):STR.W R0, R1, #-12 ;后 索 引 该 指 令 是 把 R0 的 值 存 储 到 地 址 R1 处 。 在存 储 完 毕 后 , R1 = R1+( 12)。 注 意 , R1后 面 是 没 有 “! ”的 。 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 2 ) Load/Store指 令 ( 续 ) 后 索 引 (Post

26、 indexing):指 令 功 能 描 述LDR.W Rd, Rn, #offsetLDRB.W Rd, Rn, #offsetLDRH.W Rd, Rn, #offsetLDRD.W Rd1, Rd2, Rn, #offset 字 /字 节 /半 字 /双 字 的 带 后 索 引 加 载 ( 不做 带 符 号 扩 展 , 没 有 用 到 的 高 位 全 清 0) LDRSB.W Rd, Rn, #offsetLDRSH.W Rd, Rn, #offset 字 节 /半 字 的 带 后 索 引 加 载 , 并 且 在 加 载后 执 行 带 符 号 扩 展 成 32 位 整 数STR.W Rd

27、, Rn, #offsetSTRB.W Rd, Rn, #offsetSTRH.W Rd, Rn, #offsetSTRD.W Rd1, Rd2, Rn, #offset 字 /字 节 /半 字 /双 字 的 带 后 索 引 存 储 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 3 ) 批 量 数 据 Load/Store指 令指 令 功 能 描 述LDMIA Rd!, 寄 存 器 列 表 从 Rd 处 读 取 多 个 字 。 每 读 一 个 字 后 Rd 自 增 一 次 ,16位 宽 度STMIA Rd!, 寄 存 器 列 表 存 储 多 个 字 到 Rd

28、 处 。 每 存 一 个 字 后 Rd 自 增 一 次 ,16位 宽 度LDMIA.W Rd!, 寄 存 器 列 表 从 Rd 处 读 取 多 个 字 。 每 读 一 个 字 后 Rd 自 增 一 次 ,32位 宽 度 LDMDB.W Rd!, 寄 存 器 列 表 从 Rd 处 读 取 多 个 字 。 每 读 一 个 字 前 Rd 自 减 一 次 ,32位 宽 度STMIA.W Rd!, 寄 存 器 列 表 存 储 多 个 字 到 Rd 处 。 每 存 一 个 字 后 Rd 自 增 一 次 ,32位 宽 度STMDB.W Rd!, 寄 存 器 列 表 存 储 多 个 字 到 Rd 处 。 每

29、存 一 个 字 前 Rd 自 减 一 次 ,32位 宽 度 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 3 ) 批 量 数 据 Load/Store指 令 ( 续 ) Rd 后 面 的 “! ”表 示 在 每 次 访 问 前 (Before)或 访 问 后(After), 要 自 增 (Increment)或 自 减 ( Decrement) 基 址 寄 存 器Rd的 值 , 增 /减 单 位 : 1个 字 ( 4 字 节 ) 或 半 字 ( 2 字 节 ) 。STMDB SP!, R0-R3, LR 等 效 于 PUSH R0-R3, LRLDMIA S

30、P!, R0-R3, PC 等 效 于 POP R0-R3, PC例 2: 记 R8=0 x8000, 则 下 面 两 条 指 令 : STMIA.W R8!, R0-R3 ; R8 值 变 为 0 x8010, 每 存 一 次 增 一 次 , 先 存 储 后 自 增 STMDB.W R8, R0-R3 ; R8 值 的 “一 个 内 部 复 本 ”先 自 减 后 存 储 , 但 是 R8 的 值 不 变 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 4 ) 算 术 四 则 运 算 指 令指 令 功 能 描 述ADD Rd, Rn, Rm ; Rd = Rn

31、+RmADD Rd, Rm ; Rd += RmADD Rd, #imm ; Rd += imm 常 规 加 法imm 的 范 围 是 im8( 16 位 指 令 ) 或 im12( 32位 指 令 )ADC Rd, Rn, Rm ; Rd = Rn+Rm+CADC Rd, Rm ; Rd += Rm+CADC Rd, #imm ; Rd += imm+C 带 进 位 的 加 法imm 的 范 围 是 im8( 16 位 指 令 ) 或 im12( 32位 指 令 )ADDW Rd, #imm12 ; Rd += imm12 带 12 位 立 即 数 的 常 规 加 法SUB Rd, Rn ;

32、 Rd -= Rn SUB Rd, Rn, #imm3 ; Rd = Rn-imm3SUB Rd, #imm8 ; Rd -= imm8SUB Rd, Rn, Rm ; Rd = Rm-Rm 常 规 减 法SBC Rd, Rm ; Rd -= Rm+CSBC.W Rd, Rn, #imm12 ; Rd = Rn-imm12-CSBC.W Rd, Rn, Rm ; Rd = Rn-Rm-C 带 借 位 的 减 法RSB.W Rd, Rn, #imm12 ; Rd = imm12-RnRSB.W Rd, Rn, Rm ; Rd = Rm-Rn 反 向 减 法MUL Rd, Rm ; Rd *= R

33、mMUL.W Rd, Rn, Rm ; Rd = Rn*Rm 常 规 乘 法MLA Rd, Rm, Rn, Ra ; Rd = Ra+Rm*RnMLS Rd, Rm, Rn, Ra ; Rd = Ra-Rm*Rn 乘 加 与 乘 减( 译 者 添 加 )UDIV Rd, Rn, Rm ; Rd = Rn/Rm ( 无 符 号 除 法 )SDIV Rd, Rn, Rm ; Rd = Rn/Rm ( 带 符 号 除 法 ) 硬 件 支 持 的 除 法 , 余 数 被 丢 弃SMULL RL, RH, Rm, Rn ;RH:RL= Rm*RnSMLAL RL, RH, Rm, Rn ;RH:RL+=

34、 Rm*Rn 带 符 号 的 64 位 乘 法 UMULL RL, RH, Rm, Rn ;RH:RL= Rm*RnSMLAL RL, RH, Rm, Rn ;RH:RL+= Rm*Rn 无 符 号 的 64 位 乘 法 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 4 ) 算 术 四 则 运 算 指 令 ( 续 )例 3: 以 加 法 为 例 说 明 16bit、 32bit的 算 术 四 则 运 算 指 令 :ADD R0, R1 ; R0 += R1ADD R0, #0 x12 ; R0 += 12ADD.W R0, R1, R2 ; R0 = R1+

35、R2 虽 然 助 记 符 都 是 ADD, 但 是 二 进 制 机 器 码 是 不 同 的 。 当 使 用 1 6 位 加 法 时 , 会 自 动 更 新 APSR 中 的 标 志 位 。 然 而 , 在 使 用 了 “ .W” 显 式 指 定 了 3 2 位 指 令 后 , 就 可 以 通 过 “ S”后 缀 控 制 对 APSR 的 更 新 : ADD.W R0, R1, R2 ; 不 更 新 标 志 位ADDS.W R0, R1, R2 ; 更 新 标 志 位 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 4 ) 算 术 四 则 运 算 指 令 ( 续

36、 )UDIV Rd, Rn, Rm ; Rd = Rn/Rm ( 无 符 号 除 法 )SDIV Rd, Rn, Rm ; Rd = Rn/Rm ( 带 符 号 除 法 )l为 了 捕 捉 被 零 除 的 非 法 操 作 , 可 以 在 NVIC 的 配 置 控 制寄 存 器 中 置 位 DIVBZERO位 。 如 果 出 现 了 被 零 除 的 情况 , 将 会 引 发 一 个 用 法 fault异 常 。l如 果 没 有 任 何 措 施 , Rd将 在 除 数 为 零 时 被 清 零 。 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 5 ) 逻 辑 操

37、作 指 令指 令 功 能 描 述AND Rd, Rn ; Rd Rd = Rn Rd = Rm Rd |= RnORR.W Rd, Rn, #imm12 ; Rd = Rn | imm12ORR.W Rd, Rm, Rn ; Rd = Rm | Rn 按 位 或 BIC Rd, Rn ; Rd Rd = Rn Rd = Rm Rd = Rn | imm12ORN.W Rd, Rm, Rn ; Rd = Rm | Rn 按 位 或 反 码EOR Rd, Rn ; Rd = RnEOR.W Rd, Rn, #imm12 ; Rd = Rn imm12EOR.W Rd, Rm, Rn ; Rd =

38、Rm Rn ( 按 位 ) 异 或 , 异 或 总 是 按 位 的 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 6 ) 移 位 和 循 环 指 令指 令 功 能 描 述LSL Rd, Rn, #imm5 ; Rd = Rnimm5LSL Rd, Rn ; Rd = RnLSL.W Rd, Rm, Rn ; Rd = Rmimm5LSR Rd, Rn ; Rd = RnLSR.W Rd, Rm, Rn ; Rd = RmRn 逻 辑 右 移ASR Rd, Rn, #imm5 ; Rd = Rnimm5ASR Rd, Rn ; Rd = Rn ASR.W Rd

39、, Rm, Rn ; Rd = Rm Rn 算 术 右 移ROR Rd, Rn ; Rd = RnROR.W Rd, Rm, Rn ; Rd = Rm Rn 循 环 右 移RRX.W Rd, Rn ; Rd = (Rn1)+(C1)+(C31) ; C= tmpBit 带 进 位 的 右 移 一 格 亦 可 写 作 RRXS Rd 。 此 时 , Rd也 要 担 当 Rn 的 角 色 译 注l 如 果 在 移 位 和 循 环 指 令 上 加 上 “S”后 缀 , 这 些 指 令 会 更 新 进 位 位 C。l 如 果 是 16 位 Thumb-2指 令 , 则 总 是 更 新 C 的 。 4

40、. Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 ) 带 进 位 的 循 环 右 移 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 7 ) 符 号 扩 展 指 令 二 进 制 补 码 表 示 法 中 , 最 高 位 是 符 号 位 。 把 一 个 8 位 或 1 6 位 负 数 扩 展 成 3 2 位 时 : 对 于 负 数 , 必 须 把 所 有 高 位 全 填 1 , 其 数 值 不 变 ; 至 于 正 数 或 无 符 号 数 , 则 只 需 简 单 地 把 高 位 清 0 。指 令 功 能 描 述SXTB Rd, Rm ; Rd

41、= Rm 的 带 符 号 扩 展 把 带 符 号 字 节 整 数 扩 展 到 32 位SXTH Rd, Rm ; Rd = Rm 的 带 符 号 扩 展 把 带 符 号 半 字 整 数 扩 展 到 32 位 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 8 ) 字 节 调 序 指 令指 令 功 能 描 述REV.W Rd, Rn 在 字 中 调 整 字 节 序REV16.W Rd, Rn 在 高 低 半 字 中 调 整 字 节 序REVSH.W 在 低 半 字 中 调 整 字 节 序 , 并 做 带 符 号 扩 展 4 . Cortex-M3 常 用 的 T

42、humb-2 指 令 集 ( 续 )( 8 ) 字 节 调 序 指 令 ( 续 ) 指 令 功 能 描 述REV.W Rd, Rn 在 字 中 调 整 字 节 序 REV16.W Rd, Rn 在 高 低 半 字 中 调 整 字 节 序REVSH.W 在 低 半 字 中 调 整 字 节 序 , 并 做 带 符号 扩 展REVH: 对 低 半 字 调 序 ;REVSH: 基 于 REVH, 并 进 行 符 号 扩 展 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 8 ) 字 节 调 序 指 令 ( 续 )例 4 : 记 R0 =0 x1 2 3 4 5 6 7

43、 8 , 在 执 行 下 列 指 定 后 :REV R1 , R0REVH R2 , R0REV1 6 R3 , R0则 R1 =0 x7 8 5 6 3 4 1 2 , R2 =0 x1 2 3 4 7 8 5 6 , R3 =0 x3 4 1 2 7 8 5 6 。REVSH 在 REVH 的 基 础 上 , 还 把 转 换 后 的 半 字 做 带 符 号 扩展 。 例 5 : 记 R0 =0 x3 3 4 4 8 8 9 9 , 则 REVSH R1 , R0执 行 后 , R1 =0 xFFFF9 9 8 8 。 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 (

44、续 )( 9 ) 位 域 处 理 指 令例 6 :( 1 ) BFC( 位 域 清 零 ) 指 令 LDR R0, =0 x1234FFFF BFC R0, #4, #10执 行 完 后 , R0= 0 x1234C00F指 令 功 能 描 述BFC.W Rd, #, # 位 域 清 零BFI.W Rd, Rn, #, # 将 一 个 寄 存 器 的 位 域 插 入 另 一 个 寄 存 器 中CLZ.W Rd, Rn 计 算 前 导 0 的 数 目RBIT.W Rd, Rn 按 位 旋 转 180 度SBFX.W Rd, Rn, #, # 拷 贝 位 域 , 并 带 符 号 扩 展 到 32

45、位UBFX.W Rd, Rn, #, # 拷 贝 位 域 , 并 无 符 号 扩 展 到 32 位BFC.W Rd, #lsb, #widthLsb 为 位 域 的 末 尾Width 指 定 为 段 宽 度 , 在 lsb和 它 的 左 边 ( 更 高 有 效 位 ) 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 9 ) 位 域 处 理 指 令 ( 续 )例 6 : ( 续 )( 2) BFI( 位 域 插 入 指 令 ) LDR R0, =0 x12345678 LDR R1, =0 xAABBCCDD BFI.W R1, R0, #8, #16则 执 行

46、 后 , R1= 0 xAA5678DD ( 3) RBIT指 令 , 记 R1=0 xB4E10C23( 二 进 制 数 值 为 1011,0100,1110,0001,0000,1100,0010,0011) , 指 令 RBIT.W R0, R1执 行 后 , 则 R 0 = 0 x C 4 3 0 8 7 2 D ( 二 进 制 数 值 为1100,0100,0011,0000,1000,0111,0010,1101) 。( 4) UBFX/SBFX LDR R0, =0 x5678ABCD UBFX.W R1, R0, #12,#16 ; R0=0 x0000678A。类 似 地 ,

47、 SBFX 也 抽 取 任 意 的 位 域 , 但 是 以 带 符 号 的 方 式 进 行 扩 展 。 LDR R0, =0 x5678ABCD SBFX.W R1, R0, #8,#4 ; R0=0 xFFFFFFFB指 令 功 能 描 述BFC.W Rd, #, # 位 域 清 零BFI.W Rd, Rn, #, # 将 一 个 寄 存 器 的 位 域 插 入 另 一 个 寄存 器 中CLZ.W Rd, Rn 计 算 前 导 0 的 数 目RBIT.W Rd, Rn 按 位 旋 转 180 度SBFX.W Rd, Rn, #, # 拷 贝 位 域 , 并 带 符 号 扩 展 到 32 位U

48、BFX.W Rd, Rn, #, # 拷 贝 位 域 , 并 无 符 号 扩 展 到 32 位 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 1 0 ) 子 程 序 调 用 与 无 条 件 转 移 指 令 B, BL, BLX, BX MOV 、 LDR 指 令 实 现 程 序 转 移主 要 指 令 格 式 有 :B Label ;转 移 到 Label 处 对 应 的 地 址BX reg ;转 移 到 由 寄 存 器 reg 给 出 的 地 址BL Label ;转 移 到 Label 处 对 应 的 地 址 , 并 且 把 转 移 前 的 下 条 指 令

49、 地 址 保 存 到 LR BLX reg ;转 移 到 由 寄 存 器 reg 给 出 的 地 址 , 并 且 把 转 移 前 的 下 条 指 令 地 址 保 存到 LR。MOV PC, R0 ;转 移 地 址 由 R0 给 出LDR PC, R0 ;转 移 地 址 存 储 在 R0 所 指 向 的 存 储 器 中POP , PC ;把 返 回 地 址 以 弹 出 堆 栈 的 风 格 送 给 PC, 从 而 实 现 转 移LDMIA SP!, , PC ; POP 的 另 一 种 等 效 写 法 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 1 1 ) 程

50、 序 状 态 寄 存 器 标 志 位 的 更 新 指 令 16 位 算 术 逻 辑 指 令 32 位 带 S 后 缀 的 算 术 逻 辑 指 令 比 较 指 令 ( 如 , CMP/CMN) 和 测 试 指 令 ( 如TST/TEQ) 直 接 写 PSR/APSR (MSR 指 令 )上 述 指 令 可 以 更 改 状 态 寄 存 器 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 1 2 ) 隔 离 (barrier)指 令 针 对 结 构 比 较 复 杂 的 存 储 器 系 统 流 水 线 作 业 和 写 缓冲 , Cortex-M3引 进 了 隔 离 指

51、 令 , 以 避 免 系 统 可 能 发 生 紊乱 现 象 ( race condition) 。指 令 功 能 描 述DMB 数 据 存 储 器 隔 离 。 DMB 指 令 保 证 : 仅 当 所 有 在 它 前 面 的 存 储 器 访 问 都 执行 完 毕 后 , 才 提 交 (commit)在 它 后 面 的 存 储 器 访 问 动 作 。 DSB 数 据 同 步 隔 离 。 比 DMB 严 格 : 仅 当 所 有 在 它 前 面 的 存 储 器 访 问 都 执 行 完毕 后 , 才 执 行 它 在 后 面 的 指 令 。ISB 指 令 同 步 隔 离 。 最 严 格 : 它 会 清 洗

52、 流 水 线 , 以 保 证 所 有 它 前 面 的 指 令 都执 行 完 毕 之 后 , 才 执 行 它 后 面 的 指 令 。 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 1 3 ) 饱 和 运 算 指 令 Cortex-M3 中 的 饱 和 运 算 指 令 分 为 两 种 : 一 种 是 带 符 号 饱 和 运算 ; 另 一 种 是 无 符 号 饱 和 运 算 。 饱 和 运 算 多 用 于 信 号 处 理 。 当 信 号 被 放 大 后 , 有 可 能 使 它 的 幅值 超 出 允 许 输 出 的 范 围 。 如 果 简 单 地 清 除 MSB,

53、则 常 常 会 严 重破 坏 信 号 的 波 形 , 而 饱 和 运 算 则 只 是 使 信 号 产 生 削 顶 失 真 。 饱 和 运 算 的 结 果 可 以 用 于 更 新 应 用 程 序 状 态 寄 存 器 APSR中 Q 标 志 。 Q 标 志 在 写 入 后 可 以 通 过 写 APSR清 0。 Rn 存 储 “放 大 后 的 信 号 ( 32 位 带 符 号 整 数 ) ” ; Rd 存 储 饱 和 运 算 的 结 果 ; #imm5 用 于 指 定 饱 和 边 界 该 由 多 少 位 的 带符 号 整 数 来 表 达 允 许 的 范 围 , 取 值 范 围 是 1-32。指 令

54、名 功 能 描 述SSAT.W Rd, #imm5, Rn, ,shift 以 带 符 号 数 的 边 界 进 行 饱 和 运 算 ( 交 流 )USAT.W Rd, #imm5, Rn, ,shift 以 无 符 号 数 的 边 界 进 行 饱 和 运 算 ( 带 纹 波 的 直 流 ) 饱 和 运 算 例 无 符 号 数 饱 和 运 算 带 符 号 饱 和 运 算 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 1 4 ) If-Then( IT) 指 令 If-Then(IT)指 令 围 起 一 个 块 , 里 面 最 多 有 4 条 指 令 , 它 里

55、 面 的 指 令 可 以条 件 执 行 。 IT 已 经 带 了 一 个 “T”, 因 此 还 可 以 最 多 再 带 3 个 “T”或 者 “E”。 并 且 对 T 和 E 的 顺 序 没 有 要 求 。 其 中 T 对 应 条 件 成 立 时 执 行 的 语 句 , E 对 应 条 件 不 成 立 时 执 行 的 语 句 。 在 If-Then块 中 的 指 令 必 须 加 上 条 件 后 缀 , 且 T 对 应 的 指 令 必 须 使 用 和 IT 指 令 中 相 同 的 条 件 , E 对 应 的 指 令 必 须 使 用 和 IT 指 令 中 相 反 的 条 件 。 IT 的 使 用

56、形 式 总 结 如 下 : IT ;围 起 1 条 指 令 的 If-Then 块IT ;围 起 2 条 指 令 的 If-Then 块IT ;围 起 3 条 指 令 的 If-Then 块IT ;围 起 4 条 指 令 的 If-Then 块 其 中 , , 的 取 值 可 以 是 “T”或 者 “E”。 而 为 条 件 。 4 . Cortex-M3 常 用 的 Thumb-2 指 令 集 ( 续 )( 1 4 ) If-Then( IT) 指 令 ( 续 )例 7: IT 指 令 优 化 C 代 码 的 例 子 如 下 面 伪 代 码 所 示 :if (R0=R1) R3 = R4 +

57、R5;R3 = R3 / 2;else R3 = R6 + R7;R3 = R3 / 2; 可 以 写 作 : CMP R0, R1 ; 比 较 R0 和 R1ITTEE EQ ; 如 果 R0 = R1,Then-Then-Else-ElseADDEQ R3, R4, R5 ; 相 等 时 加 法ASREQ R3, R3, #1 ; 相 等 时 算 术 右 移ADDNE R3, R6, R7 ; 不 等 时 加 法ASRNE R3, R3, #1 ; 不 等 时 算 术 右 移 5 . 小 结 Cortex-M3 支持 的 Thumb-2指 令 5 . 小 结 Cortex-M3 支持 的 Thumb-2指 令 ( 续 )

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!