Программа преобразования чисел 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