Программа рисует таблицу 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
Комментариев нет:
Отправить комментарий