POCU 아카데미용 x86 어셈블리 코딩 표준
마지막 수정일: 2024-07-17
머리말
기본 원칙
- 가독성을 최우선으로 삼는다. (대부분의 경우 코드 그 자체가 문서의 역할을 해야 함)
- 본 코딩표준을 따라 잘 작성된 기존의 코드에서 배운다.
참조문서
이 코딩 표준은 아래의 코딩 표준들에서 영감을 얻었음.
- POCU 아카데미용 6502 어셈블리 코딩 표준
- Microsoft® MASM Assembly-Language Development System Version 6.1 Reference
- Microsoft® MASM Assembly-Language Development System Version 6.1 Programmer's Guide
I. 메인 코딩 표준
- 옵코드 니모닉은 모두 소문자로 표기한다.
mov ah, 09h
-
16진수에 사용하는 문자(A-F)는 대문자로 표기한다.
mov ah, 4Ch
-
라벨명은 모두 소문자로 표기한다.
next_char:
-
전역 라벨 대신 지역 레벨을 사용하여 이름 충돌을 피한다.
-
숫자 상수는
EQU
지시어를 사용하여 정의한다.BUFSIZE EQU 255
-
변수명은 모두 소문자로 표기한다.
.DATA buffer DB BUFSIZE DB BUFSIZE+1 DUP(?)
-
어셈블리 지시문은 모두 대문자로 표기한다.
.DATA
-
사용자가 만든 매크로는 모두 대문자로 표기한다.
EXIT0 MACRO ;() <al,ah,flags> mov ah, 4Ch xor al, al int 21h ENDM
-
상수, 라벨, 매크로 이름은 구체적으로 지으려 노력한다. 예:
i
나doit
보다stu_idx
나EXIT0
가 더 좋은 이름 -
주석은 세미콜론을 사용한 한 줄짜리 주석만 허용한다.
; return value is 0 xor al, al
-
코드와 같은 줄, 즉 코드 오른쪽에 주석을 달아도 된다.
xor al, al ; return value is 0
- 코드를 다음과 같은 순서를 따라 여러 섹션으로 정리한다.
- 상수
- 변수
- 매크로
- 명령어
-
상수를 사용할 때는 매직 넘버를 사용하는 대신 언제나 이름 달린 상수를 정의해 사용한다.
틀린 방식:
mov cx, 255
올바른 방식:
BUFSIZE EQU 255 ... mov cx, BUFSIZE
-
마찬가지로 점프를 할 때도 직접 메모리 주소를 적지 않는다.
-
모든 어셈블러 경고를 고친다.
- 모든 함수/매크로 위에 다음의 정보를 포함한 주석을 단다.
- 그 함수/매크로가 하는 일에 대한 요약
- 인자 목록
- 그 함수/매크로의 반환값(들)
- 함수/매크로가 변경하는 것들
예:
sum PROC ; (s[0]) -> ax | <cx,flags> ;========================================== ; summary: Calculates the sum from 1 to n ; ; arguments: s[0] n ; ; returns: ax The sum from 1 to n ; ; modifies: cx ; flags ;==========================================
II. 소스 코드 포맷팅
-
들여 쓰기는 스페이스 4칸으로 한다.
-
피연산자 여럿일 경우, 쉼표(,)와 스페이스 한 칸으로 구분한다.
xor al, al
-
라벨은 들여 쓰지 않는다.
next_char: xor al, al
-
라벨은 한 줄을 오롯이 차지한다. 같은 줄에 주석을 적는 것은 허용한다.
틀린 방식:
accum: add di, 4
올바른 방식:
accum: ; optional comment add di, 4
-
지시문이나 매크로 안에 들어있는 지시문이나 매크로는 한 번 더 들여 쓴다.
-
지시문이나 매크로의 인자는 쉼표(,)와 스페이스 한 칸으로 구분한다.
TOP 1% 프로그래머 테크트리 | MIT급 컴공인강 | 코딩 독학순서
야근 없이 오직 실력으로 대우받는 프로그래머가 되고 싶다고요? 최저시급도 안 되는 수업료를 내고 최고연봉을 받는 프로그래머가 되세요!