Программа рисует таблицу ASCII. Для компиляции используется flat assembler. Таблица составляется с помощью макросов на этапе компиляции. Во время выполнения таблица просто копируется в видеопамять.
org 100h
mov ax, 3
int 10h ; установка видеорежима
push 0b800h
pop es ; es = сегмент видеопамяти
mov si, table ; si = таблица, откуда читать данные
mov di, 0 ; di = куда писать
cld ; прямое направление для строковых операций
mov cx, 18*80 ; 18 строк по 80 символов
mov ah, 0Fh ; атрибут
next_char:
lodsb ; считываем символ
stosw ; записываем в видеопамять вместе с атрибутом
loop next_char
mov ah, 0 ; ждем клавишу
int 16h
ret ; выходим
; символы, используемые для построения таблицы:
VERT_LINE = 0b3h
HORIZ_LINE = 0c4h
CROSS = 0c5h
table:
; шапка таблицы:
db 3 dup(' ')
db VERT_LINE, " 0 1 2 3 4 5 6 7 "
db VERT_LINE, " 8 9 A B C D E F "
FIIL_LEN = 80 - ($-table) ; FIIL_LEN = сколько пробелов надо добавить
db FIIL_LEN dup (' ') ; дополняем строку да 80 символов пробелами
db 3 dup (HORIZ_LINE), CROSS
db 17 dup (HORIZ_LINE), CROSS
db 17 dup (HORIZ_LINE)
db FIIL_LEN dup (' ')
; содержимое таблицы:
y=0 ; y = строка
c=0 ; c = код символа
while y<16
; цифра слева от таблицы
if y<9
db ' ', y+'0', ' ' ; цифры 0, 1, ..., 9
else
db ' ', y+'0'+7,' ' ; шестнадцатиричные A, B, C, ..., F
end if
; две группы по 8 символов, разделенные вертикальной чертой
repeat 2
db VERT_LINE, ' '
repeat 8
db c, ' '
c=c+1
end repeat
end repeat
db FIIL_LEN dup (' ') ; дополняем строку да 80 символов пробелами
y=y+1
end while
Комментариев нет:
Отправить комментарий