ieee 番号を TNS 形式の番号に変換する ARM プログラムを作成しようとしています。TNS は一部のスーパー コンピューターで使用される形式で、ieee に似ていますが異なります。いくつかのマスクを使用して、ieee 番号の 3 つの異なる「部分」を別々のレジスタに配置して、それに応じて移動できるようにしようとしています。これが私のアンパックサブルーチンです:
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