2016-09-22 7 views
1

У меня есть два регистра w1 и w2, которые я хочу хранить в стеке. Я хочу сохранить полное слово w1 и половину w2 в стек. Вот моя реализация:Ошибка шины при сохранении значения полуслова в стеке памяти в архитектуре armv8?

STR w1, [sp, #-8]! 
STRH w2, [sp, #-8]! 

При компиляции первая инструкция работает нормально, а вторая инструкция вызывает ошибку шины. Я знаю, что это проблема выравнивания, но я не могу правильно понять, почему это происходит?

Я компилирую архитектуру ARMv8 (64-bit).

ответ

0

Согласно Общему набору инструкций ARMv8, среди других документов: «... если SP используется в качестве базового регистра, то значение указателя стека перед добавлением любого смещения должно быть выровнено с квадратом (16 байт) или иначе будет создано исключение выравнивания стека ».

Я могу повторить вашу ошибку. Таким образом, SP mod 16 должен быть равен 0.

Bus error (core dumped)