我在编写一个ARM程序,它将ieee编号转换为TNS格式编号。 TNS是一些超级计算机使用的格式,与ieee类似但不同。我试图用几个掩码将ieee号码的三个不同“部分”放在单独的寄存器中,以便我可以相应地移动它们。这里是我的解压子程序:在ARM中使用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
您的调用代码是什么样的? –
添加了调用代码。 –
我贴一个解决类似的问题在这里: [Stackoverflow.com臂号码转换程序] [1] [1]:http://stackoverflow.com/questions/13792564/arm -number-conversion-program/15397860#15397860 – TrevorC