Программа преобразования чисел ARM

Я пытаюсь написать программу, которая преобразует число из ieee в TNS (big endian) и наоборот. Я'Я очень новичок в ARM и сборке в целом. Я'я не получаю сообщение об ошибке, он просто не работает, как задумано, и яБуду признателен, если кто-нибудь сможет взглянуть на это. Каждая строка прокомментирована, подпрограмма на самом деле здесь "распаковать ieee " процедура, она не работает, как задумано, и я не могу понять, почему. РЕДАКТИРОВАТЬ: номера IEEE и TNS состоят из 3 частей, я пытаюсь "захватить» или разделите 3 части, используя маски. Процедура распаковки использует маски для помещения каждой части в отдельный регистр, чтобы я мог манипулировать каждой частью, чтобы преобразовать ее. В настоящее время я пытаюсь подтвердить, что процедура распаковки работает, вызывая ее, а затем распечатывая регистры. Числа либо не печатают, либо печатают неверные результаты.конец редактирования Я еще не написал подпрограммы преобразования, но у меня есть алгоритм псевдокода, который я могу опубликовать, если вы 'мне нравится Просто дайте мне знать, если есть что-то еще, выЯ хотел бы знать. Код:

AREA Conversion, CODE
SWI_WriteC  EQU &0          ;output character in r0 
SWI_WriteL  EQU &2          ;output String in r0
SWI_Exit    EQU &11         ;finish program
    ENTRY

    ADR r0, STRING  ;load string
    SWI SWI_WriteL  ;print string
    LDR r1, IEEE    ;load IEEE num into r0
    BL  Print       ;print number
    BL  UnpackIEEE  ;call UnpackIEEE subroutine
    ADR r1, r4      ;
    BL  Print
    SWI     SWI_Exit    ;finish

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

ConvToTNS


Print   MOV r2,#8       ;count of nibbles = 8
LOOP    MOV r0,r1,LSR #28   ;get top nibble
    CMP     r0, #9      ;hexanumber 0-9 or A-F
    ADDGT   r0,r0, #"A"-10  ;ASCII alphabetic
    ADDLE   r0,r0, #"0" ;ASCII numeric
    SWI     SWI_WriteC  ;print character
    MOV r1,r1,LSL #4    ;shift left one nibble
    SUBS    r2,r2, #1   ;decrement nibble count
    BNE LOOP        ;if more nibbles,loop back
    MOV     pc, r14     ;return


IEEE    DCD 0x40280000  ;2.75 or 40,280,000
TNS     DCD 0x28000101  ;2.75 or 28,000,101
SMASK   DCD 0x80000000  ;Sign bit mask
EMASK   DCD 0x7F800000  ;Exponent mask
GMASK   DCD     0x007FFFFF  ;Significand mask
STRING  DCB "HI THERE",0
    END

Ответы на вопрос(1)

Ваш ответ на вопрос