복잡한 어셈블러 표현식 다루기
기술노트 28162
아키텍처:
ARM, RH850, RISC-V, RL78, RX, SH, STM8
컴포넌트:
assembler
업데이트:
2021-05-04 오전 5:03
소개
본 기술 노트는 다음의 진단 메세지를 유발하는 복잡한 어셈블러 표현식을 다루는 방법을 설명합니다:
Error[472]: Expression is too complex
Error[109]: Expression is too complex
알림: 에러 메세지는 소스 상의 마지막 라인을 가리킵니다. 따라서 지원되지 않는 표현식은 에러 메세지가 가리키는 라인 위의 어딘가에 있습니다.
논의
배경지식
Elf 파일 형식은 다음의 제약을 가지고 있습니다.:
어셈블러 표현식은 링킹 과정에서 해석된(resolved) 하나의 기호만 참조할 수 있습니다.
따라서, 표현식에 두개의 기호를 사용할때, 링킹 과정에서 해석된(resolved) 다면 사용할 수 없습니다.
예제
하나의 표현식에 링킹 과정에서 해석(resolved) 되어야 할 기호가 두 개이기 때문에, 다음 예제는 어셈블될 수 없습니다.
Stack_Size EQU 0x00000800 ;; fixed value
Stack_Mem DS8 Stack_Size
Heap_Size EQU 0x00001000 ;; fixed value
Heap_Mem DS8 Heap_Size
set_up
LDR R2, = (Heap_Mem + Stack_Mem)
제안
여러 어셈블러 문장으로 소스를 다시 작성한다:
set_up
LDR R0, = Heap_Mem
LDR R1, = Stack_Mem
ADD R2,R0,R1
결론
ELF 출력 형식으로 표현하기에는 너무 복잡한 어셈블러 표현식을 작성할 경우가 있습니다.
해결 방법으로 어셈블러 표현식을 여러 표현식으로 다시 작성합니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.