str v1, [a1] ; copy a1 over to v1
Это будет хранить неопределенное содержимое регистра v1
над первым элементом массива int, переданного в a1
. Вы можете видеть, что первый элемент в исходном массиве в вашем выводе был перезаписан с помощью 0
.
Если вы хотите запомнить оригинал a1
в другом регистре, вы, вероятно, имели в виду mov v1, a1
.
str v2, [a2] ; copy a1 over to v1
Опять не то, что вы имели в виду, но с a2
, представляющим собой маленькое целое число size
Я удивлен, что эта попытка записи в нехватку памяти не сразу завершается сбоем!
bl malloc ; clears pointer for new array
Здесь вы не передаете объем памяти, который вы хотите malloc
, он получает адрес массива int и обрабатывает его как число байтов. Предполагая 32-битное int
, вы бы хотели mov a1, a2, asl#2
умножить размер int на 4 байта.
Вы, вероятно, также должны убедиться, что он не вышел из строя и вернул NULL
.
ldmfd sp!, {v1-v6, pc} ; puts all registers back into the caller
Регистр результата a1
будет указывать на конец своего массива в этой точке вместо начала. Вы захотите сохранить исходный результат malloc
и вернуть его сюда.