2016-09-22 14 views
1

스택에 저장하려는 w1과 w2라는 두 개의 레지스터가 있습니다. 나는 완전한 단어 w1과 w2의 절반을 스택에 저장하고 싶다. 컴파일에BUS armv8 아키텍처의 스택 메모리에 하프 워드 값을 저장하는 동안 오류가 발생 했습니까?

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

첫 번째 명령이 잘 실행하지만 두 번째 명령은 버스 오류가 발생합니다 : 여기 내 구현입니다. 이것이 어떤 정렬 문제인지는 알지만, 왜 이런 일이 일어나고 있는지 제대로 이해할 수 없습니까?

ARMv8 (64 비트) 아키텍처 용으로 컴파일 중입니다.

답변

0

다른 문서 중에서 ARMv8 명령어 세트 개요에 따르면 "SP가 기본 레지스터로 사용되는 경우 오프셋을 추가하기 전의 스택 포인터 값은 쿼드 워드 (16 바이트) 정렬되어야합니다. 그렇지 않으면 스택 정렬 예외가 생성됩니다. "

오류를 복제 할 수 있습니다. 따라서 SP mod 16은 0이어야합니다.

Bus error (core dumped)