“什么是”呢;DN";在ARMv6M规范中添加(寄存器)T2编码?

“什么是”呢;DN";在ARMv6M规范中添加(寄存器)T2编码?,arm,Arm,我正在研究ARMV6M的规范,指令的T2编码如下 0 1 0 0 0 1 | 0 0 | DN | Rm | Rdn DN总是用作Rdn寄存器文件位置的前缀,我不明白为什么它不只是放在Rdn中。许多thumb指令,特别是ALU操作的指令,都有三位寄存器规范,以较低的6位编码,每三位表示r0-r7。这个特定的add指令允许对低寄存器r0-r15和高寄存器r0-r15进行操作,因此其他两位需要一个原点。他们碰巧将一个放在第6位,该位与5:3一致,因此另一个位于该位之上 因此,也许他们在考虑节省一些门

我正在研究ARMV6M的规范,指令的T2编码如下

0 1 0 0 0 1 | 0 0 | DN | Rm | Rdn


DN总是用作Rdn寄存器文件位置的前缀,我不明白为什么它不只是放在Rdn中。

许多thumb指令,特别是ALU操作的指令,都有三位寄存器规范,以较低的6位编码,每三位表示r0-r7。这个特定的add指令允许对低寄存器r0-r15和高寄存器r0-r15进行操作,因此其他两位需要一个原点。他们碰巧将一个放在第6位,该位与5:3一致,因此另一个位于该位之上

因此,也许他们在考虑节省一些门或可读性,或者其他一些目前无法回答的原因。因此,他们没有像在全尺寸arm指令中那样为这一特殊的一次性指令使用7:4和3:0,而是将高位放在7:6中。一个更好的问题是,为什么他们没有将左位和右位放在与其他两位相同的位置上?为什么不是[7,5,4,3][6,2,1,0]而不是[6,5,4,3]和[7,2,1,0]呢?在我看来,如果你开始使用arm thumb文档的话,这将有助于提高可读性,而这些文档最初只是打印(纸质)的,H1/H2似乎是交换的

在伪代码中,它们显示(DN:Rdn)并谈论一个四位数字,然后Rm是一个四位数字,因此这表明旧文档以不同的方式做了什么

我怀疑他们使用结尾的n作为低位,大写的n作为大位,是的,它作为RdN而不是DN会读得更好。或者Rd3会更好

指令集在某种程度上可以做任何他们想做的事情,ARM在这里也没有什么不同,早在thumb开始选择他们所选择的东西时,设计师就这样做了。武断的决定,你会很幸运地在这里找到当时在房间里的任何人,我也看到这些事情是错误的,在会议上有一件事是决定的,有人的实施是落后的,但到了房间里的时候,在测试等方面做了很多投资,就离开了。可能那些工程师已经退休了,或者不久前拿到了金降落伞,也许你会幸运的

还要了解,文档人员通常是一个独立的部门,这并不少见,因此这可能是一个游戏时间的决定(或打字错误),由一个技术编写人员决定,后来决定不再更改文档

不要在这个或某些行业术语中解读任何神奇的东西,不管怎样,这是一个坏习惯,重要的是你理解比特的含义,而不是它们的标签