Проблемы с использованием ветвления в Arm Assembly - PullRequest
0 голосов
/ 15 марта 2019

Так что мой код просто отображает оба вывода, как будто он не ветвится с оператором then. Я только начал изучать руку, и я не могу понять, что происходит, и почему это не разветвляется. Любая помощь будет великолепна, так как я смотрю на это в общей сложности около 5 часов без прогресса.

Предполагается, что программа будет принимать число в качестве ввода и отображать, если оно больше или меньше 100

ldr r3, =intInput
ldr r3, [r3]
cmp r3, #100
bhs then

then:   
ldr r0, =strOutputNumLarger
bl printf

else:
ldr r0, =strOutputNumSmaller
bl printf

1 Ответ

1 голос
/ 15 марта 2019

Условная ветвь bhs then переходит к then:, если ветвь занята, а также, если она не взята. Нет очевидной ветви к else:. Конечно, первая ветвь должна быть bhs else:, а сообщения поменялись местами.

После первой ветки и ссылки есть другая пара похожих инструкций, на else:. Таким образом, должна быть безусловная ветвь для предотвращения пропуска блока кода then: в блок кода else:, пропуская его.

Так что код должен быть

ldr r3, =intInput
ldr r3, [r3]
cmp r3, #100
bhs else                       ; changed destination

then:
ldr r0, =strOutputNumSmaller   ; swapped messages
bl printf
b cont                         ; skip next code block

else:
ldr r0, =strOutputNumLarger
bl printf

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