반응형
BLUE EQU 11h ;EQU 어셈블리어 명령어는 고급언어에서 변수선언이랑 비슷하다고 보시면 됩니다.
GREEN EQU 22h ;즉 GREEN 을 오퍼랜드 자리에두면 실제로는 22h가 입력되는겁니다.
CYAN EQU 33h
RED EQU 44h
PINK EQU 55h
ORGE EQU 66h
GARAY EQU 77h
BLOCK EQU 20h
.MODEL SMALL
.CODE
ORG 100h
PROG:
;메인루틴
CALL MAIN ;이건 메인프로시저
CALL DISPCLR
MOV CORTYPE,BLUE ;(J미노)
MOV SI,0
MOV CX,2
CALL BLOCK
MOV SI,160
MOV CX,6
CALL BLOCK
MOV CORTYPE,ORGE ;(L미노)
MOV SI,176
MOV CX,6
CALL BLOCK
MOV SI,24
MOV CX,2
CALL BLOCK
MOV CORTYPE,PINK ;(T미노)
MOV SI,36
MOV CX,2
CALL BLOCK
MOV SI,192
MOV CX,6
CALL BLOCK
MOV CORTYPE,RED ;(Z미노)
MOV SI,48
MOV CX,4
CALL BLOCK
MOV SI,212
MOV CX,4
CALL BLOCK
MOV CORTYPE,GREEN ;(S미노)
MOV SI,68
MOV CX,4
CALL BLOCK
MOV SI,224
MOV CX,4
CALL BLOCK
MOV CORTYPE,CYAN ;(O미노)
MOV SI,80
MOV CX,4
CALL BLOCK
MOV SI,240
MOV CX,4
CALL BLOCK
MOV CORTYPE,GARAY ;(I미노)
MOV SI,252
MOV CX,8
CALL BLOCK
INT 20h ;도스로 돌아가기
;--------------------------
MAIN PROC NEAR ;MAIN 프로시저. (컴퓨터가 흑백인지 컬러인지 구분. 사실상 필요는없음.)
MOV AX,0
MOV ES,AX
MOV AL,ES:[449h]
CMP AL,7 ;NOT COR
JE HERC
VGA:
MOV AX,0B800h
MOV ES,AX
JMP ENND
HERC:
MOV AX,0B000h
MOV ES,AX
ENND:
RET ;메인루틴으로 돌아가기
MAIN ENDP
;--------------------
DISPCLR PROC NEAR ;DISPCLR 프로시저 (화면을 싹 다지움.)
;CLR DISP
MOV AH,6
MOV AL,0
MOV CH,0
MOV CL,0
MOV DH,25
MOV DL,80
MOV BH,0
INT 10h
RET ;메인루틴으로 돌아가기
DISPCLR ENDP
;--------------------
BLOCK PROC NEAR ;BLOCK프로시저 (미노 출력하는곳)
MOV BL,CORTYPE
BLOCKDRAW1:
MOV BYTE PTR ES:[SI],BLOCK
INC SI
MOV BYTE PTR ES:[SI],BL
INC SI
LOOP BLOCKDRAW1
RET ;메인루틴으로 돌아가기
BLOCK ENDP
CORTYPE DB 0
END PROG
비디오램에 직접 접근해서 미노들을 출력했습니다.
주석으로 설명을 하자니 코드가 상당히 난잡해질까봐 그냥 적지않았습니다. (관련내용이 복잡해서...)
어셈블리어로 그래픽하지 말라는 이유를 몸소 깨닫는 좋은(?) 시간이었습니다.
코드에 대해서 간략하게 설명해보자면,
메인루틴에서 그리고자하는 도형의 데이터를 입력한다음에
BLOCK 프로시저를 불러서 그리게 하는 겁니다.
이렇게하면 메인루틴에 BLOCK 프로시저에 인도할 데이터만 추가하고
BLOCK프로시저를 부르기만 하면 되니까 보기 더 깔끔한것 같습니다.
반응형
'어셈블리어 공부용 > x86 어셈블리어(ASSEMBLY)' 카테고리의 다른 글
emu8086으로 어셈블리어연습 [99 Bottles of Beer] (0) | 2019.08.18 |
---|---|
emu8086으로 어셈블리어연습 [어셈블리어 구구단] (2) | 2019.08.18 |
emu8086 어셈블리어 연습 [이중루프문] (0) | 2019.08.18 |
어셈블리어 INT 21h 정리 (0) | 2019.08.17 |
윈도우 10에서 도스박스로 도스디버거(DOS DEBUG) 실행하기 (0) | 2019.08.16 |
댓글