我正在阅读“ ARM体系结构参考手册”,以编写具有ARM7TDMI CPU的Game Boy Advance模拟器。我对ARM体系结构不熟悉。手册中提到“从变速杆上带出的物品”。
值是通过将(右)8位立即数旋转到任意偶数位而形成的 在32位字中的位置。如果立即旋转为零,则移位器的进位值为C的值 标志,否则将其设置为 的值的位[31]。
那是什么?这有什么用途?我需要实施吗? CPSR的C标志和“移位器的进位”之间是否有任何关系?
答案 0 :(得分:0)
由于没有任何特定的体系结构信息以及您希望模拟的确切换档操作信息,我只能给出一个模糊的答案。但是通常,进位位保留要移出寄存器的最后一位的值,无论是否导致该位“丢失”。
移位器的进位和进位标志(存储在PSR中)之间的关系是,几乎与所有其他数据处理指令一样,只有在后缀S
中出现时,才更新进位标志指令助记符。
因此,假设设置了用于算术和逻辑移位的标志(例如ASL
,LSL
),则进位标志会告诉您最近的“丢失”位的值。对于不带进位的旋转操作(例如ROR
),进位标志在旋转后镜像MSB(对于右移)或LSB(对于左移)。对于随身旋转(例如RRX
),进位标志我们用作第33位。
请参见this page of the armasm user guide及其有用的图表。
答案 1 :(得分:0)
ARM的其他报价与您的报价差不多。
除了产生移位器操作数外,移位器还会产生一个 随身携带,一些指令将其写入进位标志。
...
数据处理操作数-立即
并显示27:25 = 0b001,11:8是rotate_imm,7:0是immed_8
shifter_operand值是通过(向右)旋转 8位立即数到32位字中任何偶数位的位置。如果 立即旋转为零,移位器的进位为 C标志的值,否则将其设置为C标志的值的位[31]
考虑要旋转哪些指令但不驱动进位标志的情况,例如,ADD并不是其中之一
C标志= CarryFrom(Rn + shifter_operand)
但MOV将是主要候选人
C标志= shifter_carry_out
因此,如果rotate_imm为零,这意味着立即数在0x00000000和0x000000FF之间,对吗?然后shifter_carry_out是C标志,基本上C标志不会更改或更新。但是,如果rotate_imm不为零,那么shifter_carry_out来自结果移位的第31位,对于MOV指令(可能还有其他一些)(设置了S位),该移位成为新的C标志。
一点都不模糊,很清楚地记录在案。
请注意,有许多类似文献的宝石和未文献记录的宝石,用于查看克隆是否确实是克隆和/或IP被盗。没有那么多克隆使其成为AFAIK。 google picoturbo为了使它成为一个准确的克隆,并正确理解所有这些说明,包括不可预测的结果,其中一些是可以预见的。
ARM早在几年前就发布了Armulator源代码,基本上是使ARM产生的代码,其逻辑必须与armulator相匹配。我们可以接受并使用该许可证,并且可以假定根据许可证在法律上是免费的。 QEMU那里有一个指令集模拟器,还有其他一些,所以在围绕合法语言跳舞以制作模拟器并可能以某种形式发布(某些ARM文档专门将其称为)时,到目前为止,他们已经允许它们存在。但是,当然不要试图将它变成自己的逻辑克隆或出售/发布。
因此,您可以在硬件上尝试这样做,但是您在合法性的边缘上还在进一步跳舞。不要认为您需要这样做,因为您的报价已包含在同一文档中。