ARM Ассамблея.Пока цикл работает неправильно - PullRequest
0 голосов
/ 22 октября 2018

Итак, мое назначение более сложное, чем просто печать чисел из цикла while, но я даже не могу заставить цикл while работать должным образом, поэтому сейчас я над этим работаю.Я пытаюсь принять пользовательский ввод, который меньше 10, а затем начать с него и выводить каждое число из входных данных до 10. Пример: ввод 7, вывод 7,8,9,10.Но это застревает в бесконечном цикле.r1 увеличивается, но на выходе он всегда равен 1 (даже если исходное число не равно 1).Что на земле я сделал?

.global main

main:

prompt:
    ldr r0, =strInputPrompt @ Put the address of my string into the first parameter
    bl printf       @ Cal the C print to display input prompt

get_input:
    ldr r0, =numInputPattern
    sub sp, sp, #4      @ update stack pointer to new loc
    mov r1, sp      @ put address into r1 for read
    bl scanf        @ scan keyboard
    ldr r1, [sp, #0]    @ The character is on the stack
    add sp, sp, #4      @ Reset the stack

    cmp r1, #10     @ compares user num to 10 and 0,
    bgt myexit      @ and if it is not in between those,
    cmp r1, #0      @ it terminates program
    ble myexit

display:
    ldr r0, =numsumstring   @loads r0 with string
    bl printf       @prints r0
loop:
    cmp r1, #10
    bgt myexit      @if value in r1 is > 10, exit
    ldr r0, = printline
    bl printf
    add r1,r1,#1    @add 1 to r1
    b loop

myexit:
    mov r7, #0x01   @ returns control to OS
    svc 0   

.data

    .balign 4
    numsumstring: .asciz "Number \t Sum\n\n"

    .balign 4
    numInputPattern: .asciz "%d"

    .balign 4
    printline: .asciz "value is %d \n"

    .balign 4
    strInputPrompt: .asciz "Input the number: "


.global printf
.global scanf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...