我正在尝试编写一个 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