0

我正在尝试编写一个 ARM 程序,它将 ieee 编号转换为 TNS 格式编号。TNS是一些超级计算机使用的一种格式,与ieee类似,但又有所不同。我正在尝试使用几个掩码将 ieee 编号的三个不同“部分”放在单独的寄存器中,以便我可以相应地移动它们。这是我的解包子例程:

UnpackIEEE
    LDR r1, SMASK   ;load the sign bit mask into r1 
    LDR r2, EMASK   ;load the exponent mask into r2
    LDR r3, GMASK   ;load the significand mask into r3
    AND r4, r0, r1  ;apply sign mask to IEEE and save into r4
    AND r5, r0, r2  ;apply exponent mask to IEEE and save into r5
    AND r6, r0, r3  ;apply significand mask to IEEE and save into r6
    MOV     pc, r14     ;return

以下是掩码和数字声明,以便您理解:

IEEE        DCD 0x40300000  ;2.75 decimal or 01000000001100000000000000000000 binary
SMASK       DCD 0x80000000  ;Sign bit mask
EMASK       DCD 0x7F800000  ;Exponent mask
GMASK       DCD 0x007FFFFF  ;Significand mask

当我逐步调试调试器时,我得到的结果并不是我在纸上完成后所期望的。编辑:我的意思是,在子程序运行后,寄存器 4、5 和 6 都保持为 0。我不知道为什么掩码不起作用。我想我不完全理解数字是如何存储在寄存器中或如何错误地使用掩码的。任何帮助表示赞赏。如果您需要更多信息,请询问。

编辑:入口点:非常简单,只是想让这些子程序正常工作。

ENTRY

    LDR r1, IEEE    ;load IEEE num into r1
    BL  UnpackIEEE  ;call unpack sub
    SWI     SWI_Exit    ;finish
4

1 回答 1

2

这里:

LDR r1, IEEE    ;load IEEE num into r1

从您的拆包例程的外观来看,您似乎想将数字加载到r0,而不是r1. r1在您的拆包例程的第一行被破坏:

UnpackIEEE
    LDR r1, SMASK   ;load the sign bit mask into r1 
于 2012-12-17T23:14:31.583 回答