diff options
| author | Andrew <saintruler@gmail.com> | 2020-10-22 21:03:24 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2020-10-22 21:03:24 +0400 |
| commit | 143f34d941f32e0808fc9344d4c4126ff530d64a (patch) | |
| tree | c79fcf309ad00e52100c0da544d96d3cc6ab6617 /sem2/lab3/mydump.asm | |
Добавил решения второго семестра
Diffstat (limited to 'sem2/lab3/mydump.asm')
| -rw-r--r-- | sem2/lab3/mydump.asm | 92 |
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 |