Итак, я только что закончил простую программу, которая принимает массив входными данными и возвращает его в обратном порядке ... или так я, хотя, когда я скомпилировал с использованием ARMSim (требуется для моего назначения), он вызвал у меня 2 вида ошибки: «Неверная константа литерала» и «Неправильное назначение ветви»

- это часть кода, которая наиболее важна для этого error (неправильное назначение ветки)
@ PROGRAMA
.text
.global main
main:
ldr r0, =primero
bl prints
ldr r0, adr_num @donde se guardara n
mov r1, #4 @buffer para el primer numero (que pueda ser de maximo 3 char + un terminante)
mov r2, #0 @indica que fgets debe leer de stdin
bl fgets
bl atoi @se transforma a int para poder evaluar los numeros sin considerar un posible "\n" irrelevante
mov r5, r0 @guardar el entero recibido
mov r7, r0
firstLoop:
ldr r0, =segundo
bl prints
cmp r5, #0
beq msg
ldr r0, adr_num @donde se guardara n
mov r1, #4 @buffer para el primer numero (que pueda ser de maximo 3 char + un terminante)
mov r2, #0 @indica que fgets debe leer de stdin
bl fgets
bl atoi @se transforma a int para poder evaluar los numeros sin considerar un posible "\n" irrelevante
str r6, [r0], #4 @guardo el numero en el registro
sub r5, r5, #1
b firstLoop
msg:
ldr r0, =tercero
bl prints
secondLoop:
cmp r7, #0
beq exit
ldr r0, [r6], #-4
sub r7, r7, #1
b secondLoop
.data
result_str: .asciz "Pi is approximately 22/7 = %f \n"
exit_str: .ascii "Terminating program.\n"
@Direcciones de memoria de los valores en DATOS
adr_num: .word number @Aca se define el espacio para un entero (ver el final al documento, seccion .DATA)
adr_str: .word string @Acá se define el espacio para un string (ver el final al documento, seccion .DATA)
@Lectura primer caracter (n):
ldr r0, adr_num @donde se guardara n
mov r1, #4 @buffer para el primer numero (que pueda ser de maximo 3 char + un terminante)
mov r2, #0 @indica que fgets debe leer de stdin
bl fgets
bl atoi @se transforma a int para poder evaluar los numeros sin considerar un posible "\n" irrelevante
mov r5, r0 @guardar el entero recibido
mov r0, r5 @Se mueve el resultado a el registro R0 para transformar el entero a string
ldr r1, adr_str @Se guarda el espacio suficiente para guardar el resultado de la transformacion
bl itoa
bl prints
b exit
exit:
mov r0, #0x18
mov r1, #0
swi 0x123456
@ prints: Retorna un string ASCII terminado en null a stdout
@
@ Uso abstracto:
@ prints(r0)
@ Inputs:
@ r0: direccion de memoria al string ASCII terminado en null
@ Resultado:
@ N/A, pero se escribe el string al stdout (la consola)
prints:
stmfd sp!, {r0,r1,lr}
ldr r1, =operands
str r0, [r1,#4]
bl strlen
str r0, [r1,#8]
mov r0, #0x0
str r0, [r1]
mov r0, #0x05
swi 0x123456
ldmfd sp!, {r0,r1,pc}
atoi
- это еще одна функция внизу, которая передает ascii в эквивалент в int