복잡한 어셈블러 표현식 다루기

기술노트 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 출력 형식으로 표현하기에는 너무 복잡한 어셈블러 표현식을 작성할 경우가 있습니다.

해결 방법으로 어셈블러 표현식을 여러 표현식으로 다시 작성합니다.

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.