강좌 & 팁
1. 개요
이 문서는 GNU 어셈블러 문법에서 지시자로 사용되는 의사 명령어를 간단히 정리 한 문서이다.
더 많은 참조를 원한다면 다음 사이트를 방문한다.
http://tigcc.ticalc.org/doc/gnuasm.html#SEC70
2. 데이터 지시자
.byte <byte1> {,<byte2>} ... : 8 비트 데이터
.hword <short1> {,<short2>} ... : 16 비트 데이터
.word <word1> {, <word2>} ... : 32 비트 데이터
.ascii "<string>" : 문자열
.asciz "<string>" : 문자열 : 마지막에 자동으로 NUL 문자인 0을 추가 한다.
.space size[, fill] : 주어진 바이트 수를 할당한다. 바이트들은 0 이나 fill 값으로 채워져 있다.
3. 상수 또는 심볼릭 관련 지시자
.equ <symbol name>, <value> : 심볼값을 정의 한다.
<register_name> .req <register_name> : 레지스터의 이름을 짓는다.
.global <symbol> : 심볼을 외부 참조가 가능하게 한다
.set <variable_name>, <variable_value> : 변수 값 설정
4. 코드 블럭 관련 지시자
.code <number_of_bits> : 명령어 폭을 비트로 설정한다.
Thumb 어셈블리에서는 16을, ARM 어셈블리에서는 32를 사용한다.
.section name[, "flags"] : 새로운 코드 섹션 또는 데이터 섹션을 지정한다.
섹션 명은 링크 디스크립터에 정의 되어 있어야 한다. 일반적으로 다음항목을 사용한다.
.text : 코드 섹션
.data : 초기화된 데이터 섹션
.bss : 초기화되지 않은 데이터 섹션.
flags 는 ELF 포멧에서
a : 섹션 할당
w : 쓰기 가능한 섹션
x : 실행 가능한 섹션
.align alignment[, [fill][, max]] : 주소를 2^n 바이트 단위로 정렬한다.
어셈블러는 fill나 적절한 디폴트 값을 추가하여 정렬을 맞춘다.
만약 max보다 더 많은 fill 바이트가 필요하다면 정렬되지 않는다.
.rept count : count 만큼 코드 블록을 반복한다. .endr로 끝난다.
.endr : 반복 루프를 끝낸다.
5. 매크로
.macro name [macargs...] : name 이름의 어셈블러 매크로를 정의한다. 매크로 정의는 .endm으로 끝난다.
.endm : 매크로 정의를 끝낸다.
.exitm : 매크로를 빠져나온다. armasm에서의 유사하다.
6. 조건 컴파일
.if absolute_expression : 컴파일 조건문 시작 .endif를 사용하여 끝낸다.
.ifdef symbol : symbol 이 정의되어 컴파일 대상에 포함되는 시작 .endif를 사용하여 끝낸다.
.else : .if와 .endif와 예외 조건이다.
.elseif : else 와 if 를 합친 것이다.
.endif : 조건부 컴파일 지정을 끝낸다(.if, .ifdef, .ifndef 참고).
.err : 에러가 있으면 어셈블리를 정지시킨다.
7. 기타
.include "<filename>" : 지정한 소스 파일을 포함한다
8. GNU ASM 과 ARM ASM 의 대치표
.ascii : DCB
.byte : DCB
.hword : DCW
.word : DCD
.space : SPACE
.set : SETA
.equ : EQU
.req : RN
.code : CODE16,CODE32
.sectoin : AREA
.balign : ALAIN
.macro : MACRO
.endm : MEND
.exitm : MEXIT
.if : IF
.else : ELSE
.endif : ENDIF
.include : INCLUDE
감사합니다. ^^*