strb r3, [r1]
- магазин байтов. Конечно, он хранит только один байт.
uxtb r3, r1
расширяет ноль байт в регистр, поэтому в хранилище слов str r3, [r1]
будет храниться 4 байта, а старшие 3 байта - все нули. Попробуйте это с начальным значением в памяти, равным 0xFFFFFFFF
, чтобы вы могли увидеть разницу между хранением байта и хранением слова с расширением нуля.
Если вы хотите сохранить полное значение 370
, просто не усекайте его до 8 бит перед сохранением!
Кроме того, вы должны поставить .align
перед меткой var1:
(и .word 0
). .align
расширяется до отступов на своем месте; Если вы хотите, чтобы var1
было выровнено, вам нужно добраться до границы выравнивания first .
Кроме того, используйте отладчик для проверки регистров и Память как один шаг. Было бы очевидно, что ваш 370
был усечен до (uint8_t)370
на uxtb
(байт без знака).
Плюс, ваш код не печатает слово из памяти, он только пропускает r3
для печати. Таким образом, вы не могли видеть разницу между хранилищем байтов, оставляющим старшие байты неизмененными, и хранилищем слов с этой ошибочной отладочной печатью. Использование отладчика намного лучше.