Arm 指令如何匹配不同的格式

2020-08-18 17:23:56 +08:00
 binbinyouliiii

今天看 ARM7 相关的文档的时候,看到 Arm 指令格式区分的表格,但是发现格式并不是完全各自独立的,同一个指令可能会匹配到多种格式。

比如: xxxx_0000_10xx_xxxx_xxxx_0000_1001_xxxx 这条指令会匹配到 Multiply Long 和 Halfword Data Transfer:register offset 这两种格式。

// 没问题
xxxx_100x_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx  Block Data Transfer
xxxx_101x_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx  Branch
xxxx_110x_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx  Coprocessor Data      Transfer
xxxx_1110_xxxx_xxxx_xxxx_xxxx_xxx0_xxxx  Coprocessor Data      Operation
xxxx_1110_xxxx_xxxx_xxxx_xxxx_xxx1_xxxx  Coprocessor Register  Transfer
xxxx_1111_xxxx_xxxx_xxxx_xxxx_xxx1_xxxx  Software Interrupt
//
xxxx_0000_1xxx_xxxx_xxxx_xxxx_1001_xxxx  Multiply Long
xxxx_000x_x0xx_xxxx_xxxx_0000_1xx1_xxxx  Halfword Data Transfer:register offset
xxxx_0000_00xx_xxxx_xxxx_xxxx_1001_xxxx  Multiply
xxxx_000x_x1xx_xxxx_xxxx_xxxx_1xx1_xxxx  Halfword Data Transfer:immediate offset
xxxx_0001_0010_1111_1111_1111_0001_xxxx  Branch and Exchange
xxxx_0001_0x00_xxxx_xxxx_0000_1001_xxxx  Single Data Swap
xxxx_00xx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx  Data Processing / PSR Transfer

xxxx_011x_xxxx_xxxx_xxxx_xxxx_xxx1_xxxx  Undefined
xxxx_01xx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx  Single Data Transfer

704 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/699355

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX