我对指令集有点困惑.有Thumb,ARM和Thumb 2.根据我的阅读Thumb指令都是16位,但在ARMv7M用户手册(第vi页)中,提到了Thumb 16位和Thumb 32位指令.
现在我必须克服这种困惑.据说Thumb 2支持16位和32位指令.那么ARMv7M实际上支持Thumb 2指令而不仅仅是Thumb吗?
还有一件事.我可以说Thumb(32位)与ARM指令相同,它们都是32位吗?
以下行在arm组件中做了什么:
000031e6 2916 cmp r1, #22
000031e8 bf1a itte ne
Run Code Online (Sandbox Code Playgroud)
我得到了第一行(比较r1到22)但是第二行怎么样(我之前从未见过itte命令而googling没有返回任何内容)
我无法绕过IT指令的功能(如果那样).该快速参考卡有这样的:
操作:If-Then
汇编程序:IT{pattern} {cond}
操作:根据模式,最多可以有条件地执行以下四条指令.pattern是一个最多三个字母的字符串.每个字母可以是T(Then)或E(Else).IT之后的第一条指令条件为cond.如果相应的字母是T,则以下指令具有条件cond,或者如果相应的字母是E,则具有cond的反转.
实际上,这个概要有点意义.体系结构手册条目并没有让我在理解之旅的任何地方:
If-Then条件指令.
句法IT {x {y {z}}} cond
其中:
x指定IT块中第二条指令的条件开关.
y指定IT块中第三条指令的条件开关.
z指定IT块中第四条指令的条件开关.
cond指定IT块中第一条指令的条件.IT块中第二,第三和第四条指令的条件开关可以是:
T然后.将条件cond应用于指令.
E其他.将cond的逆条件应用于指令.注意
可以在IT指令中对cond使用AL(始终条件).如果这样做,IT块中的所有指令必须是无条件的,并且x,y和z中的每一个必须是T或省略但不是E.操作
IT指令最多可以有条件地遵循以下四条指令.条件可以完全相同,或者其中一些条件可以是其他条件的逻辑反转.IT指令后面的条件指令构成IT块.
IT块中的指令(包括任何分支)必须在其语法的{cond}部分中指定条件.
由于(大多数)每条指令都可以轻松指定条件,因此IT指令有什么用处?
我正在使用具有Thumb-2指令集的ARM Cortex-M3控制器.
Thumb模式用于将指令压缩为16位大小.因此减少了代码的大小.但是对于普通的Thumb模式,为什么说性能会降低?
对于Thumb-2,据说根据这两个链接改进了性能:
在单个16位指令限制编译器可用的函数的情况下,可以提高性能.
Thumb-2的既定目标是实现类似于Thumb的代码密度,其性能类似于32位内存上的ARM指令集.
这个表现究竟是什么?有人可以提供一些与之相关的例子吗?
是否有公开可用的 ARM 统一汇编语言的语法或解析器,如ARM 体系结构参考手册 A4.2 中所述
本文档使用 ARM 统一汇编语言 (UAL)。此汇编语言语法为所有 ARM 和 Thumb 指令提供了规范形式。
UAL 描述了每个指令的助记符和操作数的语法。
只是我对解析助记符和每条指令的操作数的代码感兴趣。例如,您如何为这些行定义语法?
ADC{S}{<c>}{<q>} {<Rd>,} <Rn>, <Rm>, <type> <Rs>
IT{<x>{<y>{<z>}}}{<q>} <firstcond>
LDC{L}<c> <coproc>, <CRd>, [<Rn>, #+/-<imm>]{!}
Run Code Online (Sandbox Code Playgroud)