2012-12-17 53 views
0

我在编写一个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 
+0

您的调用代码是什么样的? –

+0

添加了调用代码。 –

+0

我贴一个解决类似的问题在这里: [Stackoverflow.com臂号码转换程序] [1] [1]:http://stackoverflow.com/questions/13792564/arm -number-conversion-program/15397860#15397860 – TrevorC

回答

2

这里:

LDR r1, IEEE ;load IEEE num into r1 

从你的日常拆包的外观,它看起来像要数加载到r0,不r1r1在您的解包程序的第一行得到破坏:

UnpackIEEE 
    LDR r1, SMASK ;load the sign bit mask into r1 
+0

检查出来:) –