2012-12-17 47 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

檢查出來:) –