summaryrefslogtreecommitdiff
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
Добавил решения второго семестра
-rw-r--r--TASM/DEBUG.EXEbin0 -> 22928 bytes
-rw-r--r--TASM/DPMI16BI.OVLbin0 -> 65376 bytes
-rw-r--r--TASM/DPMILOAD.EXEbin0 -> 22212 bytes
-rw-r--r--TASM/DPMIMEM.DLLbin0 -> 24932 bytes
-rw-r--r--TASM/TAD.BAT3
-rw-r--r--TASM/TADL.BAT13
-rw-r--r--TASM/TASM.EXEbin0 -> 129266 bytes
-rw-r--r--TASM/TD.EXEbin0 -> 492768 bytes
-rw-r--r--TASM/TLINK.EXEbin0 -> 150569 bytes
-rw-r--r--TASM/cmd.bat1
-rw-r--r--sem2/lab1/hel.bat3
-rw-r--r--sem2/lab1/hel1.bat3
-rw-r--r--sem2/lab1/hello1.asm17
-rw-r--r--sem2/lab1/hello11.asm17
-rw-r--r--sem2/lab1/hello2.asm22
-rw-r--r--sem2/lab1/hello3.asm15
-rw-r--r--sem2/lab2/lab2_guschin.pdfbin0 -> 88793 bytes
-rw-r--r--sem2/lab2/task2/task2.asm40
-rw-r--r--sem2/lab2/task3/run.bat3
-rw-r--r--sem2/lab2/task3/task3.asm37
-rw-r--r--sem2/lab3/Dump.asm80
-rw-r--r--sem2/lab3/arr.asm36
-rw-r--r--sem2/lab3/draw.asm117
-rw-r--r--sem2/lab3/mydump.asm92
-rw-r--r--sem2/lab3/run.bat3
-rw-r--r--sem2/lab3/vdraw.asm59
-rw-r--r--sem2/lab3/vdraw2.asm68
-rw-r--r--sem2/lab3/vdump.asm128
-rw-r--r--sem2/lab4/TD/TD.EXEbin0 -> 192448 bytes
-rw-r--r--sem2/lab4/TD/TD.OVLbin0 -> 108640 bytes
-rw-r--r--sem2/lab4/TD/TD386.EXEbin0 -> 23504 bytes
-rw-r--r--sem2/lab4/TD/TDCONFIG.TDbin0 -> 1059 bytes
-rw-r--r--sem2/lab4/TD/TDH386.SYSbin0 -> 6428 bytes
-rw-r--r--sem2/lab4/TD/TDHELP.TDHbin0 -> 114748 bytes
-rw-r--r--sem2/lab4/TD/TDINST.EXEbin0 -> 81692 bytes
-rw-r--r--sem2/lab4/TD/TDMAP.EXEbin0 -> 16240 bytes
-rw-r--r--sem2/lab4/TD/TDREMOTE.EXEbin0 -> 19932 bytes
-rw-r--r--sem2/lab4/TD/TDRF.EXEbin0 -> 16470 bytes
-rw-r--r--sem2/lab4/TD/TDSTRIP.EXEbin0 -> 11954 bytes
-rw-r--r--sem2/lab4/run.bat3
-rw-r--r--sem2/lab4/task3.asm40
-rw-r--r--sem2/lab5/DumpTSR.asm291
-rw-r--r--sem2/lab5/TD/TD.EXEbin0 -> 192448 bytes
-rw-r--r--sem2/lab5/TD/TD.OVLbin0 -> 108640 bytes
-rw-r--r--sem2/lab5/TD/TD386.EXEbin0 -> 23504 bytes
-rw-r--r--sem2/lab5/TD/TDCONFIG.TDbin0 -> 1059 bytes
-rw-r--r--sem2/lab5/TD/TDH386.SYSbin0 -> 6428 bytes
-rw-r--r--sem2/lab5/TD/TDHELP.TDHbin0 -> 114748 bytes
-rw-r--r--sem2/lab5/TD/TDINST.EXEbin0 -> 81692 bytes
-rw-r--r--sem2/lab5/TD/TDMAP.EXEbin0 -> 16240 bytes
-rw-r--r--sem2/lab5/TD/TDREMOTE.EXEbin0 -> 19932 bytes
-rw-r--r--sem2/lab5/TD/TDRF.EXEbin0 -> 16470 bytes
-rw-r--r--sem2/lab5/TD/TDSTRIP.EXEbin0 -> 11954 bytes
-rw-r--r--sem2/lab5/examp.asm54
-rw-r--r--sem2/lab5/gavno.asm26
-rw-r--r--sem2/lab5/jee.asm27
-rw-r--r--sem2/lab5/resident.asm30
-rw-r--r--sem2/lab5/run.bat3
-rw-r--r--sem2/lab5/task.asm114
-rw-r--r--sem2/lab5/test.asm105
60 files changed, 1450 insertions, 0 deletions
diff --git a/TASM/DEBUG.EXE b/TASM/DEBUG.EXE
new file mode 100644
index 0000000..7065b70
--- /dev/null
+++ b/TASM/DEBUG.EXE
Binary files differ
diff --git a/TASM/DPMI16BI.OVL b/TASM/DPMI16BI.OVL
new file mode 100644
index 0000000..53ffe53
--- /dev/null
+++ b/TASM/DPMI16BI.OVL
Binary files differ
diff --git a/TASM/DPMILOAD.EXE b/TASM/DPMILOAD.EXE
new file mode 100644
index 0000000..17881fa
--- /dev/null
+++ b/TASM/DPMILOAD.EXE
Binary files differ
diff --git a/TASM/DPMIMEM.DLL b/TASM/DPMIMEM.DLL
new file mode 100644
index 0000000..1d24230
--- /dev/null
+++ b/TASM/DPMIMEM.DLL
Binary files differ
diff --git a/TASM/TAD.BAT b/TASM/TAD.BAT
new file mode 100644
index 0000000..47dece5
--- /dev/null
+++ b/TASM/TAD.BAT
@@ -0,0 +1,3 @@
+tasm /zd /zi %1.asm
+tlink /x /v %1
+del %1.obj \ No newline at end of file
diff --git a/TASM/TADL.BAT b/TASM/TADL.BAT
new file mode 100644
index 0000000..b2f2890
--- /dev/null
+++ b/TASM/TADL.BAT
@@ -0,0 +1,13 @@
+@echo off
+tasm /z /zi /n %1, %1, %1
+if errorlevel 1 goto err
+tlink /x /v %1, %1
+del %1.obj
+goto end
+:err
+echo 訡 ࠭樨
+goto fin
+:end
+echo ᥠ
+:fin
+
diff --git a/TASM/TASM.EXE b/TASM/TASM.EXE
new file mode 100644
index 0000000..f3867a6
--- /dev/null
+++ b/TASM/TASM.EXE
Binary files differ
diff --git a/TASM/TD.EXE b/TASM/TD.EXE
new file mode 100644
index 0000000..dd5cd4e
--- /dev/null
+++ b/TASM/TD.EXE
Binary files differ
diff --git a/TASM/TLINK.EXE b/TASM/TLINK.EXE
new file mode 100644
index 0000000..b46896d
--- /dev/null
+++ b/TASM/TLINK.EXE
Binary files differ
diff --git a/TASM/cmd.bat b/TASM/cmd.bat
new file mode 100644
index 0000000..9d35dfe
--- /dev/null
+++ b/TASM/cmd.bat
@@ -0,0 +1 @@
+cmd.exe
diff --git a/sem2/lab1/hel.bat b/sem2/lab1/hel.bat
new file mode 100644
index 0000000..946ebf1
--- /dev/null
+++ b/sem2/lab1/hel.bat
@@ -0,0 +1,3 @@
+TASM /L HELLO11
+TLINK HELLO11
+HELLO11.EXE
diff --git a/sem2/lab1/hel1.bat b/sem2/lab1/hel1.bat
new file mode 100644
index 0000000..00ca460
--- /dev/null
+++ b/sem2/lab1/hel1.bat
@@ -0,0 +1,3 @@
+TASM /L %1
+TLINK %1
+%1.EXE
diff --git a/sem2/lab1/hello1.asm b/sem2/lab1/hello1.asm
new file mode 100644
index 0000000..795d939
--- /dev/null
+++ b/sem2/lab1/hello1.asm
@@ -0,0 +1,17 @@
+; Program Hello1
+.MODEL small
+.STACK 100h
+.DATA
+Hello DB 'Hello!$'
+
+.CODE
+start:
+ MOV ax,@DATA
+ MOV ds,ax
+ LEA dx,Hello
+ MOV ah,09h
+ INT 21h
+ MOV ax,4c00h
+ INT 21h
+END start
+
diff --git a/sem2/lab1/hello11.asm b/sem2/lab1/hello11.asm
new file mode 100644
index 0000000..f039220
--- /dev/null
+++ b/sem2/lab1/hello11.asm
@@ -0,0 +1,17 @@
+; Program Hello1
+.MODEL small
+.STACK 100h
+.DATA
+Hello DB 'Hello, World!$'
+
+.CODE
+start:
+ MOV ax,@DATA
+ MOV ds,ax
+ LEA dx,Hello
+ MOV ah,09h
+ INT 21h
+ MOV ax,4c00h
+ INT 21h
+END start
+
diff --git a/sem2/lab1/hello2.asm b/sem2/lab1/hello2.asm
new file mode 100644
index 0000000..df7596d
--- /dev/null
+++ b/sem2/lab1/hello2.asm
@@ -0,0 +1,22 @@
+; Program Hello2
+OurStack SEGMENT PARA STACK 'STACK'
+DB 64 DUP (?)
+OurStack ENDS
+
+OurData SEGMENT PARA PUBLIC 'DATA'
+Hello DB 'Hello!$'
+OurData ENDS
+
+OurCode SEGMENT PARA PUBLIC 'CODE'
+ASSUME CS:OurCode, DS:OurData, SS:OurStack
+Start:
+ MOV ax,OurData
+ MOV ds,ax
+ LEA dx,Hello
+ MOV ah,09h
+ INT 21h
+ MOV ah,4Ch
+ MOV al,00h
+ INT 21h
+OurCode ENDS
+END Start
diff --git a/sem2/lab1/hello3.asm b/sem2/lab1/hello3.asm
new file mode 100644
index 0000000..6149972
--- /dev/null
+++ b/sem2/lab1/hello3.asm
@@ -0,0 +1,15 @@
+; Program Hello3
+.MODEL small
+.CODE
+ORG 100h
+begin:
+ JMP start
+ Hello DB 'Hello!$'
+start:
+ LEA dx,Hello
+ MOV ah,09h
+ INT 21h
+ MOV ah,4Ch
+ MOV al,00h
+ INT 21h
+END begin
diff --git a/sem2/lab2/lab2_guschin.pdf b/sem2/lab2/lab2_guschin.pdf
new file mode 100644
index 0000000..7d91eb5
--- /dev/null
+++ b/sem2/lab2/lab2_guschin.pdf
Binary files differ
diff --git a/sem2/lab2/task2/task2.asm b/sem2/lab2/task2/task2.asm
new file mode 100644
index 0000000..521a215
--- /dev/null
+++ b/sem2/lab2/task2/task2.asm
@@ -0,0 +1,40 @@
+.286 ; Директива, позволяющая использовать непривилегированные инструкции процессора 80286 и инструкции арифметического сопроцессора 80287
+.model small ; Определение памяти ближнего типа
+.code ; Начало сегмента с кодом
+org 100h ; Смещение адресации на 100h байт
+begin:
+ JMP start ; Безусловный переход к метке start
+ trans:
+ PUSHA ; Сохранение содержимого регистров в стек
+ XOR cx,cx ; Обнуление регистра cx
+ isDiv:
+ XOR dx,dx ; Обнуление регистра dx
+ DIV bx ; Деление значений регистров ax на bx
+ PUSH dx ; Помещение значение регистра dx в стек
+ INC cx ; Увеличение значения регистра cx на единицу
+ OR ax,ax ; Попарное сложение всех битов операндов
+ JNZ isDiv ; Осуществление перехода, если значение регистра ax не равно 0
+ isOut:
+ POP ax ; Помещение значения вершины стека в регистр ax (при этом указатель стека уменьшается на единицу)
+ CMP al,9 ; Сравнение значения регистра al с числом 9
+ JLE noHex ; Переход к метке noHex, если al <= 9
+ ADD al,7 ; Прибавление числа 7 к регистру al
+ noHex:
+ ADD al,30h ; Прибавление числа 30h к регистру al
+ INT 29h ; Прерывание для вывода символа (Обычно, вызов функции 0Eh прерывания 10h)
+ LOOP isOut ; Вычитание из регистра cx единицы. Если значение регистра cx не равно 0, то выполнить переход на метку isOut
+ POPA ; Загрузка из стека значение всех регистров
+ ret ; Возврат к точке вызова
+ start:
+ INT 11h ; Запрос списка подключенного оборудования. Результат помещается в регистр ax
+ MOV bx,2 ; Помещение в регистр bx числа 2
+ CALL trans ; Вызов метки trans
+ MOV ax,10 ; Помещение в регистр ax числа 10
+ MOV dx,ax ; Помещение в регистр dx значение числа ax
+ MOV ax,200h ; Помещение в регистр ax значения 200h
+ INT 21h ; Вызов функции DOS
+ INT 12h ; Запрос размера физической памяти. Результат помещается в регистр ax
+ CALL trans ; Вызов метки trans
+ MOV ax,4C00h; Помещение в регистр ax значения 4C00h (функция DOS для завершения программы)
+ INT 21h ; Вызов функции DOS
+END begin ; Окончание программы
diff --git a/sem2/lab2/task3/run.bat b/sem2/lab2/task3/run.bat
new file mode 100644
index 0000000..1297bac
--- /dev/null
+++ b/sem2/lab2/task3/run.bat
@@ -0,0 +1,3 @@
+C:\TASM.EXE %1
+C:\TLINK.EXE %1
+%1
diff --git a/sem2/lab2/task3/task3.asm b/sem2/lab2/task3/task3.asm
new file mode 100644
index 0000000..0ef9e70
--- /dev/null
+++ b/sem2/lab2/task3/task3.asm
@@ -0,0 +1,37 @@
+.286
+.model tiny
+.data
+string db ?,?,' ',?,?,' ',?,?,0Ah,0Dh,'$'
+
+.code
+org 100h
+start:
+ MOV ah,1
+ INT 1Ah
+ CMP bx,dx
+ MOV ah,2
+ INT 1Ah
+ MOV ah,0
+ MOV al,ch
+ ROR ax,4
+ SHR ah,4
+ OR ax,'00'
+ MOV word ptr string,ax
+ MOV ah,0
+ MOV al,cl
+ ROR ax,4
+ SHR ah,4
+ OR ax,'00'
+ MOV word ptr string+3,ax
+ MOV ah,0
+ MOV al,dh
+ ROR ax,4
+ SHR ah,4
+ OR ax,'00'
+ MOV word ptr string+6,ax
+ MOV ah,9
+ MOV dx,offset string
+ INT 21h
+ MOV ax,4C00h
+ INT 21h
+end start
diff --git a/sem2/lab3/Dump.asm b/sem2/lab3/Dump.asm
new file mode 100644
index 0000000..93092f3
--- /dev/null
+++ b/sem2/lab3/Dump.asm
@@ -0,0 +1,80 @@
+;----------------------------------------
+OutChar macro char ;
+local l1,l2,loopCX
+push cx
+mov cx,2
+mov bh,char
+mov al,bh
+shr al,04
+
+loopCX:
+ 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 loopCX
+
+add di,01h
+pop cx
+endm
+;----------------------------------------
+ClrScr macro ;
+push ax
+push bx
+push cx
+push dx
+mov ah,06h ;AH 06 ()
+mov bh,07 ; (/)
+mov cx,0000 ;
+mov dx,184Fh ;
+int 10h ; BIOS
+pop dx
+pop cx
+pop bx
+pop ax
+endm
+;----------------------------------------------
+
+.model small
+.stack 100h
+.data
+.code
+start:
+.486
+mov ax,@DATA
+mov ds,ax
+
+mov ax,0b800h
+mov es,ax ; es
+mov si,0 ;
+mov di,0 ;
+mov ah,7h ;
+mov cx,offset exit
+sub cx,offset start ; - = !!!
+ClrScr
+
+CXne0:
+ mov al,cs:[di]
+ OutChar al
+loop Cxne0
+
+; input:
+; MOV dx,1900h
+; INT 10h
+
+ ; MOV ah,07h
+ ; INT 21h
+
+
+
+exit:
+mov ax,4C00h
+int 21h
+END start
diff --git a/sem2/lab3/arr.asm b/sem2/lab3/arr.asm
new file mode 100644
index 0000000..a831fb3
--- /dev/null
+++ b/sem2/lab3/arr.asm
@@ -0,0 +1,36 @@
+.model small
+.stack 100h
+.data
+
+screenArr db 2000 dup (0)
+
+.code
+.486
+
+start:
+ MOV ax,@DATA
+ MOV ds,ax
+
+ MOV cx, 40
+ MOV bx, OFFSET screenArr
+
+ ; MOV byte ptr [bx], 00h
+ ; INC bx
+ ; MOV byte ptr [bx], 00h
+
+lp:
+ MOV byte ptr [bx], 0
+ inc bx
+LOOP lp
+
+; input:
+; MOV dx,1900h
+; INT 10h
+
+; MOV ah,07h
+; INT 21h
+
+exit:
+ MOV ax,4C00h
+ INT 21h
+END start \ No newline at end of file
diff --git a/sem2/lab3/draw.asm b/sem2/lab3/draw.asm
new file mode 100644
index 0000000..7a3d30f
--- /dev/null
+++ b/sem2/lab3/draw.asm
@@ -0,0 +1,117 @@
+.model small
+.stack 100h
+.data
+
+screenArr db 2000 dup (0)
+
+.code
+.486
+
+start:
+ MOV ax,@DATA
+ MOV ds,ax
+
+ MOV ch,24
+ MOV cl,80
+
+ MOV bx, offset screenArr
+
+lines:
+ MOV dh,24
+ SUB dh,ch
+
+ columns:
+ MOV dl,80
+ SUB dl,cl
+
+ ; Устанавливаем курсор
+ PUSH bx
+ MOV bx,00h
+
+ MOV ah,02h
+ INT 10h
+
+ POP bx
+
+ ; Читаем символ
+ PUSH bx
+ MOV bx,00h
+
+ MOV ah,08h
+ INT 10h
+
+ POP bx
+
+ ; Записываем прочитанные символ в массив
+ MOV byte ptr [bx],al
+ INC bx
+
+ ; Пишем символ
+ PUSH bx
+ MOV bx,00h
+
+ MOV ah,0Ah
+ MOV al,'a'
+ INT 10h
+
+ POP bx
+
+ DEC cl
+ JNZ columns
+
+
+
+ DEC ch
+ JNZ lines
+
+input:
+ MOV dx,1900h
+ INT 10h
+
+ MOV ah,07h
+ INT 21h
+
+MOV bx, OFFSET screenArr
+
+lines2:
+ MOV dh,24
+ SUB dh,ch
+
+ columns2:
+ MOV dl,80
+ SUB dl,cl
+
+ ; Устанавливаем курсор
+ PUSH bx
+ MOV bx,00h
+
+ MOV ah,02h
+ INT 10h
+
+ POP bx
+
+
+ ; Пишем символ
+ PUSH dx
+ MOV dh,[bx]
+ PUSH bx
+
+ MOV bx,00h
+ MOV al,dh
+ INT 10h
+
+ POP bx
+ POP dx
+
+ INC bx
+
+ DEC cl
+ JNZ columns2
+
+ DEC ch
+ JNZ lines2
+
+exit:
+ MOV ax,4C00h
+ INT 21h
+END start \ No newline at end of file
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
diff --git a/sem2/lab3/run.bat b/sem2/lab3/run.bat
new file mode 100644
index 0000000..fde0b9f
--- /dev/null
+++ b/sem2/lab3/run.bat
@@ -0,0 +1,3 @@
+C:\TASM %1
+C:\TLINK %1
+%1.EXE \ No newline at end of file
diff --git a/sem2/lab3/vdraw.asm b/sem2/lab3/vdraw.asm
new file mode 100644
index 0000000..d751f28
--- /dev/null
+++ b/sem2/lab3/vdraw.asm
@@ -0,0 +1,59 @@
+.model small
+.stack 100h
+.data
+
+screenArr dw 1920 dup (0)
+
+.code
+start:
+.486
+mov ax,@DATA
+mov ds,ax
+
+mov ax,0b800h
+mov es,ax ;в es начало видеопамяти
+mov si,0 ;смещение относительно начала видеопамяти
+mov ah,7h ;атрибуты выводимых символов
+
+mov cx,3840
+mov bx, offset screenArr
+
+saveScreen:
+ mov dx, es:[si]
+ mov word ptr [bx], dx
+ inc si
+ inc bx
+loop saveScreen
+
+mov cx, 3840
+mov si, 0
+
+fillScreen:
+ mov al,0
+ mov es:[si], ax
+ add si, 2
+loop fillScreen
+
+input:
+ MOV dx,1900h
+ INT 10h
+
+ MOV ah,07h
+ INT 21h
+
+mov bx, offset screenArr
+mov si, 0
+mov cx, 3840
+
+restoreScreen:
+ mov dx, word ptr [bx]
+ mov es:[si], dx
+ inc bx
+ inc si
+loop restoreScreen
+
+exit:
+ mov ax,4C00h
+ int 21h
+
+END start \ No newline at end of file
diff --git a/sem2/lab3/vdraw2.asm b/sem2/lab3/vdraw2.asm
new file mode 100644
index 0000000..4223179
--- /dev/null
+++ b/sem2/lab3/vdraw2.asm
@@ -0,0 +1,68 @@
+.model small
+.stack 100h
+.data
+
+screenArr dw 1920 dup (0)
+
+.code
+
+clearScreen PROC NEAR
+
+ mov cx,3840
+ mov bx, offset screenArr
+
+ saveScreen:
+ mov dx, es:[si]
+ mov word ptr [bx], dx
+ inc si
+ inc bx
+ loop saveScreen
+
+ mov cx, 3840
+ mov si, 0
+
+ fillScreen:
+ mov al,0
+ mov es:[si], ax
+ add si, 2
+ loop fillScreen
+
+ ret
+
+clearScreen ENDP
+
+start:
+.486
+mov ax,@DATA
+mov ds,ax
+
+mov ax,0b800h
+mov es,ax ;в es начало видеопамяти
+mov si,0 ;смещение относительно начала видеопамяти
+mov ah,7h ;атрибуты выводимых символов
+
+CALL clearScreen
+
+input:
+ MOV dx,1900h
+ INT 10h
+
+ MOV ah,07h
+ INT 21h
+
+mov bx, offset screenArr
+mov si, 0
+mov cx, 3840
+
+restoreScreen:
+ mov dx, word ptr [bx]
+ mov es:[si], dx
+ inc bx
+ inc si
+loop restoreScreen
+
+exit:
+ mov ax,4C00h
+ int 21h
+
+END start \ No newline at end of file
diff --git a/sem2/lab3/vdump.asm b/sem2/lab3/vdump.asm
new file mode 100644
index 0000000..c2f6f54
--- /dev/null
+++ b/sem2/lab3/vdump.asm
@@ -0,0 +1,128 @@
+.model small
+.stack 100h
+.data
+
+screenArr dw 1920 dup (0)
+
+.code
+.286
+
+printWord PROC NEAR
+
+ PUSH cx
+
+ MOV cx,2
+ MOV bh,al
+ 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
+
+ RET
+
+printWord ENDP
+
+clearScreen PROC NEAR
+
+ PUSHA
+
+ MOV cx,3840
+ MOV bx, OFFSET screenArr
+
+ saveScreen:
+ MOV dx, es:[si]
+ MOV word ptr [bx], dx
+ INC si
+ INC bx
+ LOOP saveScreen
+
+ MOV cx, 3840
+ MOV si, 0
+ MOV ah, 07h
+
+ fillScreen:
+ MOV al, 0
+ MOV es:[si], ax
+ ADD si, 2
+ LOOP fillScreen
+
+ POPA
+ RET
+
+clearScreen ENDP
+
+restoreScreen PROC NEAR
+
+ PUSHA
+
+ MOV bx, offset screenArr
+ MOV si, 0
+ MOV cx, 3840
+
+ restoreScreenLoop:
+ MOV dx, word ptr [bx]
+ MOV es:[si], dx
+ INC bx
+ INC si
+ LOOP restoreScreenLoop
+
+ POPA
+ RET
+
+restoreScreen ENDP
+
+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
+
+ ; Очистим экран
+ CALL clearScreen
+
+; Выводим значения дампа памяти
+printDump:
+ MOV al,cs:[di]
+ CALL printWord
+LOOP printDump
+
+; Приостанавливаем программу для того, чтобы прочитать дамп
+input:
+ MOV ah,07h
+ INT 21h
+
+exit:
+ CALL restoreScreen
+
+ MOV ax,4C00h
+ INT 21h
+
+END start
diff --git a/sem2/lab4/TD/TD.EXE b/sem2/lab4/TD/TD.EXE
new file mode 100644
index 0000000..8b8ef4e
--- /dev/null
+++ b/sem2/lab4/TD/TD.EXE
Binary files differ
diff --git a/sem2/lab4/TD/TD.OVL b/sem2/lab4/TD/TD.OVL
new file mode 100644
index 0000000..91fdc3a
--- /dev/null
+++ b/sem2/lab4/TD/TD.OVL
Binary files differ
diff --git a/sem2/lab4/TD/TD386.EXE b/sem2/lab4/TD/TD386.EXE
new file mode 100644
index 0000000..ac749ac
--- /dev/null
+++ b/sem2/lab4/TD/TD386.EXE
Binary files differ
diff --git a/sem2/lab4/TD/TDCONFIG.TD b/sem2/lab4/TD/TDCONFIG.TD
new file mode 100644
index 0000000..bfdf827
--- /dev/null
+++ b/sem2/lab4/TD/TDCONFIG.TD
Binary files differ
diff --git a/sem2/lab4/TD/TDH386.SYS b/sem2/lab4/TD/TDH386.SYS
new file mode 100644
index 0000000..0bfe7bc
--- /dev/null
+++ b/sem2/lab4/TD/TDH386.SYS
Binary files differ
diff --git a/sem2/lab4/TD/TDHELP.TDH b/sem2/lab4/TD/TDHELP.TDH
new file mode 100644
index 0000000..3813e4e
--- /dev/null
+++ b/sem2/lab4/TD/TDHELP.TDH
Binary files differ
diff --git a/sem2/lab4/TD/TDINST.EXE b/sem2/lab4/TD/TDINST.EXE
new file mode 100644
index 0000000..07d427b
--- /dev/null
+++ b/sem2/lab4/TD/TDINST.EXE
Binary files differ
diff --git a/sem2/lab4/TD/TDMAP.EXE b/sem2/lab4/TD/TDMAP.EXE
new file mode 100644
index 0000000..e5bc453
--- /dev/null
+++ b/sem2/lab4/TD/TDMAP.EXE
Binary files differ
diff --git a/sem2/lab4/TD/TDREMOTE.EXE b/sem2/lab4/TD/TDREMOTE.EXE
new file mode 100644
index 0000000..d7d335a
--- /dev/null
+++ b/sem2/lab4/TD/TDREMOTE.EXE
Binary files differ
diff --git a/sem2/lab4/TD/TDRF.EXE b/sem2/lab4/TD/TDRF.EXE
new file mode 100644
index 0000000..a49d4d0
--- /dev/null
+++ b/sem2/lab4/TD/TDRF.EXE
Binary files differ
diff --git a/sem2/lab4/TD/TDSTRIP.EXE b/sem2/lab4/TD/TDSTRIP.EXE
new file mode 100644
index 0000000..6913771
--- /dev/null
+++ b/sem2/lab4/TD/TDSTRIP.EXE
Binary files differ
diff --git a/sem2/lab4/run.bat b/sem2/lab4/run.bat
new file mode 100644
index 0000000..452833f
--- /dev/null
+++ b/sem2/lab4/run.bat
@@ -0,0 +1,3 @@
+C:\TASM.EXE %1
+C:\TLINK.EXE %1
+%1.EXE
diff --git a/sem2/lab4/task3.asm b/sem2/lab4/task3.asm
new file mode 100644
index 0000000..9dd868d
--- /dev/null
+++ b/sem2/lab4/task3.asm
@@ -0,0 +1,40 @@
+.286
+.model tiny
+.data
+string db ?,?,' ',?,?,' ',?,?,0Ah,0Dh,'$'
+
+.code
+org 100h
+start:
+ MOV ah,1
+ INT 1Ah
+ CMP bx,dx
+ MOV ah,2
+ INT 1Ah
+ MOV ah,0
+ MOV al,ch
+ ROR ax,4
+ SHR ah,4
+ OR ax,'00'
+ MOV word ptr string,ax
+ MOV ah,0
+ MOV al,cl
+ ROR ax,4
+ SHR ah,4
+ OR ax,'00'
+ MOV word ptr string+3,ax
+ MOV ah,0
+ MOV al,dh
+ ROR ax,4
+ SHR ah,4
+ OR ax,'00'
+ MOV word ptr string+6,ax
+ MOV ah,9
+ MOV dx,offset string
+ INT 21h
+ MOV ax,4C00h
+ INT 21h
+end start
+
+text segment
+text ends
diff --git a/sem2/lab5/DumpTSR.asm b/sem2/lab5/DumpTSR.asm
new file mode 100644
index 0000000..fd3fad9
--- /dev/null
+++ b/sem2/lab5/DumpTSR.asm
@@ -0,0 +1,291 @@
+.MODEL Tiny
+.286
+.CODE
+ORG 100h
+
+LOCALS ; , @@
+
+TSRKeyCode = 2000h ; Alt+D
+
+Start:
+
+ jmp SetIntVec ;
+
+; 9 ( )
+Handler9:
+ pushf ; ( )
+ call dword ptr cs:OldInt9 ; 9
+ ;
+ pusha ;
+ cmp byte ptr cs:BusyFlag,0 ; ( , - , Alt+D )
+ jne @@Exit9 ; ,
+ mov ah,11h ; ( )
+ int 16h ; - - ( )
+ jz @@Exit9 ; ,
+ cmp ax,TSRKeyCode ;
+ jne @@Exit9 ; ,
+ sti ; ( ... , )
+ mov ah,10h
+ int 16h ;
+ mov byte ptr cs:BusyFlag,1 ;
+ ; /
+ push ds
+ push es ; DS, ES
+ call MainTSRProc ;
+ pop es
+ pop ds ; ES, DS
+ mov byte ptr cs:BusyFlag,0 ; 0 ( , - , Alt+D )
+ @@Exit9:
+ popa ;
+ iret ;
+
+;
+MainTSRProc proc
+ ;
+ mov ah,0Fh
+ int 10h ; AL , BH
+ cmp al,3 ; 3 ( 8025)
+ je @@OkVideoMode ; ,
+ ;
+ mov al,7
+ int 29h ; ( )
+ ret ;
+ ; , ,
+ @@OkVideoMode:
+ mov cs:[VideoPage],bh ;
+ mov ah,3
+ int 10h ; CX
+ mov cs:[OldCurSize],cx ;
+ mov bp,sp
+ mov ax,[bp+2+4+16] ; (2 - , 4 - ds,es, 16 - pusha)
+ mov cs:[DumpAddr],ax
+ mov ax,[bp+2+4+16+2] ;
+ mov cs:[DumpAddr+2],ax
+ ;
+ xor ax,ax
+ mov ds,ax ; DS = 0
+ mov si,ds:[44Eh] ; SI = , ( )
+ mov cs:[VideoOffset],si ;
+ mov ax,0B800h
+ mov ds,ax ; DS =
+ push cs
+ pop es ; ES =
+ lea di,ScreenBuffer ; DI = ( )
+ mov cx,80*25
+ cld ;
+ rep movsw ; (CX DS:SI ES:DI)
+ ;
+ mov ah,1
+ mov ch,20h ;
+ int 10h ;
+ ;
+ push ds
+ pop es ;
+ push cs
+ pop ds ; DS =
+ mov di,[VideoOffset] ; DI =
+ mov ax,1BC9h ; (AH)
+ stosw ; (AX) (ES:DI, DI=DI+2)
+ mov al,205 ;
+ mov cx,78
+ rep stosw ; 78
+ mov al,187 ;
+ stosw
+ mov cx,23
+ @@Vert: mov al,186 ;
+ cmp cl,3
+ jne @@1
+ mov al,199 ; 3-
+ @@1: stosw
+ mov al,' ' ;
+ cmp cl,3
+ jne @@2
+ mov al,196 ; 3-
+ @@2: push cx
+ mov cx,78
+ rep stosw
+ pop cx
+ mov al,186 ;
+ cmp cl,3
+ jne @@3
+ mov al,182 ; 3-
+ @@3: stosw
+ loop @@Vert
+ mov al,200 ;
+ stosw
+ mov al,205 ;
+ mov cx,78
+ rep stosw ; 78
+ mov al,188 ;
+ stosw
+ ;
+ mov ah,1Eh ;
+ lea si,HelpText1
+ mov di,(22*80 + 6)*2
+ call ShowText ;
+ mov di,(23*80 + 3)*2
+ call ShowText ; (SI HelpText2, .. HelpText1)
+ ;
+ @@MainLoop:
+ call ShowDump ;
+ mov ah,10h
+ int 16h ;
+ cmp ax,4BE0h ;
+ jne @@R
+ dec [DumpAddr] ; 1
+ @@R: cmp ax,4DE0h ;
+ jne @@CL
+ inc [DumpAddr] ; 1
+ @@CL: cmp ax,73E0h ; Ctrl+
+ jne @@CR
+ sub [DumpAddr],100h ; 100h
+ @@CR: cmp ax,74E0h ; Ctrl+
+ jne @@U
+ add [DumpAddr],100h ; 100h
+ @@U: cmp ax,48E0h ;
+ jne @@D
+ dec [DumpAddr+2] ; 1
+ @@D: cmp ax,50E0h ;
+ jne @@PU
+ inc [DumpAddr+2] ; 1
+ @@PU: cmp ax,49E0h ; Page Up
+ jne @@PD
+ sub [DumpAddr+2],100h ; 100h
+ @@PD: cmp ax,51E0h ; Page Down
+ jne @@E
+ add [DumpAddr+2],100h ; 100h
+ @@E: cmp ax,11Bh ; Esc
+ jne @@MainLoop
+ ;
+ lea si,ScreenBuffer ; SI =
+ mov di,[VideoOffset] ; DI =
+ mov cx,80*25
+ rep movsw ; : (CX DS:SI ES:DI)
+ ;
+ mov ah,1
+ mov bh,[VideoPage] ;
+ mov cx,[OldCurSize] ;
+ int 10h ;
+ ret
+MainTSRProc endp
+
+; DS:SI AH ES:DI
+ShowText proc
+ @@Char: lodsb ;
+ test al,al ;
+ jz @@Ret ; ,
+ stosw ;
+ jmp @@Char ;
+ @@Ret: ret
+ShowText endp
+
+; AL AH 16- ES:DI
+ShowByte proc
+ push ax
+ shr al,4 ;
+ cmp al,9
+ jbe @@1
+ add al,'A'-('9'+1)
+ @@1: add al,'0' ; 16-
+ stosw ;
+ pop ax
+ and al,0Fh ;
+ cmp al,9
+ jbe @@2
+ add al,'A'-('9'+1)
+ @@2: add al,'0' ; 16-
+ stosw ;
+ ret
+ShowByte endp
+
+; DX AH 16- ES:DI
+ShowWord proc
+ mov al,dh
+ call ShowByte
+ mov al,dl
+ call ShowByte
+ ret
+ShowWord endp
+
+ShowDump proc
+ push ds
+ lds si,dword ptr [DumpAddr] ; DS:SI =
+ mov di, (1*80 + 2)*2 ;
+
+ mov cx,20 ; 20
+ @@1: push cx
+ mov ah,1Bh ; -
+ mov dx,ds
+ call ShowWord ;
+ mov al,':'
+ stosw ;
+ mov dx,si
+ call ShowWord ;
+
+ mov cx,16 ; 16
+ mov ax,1320h ; -
+ stosw ;
+ @@2: mov al,' '
+ stosw ;
+ lodsb ; DS:SI (SI=SI+1)
+ call ShowByte ; 16-
+ loop @@2
+
+ mov al,' '
+ stosw
+ stosw ; 2
+ mov cx,16 ; 16
+ sub si,cx ; 16
+ mov ah,12h ; -
+ @@3: lodsb ; DS:SI (SI=SI+1)
+ stosw ;
+ loop @@3
+
+ pop cx
+ add di,160-(9+1+3*16+2+16)*2 ;
+ loop @@1
+ pop ds
+ ret
+ShowDump endp
+
+BusyFlag db 0 ; (0 - , 1 - )
+HelpText1 db 27,'/',26,' - one byte offset scroll, Ctrl',27,'/Ctrl',26,' - 100h bytes offset scroll',0
+HelpText2 db 24,'/',25,' - one segment scroll, PageUp/PageDn - 100h segments scroll, Esc - exit',0
+
+TSRCodeEnd = $ ; ( )
+
+OldInt9 dw ?,? ; 9
+DumpAddr dw ?,? ;
+OldCurSize dw ? ;
+VideoOffset dw ? ; ( )
+VideoPage db ? ;
+ScreenBuffer dw 80*25 dup (?) ;
+
+TSREnd = $ ;
+ORG TSRCodeEnd ; ( , )
+
+;
+SetIntVec:
+ mov ax,3509h ; 9 ( )
+ int 21h ;
+ mov OldInt9[0],bx ;
+ mov OldInt9[2],es ;
+ mov ah,25h ; - (AL=9 35h)
+ lea dx,Handler9 ; DS:DX =
+ int 21h ;
+
+ mov ah,49h ;
+ mov es,ds:[2Ch] ;
+ int 21h ; ( )
+
+ mov ah,9 ; ( '$')
+ lea dx,MsgInstalled ;
+ int 21h ;
+
+ lea dx,TSREnd ;
+ int 27h ; ,
+
+MsgInstalled db 'DumpTSR is successfully installed!',13,10
+ db 'Press <Alt>+<D> to activate.',13,10,'$'
+
+END Start
diff --git a/sem2/lab5/TD/TD.EXE b/sem2/lab5/TD/TD.EXE
new file mode 100644
index 0000000..8b8ef4e
--- /dev/null
+++ b/sem2/lab5/TD/TD.EXE
Binary files differ
diff --git a/sem2/lab5/TD/TD.OVL b/sem2/lab5/TD/TD.OVL
new file mode 100644
index 0000000..91fdc3a
--- /dev/null
+++ b/sem2/lab5/TD/TD.OVL
Binary files differ
diff --git a/sem2/lab5/TD/TD386.EXE b/sem2/lab5/TD/TD386.EXE
new file mode 100644
index 0000000..ac749ac
--- /dev/null
+++ b/sem2/lab5/TD/TD386.EXE
Binary files differ
diff --git a/sem2/lab5/TD/TDCONFIG.TD b/sem2/lab5/TD/TDCONFIG.TD
new file mode 100644
index 0000000..bfdf827
--- /dev/null
+++ b/sem2/lab5/TD/TDCONFIG.TD
Binary files differ
diff --git a/sem2/lab5/TD/TDH386.SYS b/sem2/lab5/TD/TDH386.SYS
new file mode 100644
index 0000000..0bfe7bc
--- /dev/null
+++ b/sem2/lab5/TD/TDH386.SYS
Binary files differ
diff --git a/sem2/lab5/TD/TDHELP.TDH b/sem2/lab5/TD/TDHELP.TDH
new file mode 100644
index 0000000..3813e4e
--- /dev/null
+++ b/sem2/lab5/TD/TDHELP.TDH
Binary files differ
diff --git a/sem2/lab5/TD/TDINST.EXE b/sem2/lab5/TD/TDINST.EXE
new file mode 100644
index 0000000..07d427b
--- /dev/null
+++ b/sem2/lab5/TD/TDINST.EXE
Binary files differ
diff --git a/sem2/lab5/TD/TDMAP.EXE b/sem2/lab5/TD/TDMAP.EXE
new file mode 100644
index 0000000..e5bc453
--- /dev/null
+++ b/sem2/lab5/TD/TDMAP.EXE
Binary files differ
diff --git a/sem2/lab5/TD/TDREMOTE.EXE b/sem2/lab5/TD/TDREMOTE.EXE
new file mode 100644
index 0000000..d7d335a
--- /dev/null
+++ b/sem2/lab5/TD/TDREMOTE.EXE
Binary files differ
diff --git a/sem2/lab5/TD/TDRF.EXE b/sem2/lab5/TD/TDRF.EXE
new file mode 100644
index 0000000..a49d4d0
--- /dev/null
+++ b/sem2/lab5/TD/TDRF.EXE
Binary files differ
diff --git a/sem2/lab5/TD/TDSTRIP.EXE b/sem2/lab5/TD/TDSTRIP.EXE
new file mode 100644
index 0000000..6913771
--- /dev/null
+++ b/sem2/lab5/TD/TDSTRIP.EXE
Binary files differ
diff --git a/sem2/lab5/examp.asm b/sem2/lab5/examp.asm
new file mode 100644
index 0000000..4da04fa
--- /dev/null
+++ b/sem2/lab5/examp.asm
@@ -0,0 +1,54 @@
+new_65h proc
+ ;Процедура наложения на экран цветного окна для динамической
+ ;очистки экрана по ходу выполнения программы
+ mov АН, 06h ;Функция задания окна
+ mov AL,0 ;Режим создания окна
+ mov BH,1Bh ;Атрибут всех символов в окне: светло-бирюзовые символы, синий фон
+ mov СХ,0 ;Координаты верхнего левого угла 0,0
+ mov DH,24 ;Нижняя Х-координата
+ mov DL,79 ;Правая Х-координата
+ int 10h ;Прерывание BIOS
+ iret
+new_65h endp
+
+main proc
+ mov AX,data
+ mov DS,AX
+ ;Заполним вектор прерывания пользователя адресом нашего обработчика
+ mov АН,25h ;Функция заполнения вектора прерывания
+ mov AL,65h ;Номер вектора
+ mov DX,offset new_65h ;Смещение прикладного обработчика
+ push DS ;Сохранны DS
+ push CS ;Настроим DS на сегмент команд (в
+ pop DS ;котором находится наш обработчик)
+ int 21h ;Вызовем DOS
+ pop DS ;Восстановим DS
+ ;Будем в цикле выводить ил экран строки с предварительной очисткой экрана
+ gogo:
+ int 65h ;Вызов прикладного обработчика (очистка
+ ;экрана перед выводом текста)
+ ;Позиционируем курсор
+ mov АН,02h ;Функция позиционирования
+ mov BH,0 ;Видеостраница
+ mov DH,line ;Строка
+ mov DL,coloumn ;Столбец
+ int 10h ;Прерывание BIOS
+
+ ;Выведем на экран строку символов
+ mov АН,0Ah ;функция вывода символа без атрибута
+ mov AL,sym ;Символ
+ mov BH,0 ;Видеостраница
+ mov СХ,60 ;Коэффициент повторения
+ int 10h ;Прерывание BIOS
+ ;Изменим символ и позицию и зациклим программу с возможностью
+ ;завершения по нажатию клавиш /C
+ inc sym ;Следующий символ по таблице ASCII
+ inc line ;Следующая строка экрана
+ mov АН,08h ;Функция ввода баз эха, чувствует /C
+ int 21h
+ jmp gogo ;Бесконечный цикл
+main endp ;Поля данных
+
+line db 2 ;Строка
+coloumn db 10 ;Столбец
+sym db 0lh ;Выводимый символ \ No newline at end of file
diff --git a/sem2/lab5/gavno.asm b/sem2/lab5/gavno.asm
new file mode 100644
index 0000000..5748c72
--- /dev/null
+++ b/sem2/lab5/gavno.asm
@@ -0,0 +1,26 @@
+.model small
+.DATA
+Old_09h dw 0,0
+
+.code
+.386
+
+New09h:
+ mov ah, 02h
+ mov dl, 'A'
+ int 21h
+ jmp dword ptr cs:Old_09h
+
+Init:
+ mov ah, 09h
+ mov dx, offset Msg
+ int 21h
+ mov ax, 3509h
+ int 21h
+ mov Old_09h, bx
+ mov Old_09h+2, es
+ mov ax, 2509h
+ lea dx, New09h
+ int 21h
+
+end \ No newline at end of file
diff --git a/sem2/lab5/jee.asm b/sem2/lab5/jee.asm
new file mode 100644
index 0000000..233abc6
--- /dev/null
+++ b/sem2/lab5/jee.asm
@@ -0,0 +1,27 @@
+.model tiny
+.code
+.startup
+
+jmp Init
+
+Old_09h dw 0,0
+
+New09h:
+ mov ah, 02h
+ mov dl, 'A'
+ int 21h
+ jmp dword ptr cs:Old_09h
+
+Init:
+ mov ah, 09h
+ mov dx, offset Msg
+ int 21h
+ mov ax, 3509h
+ int 21h
+ mov Old_09h, bx
+ mov Old_09h+2, es
+ mov ax, 2509h
+ lea dx, New09h
+ int 21h
+
+end \ No newline at end of file
diff --git a/sem2/lab5/resident.asm b/sem2/lab5/resident.asm
new file mode 100644
index 0000000..4c7914c
--- /dev/null
+++ b/sem2/lab5/resident.asm
@@ -0,0 +1,30 @@
+.model tiny
+.code
+.startup
+
+jmp Init
+
+Msg db 'Resident module installed!',10,13,'$'
+Old_09h dw 0,0
+
+New09h:
+mov ah, 02h
+mov dl, 'A'
+int 21h
+jmp dword ptr cs:Old_09h
+
+Init:
+mov ah, 09h
+mov dx, offset Msg
+int 21h
+mov ax, 3509h
+int 21h
+mov Old_09h, bx
+mov Old_09h+2, es
+mov ax, 2509h
+lea dx, New09h
+int 21h
+lea dx, Init
+int 27h
+
+end \ No newline at end of file
diff --git a/sem2/lab5/run.bat b/sem2/lab5/run.bat
new file mode 100644
index 0000000..452833f
--- /dev/null
+++ b/sem2/lab5/run.bat
@@ -0,0 +1,3 @@
+C:\TASM.EXE %1
+C:\TLINK.EXE %1
+%1.EXE
diff --git a/sem2/lab5/task.asm b/sem2/lab5/task.asm
new file mode 100644
index 0000000..e99eb6d
--- /dev/null
+++ b/sem2/lab5/task.asm
@@ -0,0 +1,114 @@
+.model small
+.data
+old_9 dd 0
+mesg db "To exit press ESC! $"
+mes2 db "Pressed$"
+mess DB "GG$"
+B_UP equ 72 ; вверх
+B_DN equ 80 ; вниз
+B_BS equ 75 ; влево
+B_FWD equ 77 ; вправо
+minAdress DB 0
+step DB 1 ;КОЛИЧЕСТВО СЧИТЫВАЕМЫХ БАЙТ
+tmp DB 4 dup (0)
+
+.stack 100h
+.code
+
+pInitTmp PROC ;инициализация TMP из BX
+ MOV cx, 0004h ; счеткчик выполняем 4 раза
+ MOV si, 0000h ; индекс масcисва - i
+
+ mLoop:
+ PUSH cx
+
+ MOV cl, 04h
+ MOV tmp[si], bl
+ ; сдвиги итераций
+ SHL tmp[si], cl ;сдвиг вправа
+ SHR tmp[si], cl
+ SHR bx, cl
+
+ POP cx ;извлечение счётчика заносим в стек
+ INC si
+ LOOP mLoop
+
+ RET
+pInitTmp ENDP
+
+pPrintTmp PROC ;вывод TMP
+ MOV cx, 0004h; начинаем с 3 4 раза и до нуля выводим этот массив
+ MOV si, 0003h
+
+ mLoop0:
+ MOV dl, tmp[si]
+ DEC si
+ CALL pPrintNum
+ LOOP mLoop0
+
+ MOV dl, 20h
+ CALL pPrintCh
+
+ RET
+pPrintTmp ENDP
+
+pPrintNum PROC ;показывает 1 16-ричный разряд из DL ;
+ ADD dl, 30h ;
+ CMP dl, 3Ah ;
+
+ JL metka
+ ADD dl, 07h ;
+
+ metka:
+ MOV ah, 02h
+ INT 21h
+
+ RET
+pPrintNum ENDP
+
+pPrintCh PROC ;show CHAR
+ MOV ah, 02h
+ INT 21h
+
+ RET
+pPrintCh ENDP
+
+pPrintStr PROC ;показывает STRING
+ MOV ah, 09h
+ INT 21h
+ MOV dl, 0Ah
+ CALL pPrintCh
+
+ RET
+pPrintStr ENDP
+
+pDIByte PROC ;показывает BH
+ mov bx, [cs:di]
+ XCHG bl, bh ; xchg = swap
+ CALL pInitTmp
+ MOV cx, 0002h ;каждый из 4 элементов массива это одна из стрелочек
+ MOV si, 0003h
+
+ mLoop4:
+ MOV dl, tmp[si]
+ DEC si
+ CALL pPrintNum
+ LOOP mLoop4
+
+ INC di
+ MOV dl, 20h
+ CALL pPrintCh
+
+ RET
+pDIByte ENDP
+
+start:
+my9 proc far
+
+ push ax
+ push bx
+ push es
+ push si
+ in al,60h ;Проверяем не нажата ли клавиша UP
+ ADD al, 00h
+END start \ No newline at end of file
diff --git a/sem2/lab5/test.asm b/sem2/lab5/test.asm
new file mode 100644
index 0000000..4006e27
--- /dev/null
+++ b/sem2/lab5/test.asm
@@ -0,0 +1,105 @@
+.model small
+.data
+int09h dw 2 dup (0)
+msg db "To exit press ESC! $"
+tsr_end equ $
+; B_UP equ 1Ch ; вверх
+
+.stack 100h
+.486
+.code
+
+; pNewInterrupt PROC far
+; PUSHF
+
+; PUSH ax
+
+; in al, 60h ; Читаем сканкод
+; cmp al, B_UP
+; JE hotkey
+
+; ; ; Наш код
+; ; mov dx, offset mesg
+; ; MOV ah,09h
+; ; INT 21h
+
+; POP ax
+; POPF
+; PUSHF
+
+; CALL cs:[int09h]
+; jmp exit
+
+; hotkey:
+; ; Обработка аппаратного прерывания
+; in al,61h
+; mov ah,al
+; or al,80h
+; out 61h,al
+; xchg ah,al
+; out 61h,al
+; mov al,20h
+; out 20h,al
+
+; ; Наш код
+; mov dx, offset mesg
+; MOV ah,09h
+; INT 21h
+
+; exit:
+; POPF
+; IRET
+
+; pNewInterrupt ENDP
+
+
+start:
+ JMP program
+
+pNewInterrupt PROC far
+ PUSHF
+ CALL dword ptr cs:int09h
+ IRET
+pNewInterrupt ENDP
+
+program:
+
+ MOV ax, @DATA
+ MOV ds, ax
+
+ ; MOV ax,3509h ;Hook interrupt 09H
+ ; INT 21h
+ ; MOV word ptr int09h,bx
+ ; MOV word ptr int09h[2],es
+
+ ; ; MOV ax, 2509h
+ ; ; MOV dx, offset pNewInterrupt
+ ; ; INT 21h
+
+ ; ; Восстанавливаем прерывание
+ ; MOV ax, 2509h
+ ; MOV ds, word ptr int09h[2]
+ ; MOV dx, offset int09h
+ ; INT 21h
+ ; INT 09h
+
+ MOV ax, 3509h
+ INT 21h
+ MOV word ptr int09h, bx
+ MOV word ptr int09h[2], es
+
+ MOV ax, 2509h
+ MOV dx, offset pNewInterrupt
+ INT 21h
+
+ MOV ah,09h
+ MOV dx, offset msg
+ INT 21h
+
+ MOV dx, offset tsr_end
+ INT 27h
+
+ ; ; Выходим из программы
+ ; MOV ax, 4c00h
+ ; INT 21h
+END start \ No newline at end of file