; Макрос для вывода одного символа из дампа PrintWord macro w local l1,l2,printByte push cx mov cx,2 mov bh,w mov al,bh shr al,04 ; Переводим байт в соответствующий символ по таблице ASCII printByte: cmp al,09h jbe l1 add al,37h jmp l2 l1: add al,30h l2: mov es:[si],ax mov al,bh and al,00001111b add si,2 loop printByte add di,01h pop cx endm .model small .stack 100h .data screenArr dw 1920 dup (0) .code .486 start: mov ax,@DATA mov ds,ax ; Записываем в регистр es адрес начала видеопамяти mov ax,0b800h mov es,ax ; Обнуляем счётчики mov si,0 mov di,0 ; Устанавливаем атрибут выводимых символов (белые символы, чёрный фон) mov ah,7h ; Вычисляем размер программы mov cx,offset exit sub cx,offset start ; Очистим экран clearScreen: PUSH cx PUSH si MOV cx,4000 ; 80 * 25 * 2 clearScr: MOV es:[si],0000h INC si LOOP clearScr POP si POP cx ; Выводим значения дампа памяти printDump: mov al,cs:[di] PrintWord al loop printDump ; Приостанавливаем программу для того, чтобы прочитать дамп input: MOV ah,07h INT 21h exit: mov ax,4C00h int 21h END start