POCU 아카데미용 6502 어셈블리 코딩 표준

마지막 수정일: 2023-04-28

머리말

기본 원칙

  1. 가독성을 최우선으로 삼는다. (대부분의 경우 코드 그 자체가 문서의 역할을 해야 함)
  2. 본 코딩표준을 따라 잘 작성된 기존의 코드에서 배운다.

참조문서

이 코딩 표준은 아래의 코딩 표준들에서 영감을 얻었음.

I. 메인 코딩 표준

  1. 옵코드 니모닉은 모두 소문자로 표기한다.
     lda #$42
    
  2. 16진수에 사용하는 문자(A-F)는 대문자로 표기한다.

     ldy $80FE
    
  3. 심볼명은 8글자 이하로 정한다.

  4. 라벨명은 모두 소문자로 표기한다.

     exit:
    
  5. 전역 라벨 대신 지역 레벨을 사용하여 이름 충돌을 피한다.

  6. 상수명은 모두 대문자로 표기한다.

     PASSGRD=85
    
  7. 변수명은 모두 소문자로 표기한다.

     width=$4002
    
  8. 어셈블리 지시문은 모두 대문자로 표기하며 그 앞에 점(.)을 붙인다.

     .BYTE $FF
    
  9. 사용자가 만든 매크로는 모두 소문자로 표기한다.

     .MACRO remaindr
     ; code here
     .ENDM
    
     remaindr 5000, 400
    
  10. 상수, 라벨, 매크로 이름은 구체적으로 지으려 노력한다. 예: idoit보다 stu_idxpushaddr가 더 좋은 이름

  11. 주석은 세미콜론을 사용한 한 줄짜리 주석만 허용한다.

    ; do nothing and return
    jmp exit
    
  12. 코드와 같은 줄, 즉 코드 오른쪽에 주석을 달아도 된다.

    jmp exit ; do nothing and return
    
  13. 코드를 다음과 같은 순서를 따라 여러 섹션으로 정리한다.
    1. 상수
    2. 변수
    3. 매크로
    4. 명령어
  14. 데이터와 코드를 별도의 섹션(즉, 다른 주소 범위)으로 분리한다.

    틀린 방식:

        jmp start
           
    data:
        .BYTE $02, $05, $C3
       
    start:
        ldx #$FF
        ...
    

    올바른 방식:

        ldx #$FF
        ...
    
        .ORG $C000,0
    
    data:
        .BYTE $02, $05, $C3
    
  15. 상수를 사용할 때는 매직 넘버를 사용하는 대신 언제나 이름 달린 상수를 정의해 사용한다.

    틀린 방식:

    lda #85
    

    올바른 방식:

    PASSGRD = 85
    ...
    lda #PASSGRD
    
  16. 마찬가지로 점프를 할 때도 직접 메모리 주소를 적지 않는다.

  17. 모든 어셈블러 경고를 고친다.

  18. 모든 함수/매크로 위에 다음의 정보를 포함한 주석을 단다.
    1. 그 함수/매크로가 하는 일에 대한 요약
    2. 인자 목록
    3. 그 함수/매크로의 반환값(들)
    4. 함수/매크로가 변경하는 것들

    예:

    add: ;(p10,p11) -> A | <SR>
    ;==================================
    ; summary:   adds two numbers
    ;            
    ; arguments: <p10>   The first number
    ;            <p11>   The second number
    ;
    ; returns:   A       p10 + p11
    ;
    ; modifies:  SR
    ;==================================
        clc
    
        lda p10
        adc p11
    
        rts
    ;==================================
    

II. 소스 코드 포맷팅

  1. 들여 쓰기는 스페이스 4칸으로 한다.

  2. 명령어의 니모닉은 딱 한 번만 들여 쓴다.

     nop
    
  3. 명령어의 피연산자는 니모닉으로부터 한 칸만 띄어 쓴다.

     lda $8000
    
  4. 명령어 피연산자의 주소지정 모드 정보는 띄어 쓰지 않는다.

     lda $8000,x
    
  5. 라벨은 들여 쓰지 않는다.

     incre:
         inx
         iny
    
  6. 라벨은 한 줄을 오롯이 차지한다. 같은 줄에 주석을 적는 것은 허용한다.

    틀린 방식:

     add:    adc #$8080
    

    올바른 방식:

     add: ; optional comment
         adc #$8080
    
  7. 지시문이나 매크로 안에 들어있는 지시문이나 매크로는 한 번 더 들여 쓴다.

         .MACRO HAS_FLAG
             .IF flag > 0
     start:
                 ; code here
             .ENDIF
         .ENDM
    
  8. 지시문이나 매크로의 매개변수는 쉼표(,)와 스페이스 한 칸으로 구분한다.

     .ECHO "Hello", "World!", "from", NAME
    
img

프로그래밍 공부순서 | 코딩공부, 지금 시작하세요 | 평생소장 컴공강의

10년 뒤에도 살아남는 프로그래머가 되려면 기본기부터 제대로 배워야 합니다. POCU 아카데미에서 시작하세요!