我在編寫一個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