Обновление: 16.04.2009 @ 23:46 Central. Ни один из моих CMP на самом деле не работает. В значительной степени он переходит к LDR 0 = errorMessage, затем повторяет цикл, что вызывает бесконечный цикл. Все еще пытаюсь решить это.
Я пытаюсь сделать следующее:
1. Попросите пользователя ввести деньги: Никель (N), Дайм (D), Квартал (Q) или Доллары (B). Повторяйте, пока пользователь не вставит 55 или БОЛЬШЕ центов.
2. Так в чем же проблема? Допустим, пользователь вводит N, я пытаюсь сравнить INPUT со значениями ASCII (N, D, Q, B), чтобы увидеть, они совпадают, если это так, переходят к функции Одобрить , сохраняют значение в totalMoney, распечатывают, сколько денег в настоящее время вставлено, и снова вызывают getMoneyLoop. Повторяйте, пока я не достигну 55 или более центов.
Программа запустится нормально.
1.) Добро пожаловать в мой магазин
2.) Введите деньги: Никель (N) и т. Д.
3.) Пользователь вводит: "N"
Однако здесь я получаю:
Enter money: nickel(N), dime(D), quarters (Q), and one dollar bills (B).
Enter money: nickel(N), dime(D), quarters (Q), and one dollar bills (B).
Enter money: nickel(N), dime(D), quarters (Q), and one dollar bills (B).
Enter money: nickel(N), dime(D), quarters (Q), and one dollar bills (B).
Enter money: nickel(N), dime(D), quarters (Q), and one dollar bills (B).
Enter money: nickel(N), dime(D), quarters (Q), and one dollar bills (B).
Enter money: nickel(N), dime(D), quarters (Q), and one dollar bills (B).
Я пытался взломать эту загадку, но, похоже, не могу обернуться вокруг происходящего.
Спасибо,
Z
Я пытался изменить регистры. У меня была проблема с «бесконечным циклом» в моей предыдущей программе, но она была намного проще (imo). Изначально я знал, что когда я получал бесконечный цикл, это было потому, что я использовал r1 и r2, и они считаются «незарезервированными», и это может привести к некоторым неприятным вещам, и когда я изменил его на r5 и r6, он исправил его.
В этой программе я просто не знаю, правильна ли моя логика.
Я все еще довольно новый и изучаю это, но может ли кто-нибудь вести меня в правильном направлении?
Я только вставляю определенный раздел, с которым у меня возникли проблемы, и любые связанные с ним данные.
.data
askUserForMoney: .asciz "Enter money: nickel(N), dime(D), quarters (Q), and one dollar bills (B). \n"
input: .asciz "%d"
totalCash: .asciz "Total is: %d cents\n"
errorMessage: .asciz "Invalid Selection. Try Again.\n"
choice: .word 0
.text
.global main
main:
getMoney:
stmfd sp!, {lr, r4}
mov r4,#0
getMoneyLoop:
cmp r4, #55
bge exitGetMoney
ldr r0, =askUserForMoney
bl printf
ldr r0, =input
ldr r1, =choice
bl scanf
cmp r1, #78
addeq r4,r4,#5
beq approved
cmp r1, #68
addeq r4,r4,#10
beq approved
cmp r1, #81
addeq r4,r4,#25
beq approved
cmp r1, #66
addeq r4,r4,#100
beq approved
ldr r1, =errorMessage
bl printf
b getMoneyLoop
approved:
ldr r0, =totalCash
mov r1, r4
bl printf
b getMoneyLoop
exitGetMoney:
mov r0,r4
ldmfd sp!, {lr,r4}
mov pc, lr
Я не должен получать бесконечный цикл, но я.