패미컴 게임을 만들어보자! 3일차 6502 instruction format

HyunsubYun·2023년 3월 22일
0
post-thumbnail
;This Routine reads a number form
;the terminal, adds to it, and puts
;the result back out to the terminal
;then the routine goes into an endless
;loop until stopped by operator.
;
READIN JSR INPUT   ; READ BYTE
			 LDA NUMBER
ADDIT  ADC #$02    ; ADD 2
       STA NUMBER
	     JSR OUTPUT  ; DISPLAY BYTE
DONE   JMP DONE

위 코드는 예제 코드

어셈블리 instruction 구성 요소

1.Label: READIN, ADDIT, DONE 과 같이 명령앞에 이름을 붙여주는 것이다.

label은 명령 실행중 해당 레이블로 jump 시킬때 사용이 가능하다

Data name: 데이터의 이름을 정할때 사용한다.

숫자로 된 주소대신 이름으로 식별할수 있게 해준다.

Label은 이름을 지을때 규칙이 있다

1~6 글자여야 하고,문자로 시작해야 하고 첫문단에서 시작해야 하고, 레지스터 이름들(A,X,Y)과 연산자 이름들은 사용이 불가능하다(JMP나 STA LDA등등)

다른 언어들의 변수 이름 지을때 주의해야 할 점과 비슷하다

2.컴퓨터에게 명령을 실행하는 operation

연사자는 문장의 동사와 비슷하다. 컴퓨터에게 무엇을 해야할지 말해주기 때문이다.

6502 스탠다드 연사자는

LDA 데이터를 어큐뮬레이터로 로드 해준다

ADC (캐리를 동반한 더하기를 한다)

CMP(Compare to accumulator 어큐뮬레이터와 비교한다)

BEQ(Branch if EQual)

JMP(JUMP)

STA(어큐뮬레이터로부터 데이터를 저장한다.) 등등

모든 연산자는 세글자로 돼 있고 모든 instruction엔 연산자가 있어야 한다.

3.operand 한국어로 피연사자라 부르는 연산할 대상

오퍼레이션이 동사같은 느낌이라는 오퍼랜드는 그 동작을 어디에 수행해야하는지를 알려준다.

예를들어 LDA C 는 ‘C에’ 있는 값을 어큐뮬레이터에 로드(copy)하라는 얘기다.

모든 instruction에 오퍼랜드가 들어가야 하는것은 아니다.

예를들어 TAX(Transfer A to X)라는 오퍼레이터는 어큐뮬레이터에 있는 바이트를 X 레지스터로 전송하는것이기에 오퍼레이터 그 자체로 의미를 갖는다.

operand 규칙

operand는 오퍼레이터와 최소 한칸 이상 띄워줘야한다.

operand 사이 띄워쓰기를 해선 안된다

4.주석

주석은 프로그램을 설명할때 쓰는 문장으로 어셈블러 동작에선 무시된다.

오늘은 어셈블리의 기본 구조를 파악했다 이제 조금만 더 배우면 코드를 대강 짤수도 있을것 같아 기쁘다

profile
게임 개발 지망생 입니다

0개의 댓글