我有一个要求,我必须将存储在 2 个单独的寄存器中的 64 位数字与 64 mod 2^64 相乘。在这种情况下,两个 32 位值存储在 R4(低)和 R5(高)中 到目前为止,我已经编写了以下代码:
LDR R1,=Value
LDR R2, [R1]
MOV R3, #64
UMULL R4, R5, R2, R3
MUL R6, R4, R3
MUL R7, R5, R3
MOV R1, R6, LSR #32
MOV R2, R7, LSR #32
Value DCD 67108864
对于 mod 2^64 部分,我使用 32 位移位执行最后两个 MOV 命令。这个对吗?当我这样做时,我总是在 R1 和 R2 中得到值 0。我该怎么做才能得到 mod 2^64 = 0?