|
|
.MODEL SMALL
.STACK 64
DATA SEGMENT
NUM DB 00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA ;initialize Data Segment register
MOV DS,AX
CALL CLS ;clear screen
MOV CX,0100H ;counter=256(number of ascii characters)
MOV DX,0000H ;cursor at top-left corner
AGAIN: PUSH CX
PUSH DX
CALL CURSOR ;cursor set for d1
MOV AL,NUM
AND AL,0F0H
MOV CL,04H
SHR AL,CL ;higher nibble of ascii index
ADD AL,30H
CMP AL,3AH
JC L1
ADD AL,07H ;ascii equivalent of higher nibble
L1: CALL PCHAR ;print higher nibble
POP DX
INC DL
PUSH DX
CALL CURSOR ;cursor set for d2
MOV AL,NUM
AND AL,0FH ;lower nibble of ascii index
ADD AL,30H
CMP AL,3AH
JC L2
ADD AL,07H ;ascii equivalent of lower nibble
L2: CALL PCHAR ;print lower nibble
POP DX
ADD DL,02H
PUSH DX
CALL CURSOR ;cursor set for ascii character
MOV AL,NUM
CALL PCHAR ;print ascii character
POP DX
POP CX
ADD DL,02H
CMP DL,50H
JC L3
MOV DL,00H ;new line
INC DH
L3: INC NUM ;NUM holds next ascii character
LOOP AGAIN
MOV AX,4C00H ;terminate program
INT 21H
;CLEARS SCREEN
CLS: MOV AX,0600H
MOV BH,07H
MOV CX,0000H
MOV DX,184FH
INT 10H
RET
;SETS CURSOR POSITION AT (DL,DH)
CURSOR: MOV AH,02H
MOV BH,00H
INT 10H
RET
;PRINTS CHARACTER AT CURRENT CURSOR POSITION
PCHAR: MOV AH,09H
MOV BX,0007H
MOV CX,01H
INT 10H
RET
CODE ENDS
END START
|
|
|