Assembly ARM汇编语言菜单不工作

Assembly ARM汇编语言菜单不工作,assembly,arm,Assembly,Arm,运行程序后,无论选择哪种输入(1、2或3)echo$?总是显示r0持有139,我不知道为什么。如果我选择1,r0应该保持100,2,r0应该保持200,3,r0应该保持300 scanf不需要保留r1的内容,因为您已经通过了每个ARM过程调用标准。分支到scanf后,应重新加载r1 /*menu_prompt*/ .balign 4 menu_prompt: .asciz "Choose which problem.\nType 1 for Problem 1\nType 2 for Pr$ /

运行程序后,无论选择哪种输入(1、2或3)echo$?总是显示r0持有139,我不知道为什么。如果我选择1,r0应该保持100,2,r0应该保持200,3,r0应该保持300

scanf
不需要保留
r1
的内容,因为您已经通过了每个ARM过程调用标准。分支到
scanf
后,应重新加载
r1

/*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