본문 바로가기

My Project/MDE Kit

어셈블러 정리. 어셈블러 컴파일하기1.

지금 프로그래밍을 하면서, 어셈블러를 다루는 사람은 그다지(?) 많지를 않다...
특정분야... 에서는 아직도 많이 쓰이긴 하지만...
일단 정리를 해두자.

필요한 파일들.
간단한 196asm 파일들이다.

압출을 풀면, bin 디렉토리 안에
asm96.exe, oh.exe 두 파일이 있는데, 이넘들만 있으면,
간단하나마 hex 코드로 만들수 있다.

먼저 간단한 소스를 만든다.
이전의 mde kit에서 사용한 lcd 제어 소스를 이용한다.

이 소스를 메모장에 작성해서 lcd.a96으로 저장한다.
----------------------------------------
R0 EQU 0000H
SP EQU 18H
BREG1 EQU 20H
BREG2 EQU 21H
BREG3 EQU 22H

WBUF EQU 24H
WREG EQU 26H

LCDC EQU 0F000H
LCDD EQU LCDC+2
LCDS EQU LCDC+4

CSEG AT 4000H
LD SP,#00E0H

START:
SCALL ALLCLR
LD WBUF,#DATA1
SCALL STR_0
SCALL LN21
LD WBUF,#DATA2
SCALL STR_0
SCALL LN31
LD WBUF,#DATA3
SCALL STR_0
SCALL LN41
LD WBUF,#DATA4
SCALL STR_0

LOOP:
SCALL SH_L
SCALL TIMER
SJMP LOOP

DATA1: DCB ' 80196 KIT~~',00H
DATA2: DCB ' It is funny.',00H
DATA3: DCB ' It is MDE kit',00H
DATA4: DCB ' Good bye~ ' ,00H

STR_0:
LDB BREG1,[WBUF]+
CMPB BREG1,#0
JE STR_01
SCALL CHAROUT
SJMP STR_0

STR_01:
RET

CHAROUT:
CALL BUSY
STB BREG1,LCDD[R0]
RET

ALLCLR:
LDB BREG2,#1
SJMP LNXX

LN11:
LDB BREG2,#2
SJMP LNXX

LN21:
LDB BREG2,#0C0H
SJMP LNXX

LN31:
LDB BREG2,#11010000B
SJMP LNXX

LN41:
LDB BREG2,#11010000B
SJMP LNXX

SH_L:
LDB BREG2,#00011000B
LNXX:
SCALL BUSY
STB BREG2,LCDC[R0]
RET

BUSY:
PUSH BREG1
BUSY1:
LDB BREG2,LCDS[R0]
JBS BREG2,7,BUSY1
POP BREG1
RET

TIMER:
LD WREG,#60000
TIMER1:
NOP
NOP
NOP
NOP
NOP
DJNZW WREG,TIMER1
RET

END
-----------------------------
윈도우의 실행에 가서 cmd창을 불러온다.

컴파일러를 넣은 디렉토리로 가서

asm96 lcd.a96

명령어를 입력, 오브젝트파일이 생성된다.
이 오브젝트파일을 처리한다.

oh lcd.obj

해당 디렉토리에서 lcd.hex 파일을 확인할수 있다.

이파일을 하이퍼터미널이나 다른 시리얼통신 프로그램을 이용해서,
kit로 전송시키면 끝.