assembly - raspberry - El menú del lenguaje de ensamblaje ARM no funciona
ensamblador en raspberry pi (1)
scanf
no necesita dejar el contenido de r1
como lo aprobó por ARM Procedimiento Call Standard. Debería volver a cargar r1
después de ramificar a scanf
.
/*menu_prompt*/
.balign 4
menu_prompt: .asciz "Choose which problem./nType 1 for Problem 1/nType 2 for Pr$
/*scanner*/
.balign 4
scan_pattern_int: .asciz "%d"
scan_read: .word 0
.balign 4
return: .word 0
.global main
main:
ldr r0, address_of_return
str lr, [r1]
ldr r0, address_of_menu_prompt
bl printf
ldr r0, address_of_scan_pattern_int
ldr r1, address_of_scan_read
bl scanf
ldr r1, [r1]
str lr, [r1]
ldr r0, address_of_menu_prompt
bl printf
ldr r0, address_of_scan_pattern_int
ldr r1, address_of_scan_read
bl scanf
ldr r1, [r1]
cmp r1, #1
beq in_prob_1
cmp r1, #2
beq in_prob_2
cmp r1, #3
beq in_prob_3
in_prob_1:
mov r0, #100
bal end
in_prob_2:
mov r0, #200
bal end
in_prob_3:
mov r0, #300
bal end
end:
ldr lr, address_of_return
ldr lr, [lr]
bx lr
address_of_menu_prompt: .word menu_prompt
address_of_scan_pattern_int: .word scan_pattern_int
address_of_scan_read: .word scan_read
address_of_return: .word return
después de ejecutar el programa, no importa qué entrada elijo (1,2, o 3) echo $? siempre muestra que r0 tiene 139, no estoy seguro por qué. si elijo 1 r0 debería contener 100, 2 r0 debería contener 200, 3 y r0 debería contener 300.