My Project/MDE Kit

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

suvisor 2008. 2. 23. 11:58

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

필요한 파일들.
간단한 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로 전송시키면 끝.