Увеличивающее число сборки ARM с кнопкой pu sh - PullRequest
0 голосов
/ 27 мая 2020

Я хочу задать вам вопрос о сборке ARM,

.global _start
_start:

.equ COOL, 0x393f3f38
.equ KEY_BASE_ADRESS, 0xFF200050
.equ S_SEGMENT_BASE_ADRESS, 0xFF200020

LDR R1, =KEY_BASE_ADRESS
LDR R2, =S_SEGMENT_BASE_ADRESS
MOV R8, #0x0000000F // Register that holds the number
MOV R5, #0// R5 holds the number obtanined from player  

CHECK_SWITCH:   
LDR R6, [R1]
CMP R6, #2
BEQ ADD
B CHECK_SWITCH  

ADD:
ADD R5, R5, #1
CMP R5, R8  
BNE CHECK_SWITCH

DISPLAY:
LDR R5, =COOL
STR R5, [R2]

.end

Я пытаюсь создать игру (угадайте число, но пока не очень значимое) для de1-so c. Я хочу для увеличения числа «1» игрока в R5, когда он нажимает KEY1. Также 7-й сегмент будет отображать «COOL», если число в R5 равно R8. Проблема в том, что когда я делаю sh и отпускаю KEY1, программа выполняется так быстро и завершает sh программу. Что мне нужно, так это то, что каждый pu sh и выпуск KEY1 должны увеличивать только «1». Как я могу справиться с этим? Спасибо!

Кстати, вы можете выполнить код отсюда https://cpulator.01xz.net/?sys=arm-de1soc

1 Ответ

0 голосов
/ 27 мая 2020

Ваш поток кода:

check for key press:
while key not pressed goto check for key press

add one
go to check for key press:

Как только переключатель меняет состояние, затем нажимается клавиша, он больше не ждет, он просто продолжает проскакивать через внешний (добавьте один, чтобы проверить нажатие клавиши) l oop.

То, что вы хотите, - это проверить состояние не нажата, как где-то во внешнем l oop

check for key not pressed:
while key pressed goto check for key not pressed

check for key press:
while key not pressed goto check for key press

add one
go to check for key not pressed

Или

check for key press:
while key not pressed goto check for key press

check for key not pressed:
while key pressed goto check for key not pressed

add one
go to check for key press

или

check for key press:
while key not pressed goto check for key press

add one

check for key not pressed:
while key pressed goto check for key not pressed

goto check for key press

Вы можете разделить добавляемую единицу и проверку максимального количества на две части и тоже посыпать их ...

Но, как написано, как только бит переключателя утверждает, что вы будете копировать через внешний l oop, потому что вы не можете вернуть переключатель достаточно быстро. Если вы хотите подсчитать отдельные нажатия переключателя, вам необходимо опросить как подтвержденные, так и деактивированные состояния в l oop.

Также рассмотрите возможность использования tst вместо cmp. Посмотрите это в документации.

...