summaryrefslogtreecommitdiff
path: root/sem2/lab3/mydump.asm
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2020-10-22 21:03:24 +0400
committerAndrew <saintruler@gmail.com>2020-10-22 21:03:24 +0400
commit143f34d941f32e0808fc9344d4c4126ff530d64a (patch)
treec79fcf309ad00e52100c0da544d96d3cc6ab6617 /sem2/lab3/mydump.asm
Добавил решения второго семестра
Diffstat (limited to 'sem2/lab3/mydump.asm')
-rw-r--r--sem2/lab3/mydump.asm92
1 files changed, 92 insertions, 0 deletions
diff --git a/sem2/lab3/mydump.asm b/sem2/lab3/mydump.asm
new file mode 100644
index 0000000..490283b
--- /dev/null
+++ b/sem2/lab3/mydump.asm
@@ -0,0 +1,92 @@
+; Макрос для вывода одного символа из дампа
+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