Мне очень трудно понять этот вопрос на ассемблере, и, взглянув на схему меток, я просто не могу понять, почему мой ответ отличается от приведенного.
Вопрос заключается в следующем
На рисунке 5 показана программа на языке ассемблера вместе с содержимым раздела основной памяти компьютера, на котором эта программабудет выполнен на.Каждая ячейка памяти и регистр могут хранить 16-битное значение.
Набор инструкций на языке ассемблера, который использовался для написания программы, приведен в Таблица 1 на следующей странице.
Рисунок 5
LDR R1, 100
LSL R2, R1, #2
ADD R1, R1, R2
LDR R3, 101
CMP R3, R1
BEQ labela
MOV R4, #0
B labelb
labela:
MOV R4, #1
labelb:
STR R4, 102
HALT
|---------------------|----------------------|
| Memory Address | Main Memory Contents |
| (in decimal) | (in decimal) |
|---------------------|----------------------|
| 100 | 10 |
|---------------------|----------------------|
| 101 | 50 |
|---------------------|----------------------|
| 102 | 80 |
|---------------------|----------------------|
Вопрос: Заполните приведенную ниже таблицу трассировки в десятичном виде, чтобы показать, как значения, хранящиеся в регистрах и основной памяти, изменяются при выполнении программы на рис. 5.Вам может не понадобиться использовать все строки.
Таблица трассировки:
Таблица 1:
Ответ, который я придумал, таков:
Но ответ по схеме меток такой (1 добавлен в столбце 102):
Я подумал, что здесь может произойти, что программа выходит из ветви labela и затем возобновляет код в точке после того, как она разветвляется до labela.Однако, если бы это было так, тогда значение ячейки памяти 102 было бы равно 0.
Может кто-нибудь объяснить мне, почему единица переносится в ячейку памяти 102 после выполнения ветви labela?
Заранее спасибо всем, кто отвечает!Извините, если это довольно длинный вопрос, я просто застрял, и после долгих попыток выяснить это самостоятельно я не уверен, куда еще идти.