У меня было задано несколько вопросов, один из них:
Какая из этих инструкций ARM очищает регистр r5, так что все его биты установлены в '0'?
and r5, r5, #0
eor r5, r5, r5
lsr r5, #32
sub r5, r5, r5
Насколько я понимаю, sub r5, r5, r5
очищает регистр, поскольку он вычитает число из себя.and
и eor
явно выглядят неправильно.
lsr r5, #32
также очищает регистр?Он сдвигает регистр r5 на 32 бита, верно?Таким образом, для этой инструкции имеет смысл также очистить регистр.
В связи с этим мне также нужно интерпретировать этот код:
Что такоесвязь между содержимым регистра r0 и регистра r1 при выполнении следующей последовательности инструкций ARM?
mov r0, #12
mov r1, #1
start:
cmp r0, #0
ble end
mul r1, r0, r1
sub r0, r0, #1
b start
end:
Я не совсем уверен, что делает cmp r0, #0
и изменяет ли оно значениеr0 в конце.Я знаю, что он сравнивает значение.
Итак, насколько я понимаю, после запуска этого кода, mul r1, r0, r1
означает, что r1 установлено равным 12 как 1 * 12 = 12 (если cmp r0, #0 не влияет на значение r0, которое я не знаю).
Итак, r1 установлен на 12 - 1 = 11.
Может кто-нибудь уточнить, если я получил правильныйзначения для r0 (12) и r1 (11) после запуска этого кода, и что именно cmp r0, #0
и ble end
делает здесь и как это влияет на регистр r0, если вообще?