tutorial raspberry instruction ensamblador data assembly arm

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.