From 143f34d941f32e0808fc9344d4c4126ff530d64a Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 22 Oct 2020 21:03:24 +0400 Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D1=81=D0=B5=D0=BC=D0=B5=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TASM/DEBUG.EXE | Bin 0 -> 22928 bytes TASM/DPMI16BI.OVL | Bin 0 -> 65376 bytes TASM/DPMILOAD.EXE | Bin 0 -> 22212 bytes TASM/DPMIMEM.DLL | Bin 0 -> 24932 bytes TASM/TAD.BAT | 3 + TASM/TADL.BAT | 13 ++ TASM/TASM.EXE | Bin 0 -> 129266 bytes TASM/TD.EXE | Bin 0 -> 492768 bytes TASM/TLINK.EXE | Bin 0 -> 150569 bytes TASM/cmd.bat | 1 + sem2/lab1/hel.bat | 3 + sem2/lab1/hel1.bat | 3 + sem2/lab1/hello1.asm | 17 +++ sem2/lab1/hello11.asm | 17 +++ sem2/lab1/hello2.asm | 22 ++++ sem2/lab1/hello3.asm | 15 +++ sem2/lab2/lab2_guschin.pdf | Bin 0 -> 88793 bytes sem2/lab2/task2/task2.asm | 40 +++++++ sem2/lab2/task3/run.bat | 3 + sem2/lab2/task3/task3.asm | 37 ++++++ sem2/lab3/Dump.asm | 80 +++++++++++++ sem2/lab3/arr.asm | 36 ++++++ sem2/lab3/draw.asm | 117 ++++++++++++++++++ sem2/lab3/mydump.asm | 92 ++++++++++++++ sem2/lab3/run.bat | 3 + sem2/lab3/vdraw.asm | 59 +++++++++ sem2/lab3/vdraw2.asm | 68 +++++++++++ sem2/lab3/vdump.asm | 128 ++++++++++++++++++++ sem2/lab4/TD/TD.EXE | Bin 0 -> 192448 bytes sem2/lab4/TD/TD.OVL | Bin 0 -> 108640 bytes sem2/lab4/TD/TD386.EXE | Bin 0 -> 23504 bytes sem2/lab4/TD/TDCONFIG.TD | Bin 0 -> 1059 bytes sem2/lab4/TD/TDH386.SYS | Bin 0 -> 6428 bytes sem2/lab4/TD/TDHELP.TDH | Bin 0 -> 114748 bytes sem2/lab4/TD/TDINST.EXE | Bin 0 -> 81692 bytes sem2/lab4/TD/TDMAP.EXE | Bin 0 -> 16240 bytes sem2/lab4/TD/TDREMOTE.EXE | Bin 0 -> 19932 bytes sem2/lab4/TD/TDRF.EXE | Bin 0 -> 16470 bytes sem2/lab4/TD/TDSTRIP.EXE | Bin 0 -> 11954 bytes sem2/lab4/run.bat | 3 + sem2/lab4/task3.asm | 40 +++++++ sem2/lab5/DumpTSR.asm | 291 +++++++++++++++++++++++++++++++++++++++++++++ sem2/lab5/TD/TD.EXE | Bin 0 -> 192448 bytes sem2/lab5/TD/TD.OVL | Bin 0 -> 108640 bytes sem2/lab5/TD/TD386.EXE | Bin 0 -> 23504 bytes sem2/lab5/TD/TDCONFIG.TD | Bin 0 -> 1059 bytes sem2/lab5/TD/TDH386.SYS | Bin 0 -> 6428 bytes sem2/lab5/TD/TDHELP.TDH | Bin 0 -> 114748 bytes sem2/lab5/TD/TDINST.EXE | Bin 0 -> 81692 bytes sem2/lab5/TD/TDMAP.EXE | Bin 0 -> 16240 bytes sem2/lab5/TD/TDREMOTE.EXE | Bin 0 -> 19932 bytes sem2/lab5/TD/TDRF.EXE | Bin 0 -> 16470 bytes sem2/lab5/TD/TDSTRIP.EXE | Bin 0 -> 11954 bytes sem2/lab5/examp.asm | 54 +++++++++ sem2/lab5/gavno.asm | 26 ++++ sem2/lab5/jee.asm | 27 +++++ sem2/lab5/resident.asm | 30 +++++ sem2/lab5/run.bat | 3 + sem2/lab5/task.asm | 114 ++++++++++++++++++ sem2/lab5/test.asm | 105 ++++++++++++++++ 60 files changed, 1450 insertions(+) create mode 100644 TASM/DEBUG.EXE create mode 100644 TASM/DPMI16BI.OVL create mode 100644 TASM/DPMILOAD.EXE create mode 100644 TASM/DPMIMEM.DLL create mode 100644 TASM/TAD.BAT create mode 100644 TASM/TADL.BAT create mode 100644 TASM/TASM.EXE create mode 100644 TASM/TD.EXE create mode 100644 TASM/TLINK.EXE create mode 100644 TASM/cmd.bat create mode 100644 sem2/lab1/hel.bat create mode 100644 sem2/lab1/hel1.bat create mode 100644 sem2/lab1/hello1.asm create mode 100644 sem2/lab1/hello11.asm create mode 100644 sem2/lab1/hello2.asm create mode 100644 sem2/lab1/hello3.asm create mode 100644 sem2/lab2/lab2_guschin.pdf create mode 100644 sem2/lab2/task2/task2.asm create mode 100644 sem2/lab2/task3/run.bat create mode 100644 sem2/lab2/task3/task3.asm create mode 100644 sem2/lab3/Dump.asm create mode 100644 sem2/lab3/arr.asm create mode 100644 sem2/lab3/draw.asm create mode 100644 sem2/lab3/mydump.asm create mode 100644 sem2/lab3/run.bat create mode 100644 sem2/lab3/vdraw.asm create mode 100644 sem2/lab3/vdraw2.asm create mode 100644 sem2/lab3/vdump.asm create mode 100644 sem2/lab4/TD/TD.EXE create mode 100644 sem2/lab4/TD/TD.OVL create mode 100644 sem2/lab4/TD/TD386.EXE create mode 100644 sem2/lab4/TD/TDCONFIG.TD create mode 100644 sem2/lab4/TD/TDH386.SYS create mode 100644 sem2/lab4/TD/TDHELP.TDH create mode 100644 sem2/lab4/TD/TDINST.EXE create mode 100644 sem2/lab4/TD/TDMAP.EXE create mode 100644 sem2/lab4/TD/TDREMOTE.EXE create mode 100644 sem2/lab4/TD/TDRF.EXE create mode 100644 sem2/lab4/TD/TDSTRIP.EXE create mode 100644 sem2/lab4/run.bat create mode 100644 sem2/lab4/task3.asm create mode 100644 sem2/lab5/DumpTSR.asm create mode 100644 sem2/lab5/TD/TD.EXE create mode 100644 sem2/lab5/TD/TD.OVL create mode 100644 sem2/lab5/TD/TD386.EXE create mode 100644 sem2/lab5/TD/TDCONFIG.TD create mode 100644 sem2/lab5/TD/TDH386.SYS create mode 100644 sem2/lab5/TD/TDHELP.TDH create mode 100644 sem2/lab5/TD/TDINST.EXE create mode 100644 sem2/lab5/TD/TDMAP.EXE create mode 100644 sem2/lab5/TD/TDREMOTE.EXE create mode 100644 sem2/lab5/TD/TDRF.EXE create mode 100644 sem2/lab5/TD/TDSTRIP.EXE create mode 100644 sem2/lab5/examp.asm create mode 100644 sem2/lab5/gavno.asm create mode 100644 sem2/lab5/jee.asm create mode 100644 sem2/lab5/resident.asm create mode 100644 sem2/lab5/run.bat create mode 100644 sem2/lab5/task.asm create mode 100644 sem2/lab5/test.asm diff --git a/TASM/DEBUG.EXE b/TASM/DEBUG.EXE new file mode 100644 index 0000000..7065b70 Binary files /dev/null and b/TASM/DEBUG.EXE differ diff --git a/TASM/DPMI16BI.OVL b/TASM/DPMI16BI.OVL new file mode 100644 index 0000000..53ffe53 Binary files /dev/null and b/TASM/DPMI16BI.OVL differ diff --git a/TASM/DPMILOAD.EXE b/TASM/DPMILOAD.EXE new file mode 100644 index 0000000..17881fa Binary files /dev/null and b/TASM/DPMILOAD.EXE differ diff --git a/TASM/DPMIMEM.DLL b/TASM/DPMIMEM.DLL new file mode 100644 index 0000000..1d24230 Binary files /dev/null and b/TASM/DPMIMEM.DLL 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 Binary files /dev/null and b/TASM/TASM.EXE differ diff --git a/TASM/TD.EXE b/TASM/TD.EXE new file mode 100644 index 0000000..dd5cd4e Binary files /dev/null and b/TASM/TD.EXE differ diff --git a/TASM/TLINK.EXE b/TASM/TLINK.EXE new file mode 100644 index 0000000..b46896d Binary files /dev/null and b/TASM/TLINK.EXE 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 Binary files /dev/null and b/sem2/lab2/lab2_guschin.pdf 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 Binary files /dev/null and b/sem2/lab4/TD/TD.EXE differ diff --git a/sem2/lab4/TD/TD.OVL b/sem2/lab4/TD/TD.OVL new file mode 100644 index 0000000..91fdc3a Binary files /dev/null and b/sem2/lab4/TD/TD.OVL differ diff --git a/sem2/lab4/TD/TD386.EXE b/sem2/lab4/TD/TD386.EXE new file mode 100644 index 0000000..ac749ac Binary files /dev/null and b/sem2/lab4/TD/TD386.EXE differ diff --git a/sem2/lab4/TD/TDCONFIG.TD b/sem2/lab4/TD/TDCONFIG.TD new file mode 100644 index 0000000..bfdf827 Binary files /dev/null and b/sem2/lab4/TD/TDCONFIG.TD differ diff --git a/sem2/lab4/TD/TDH386.SYS b/sem2/lab4/TD/TDH386.SYS new file mode 100644 index 0000000..0bfe7bc Binary files /dev/null and b/sem2/lab4/TD/TDH386.SYS differ diff --git a/sem2/lab4/TD/TDHELP.TDH b/sem2/lab4/TD/TDHELP.TDH new file mode 100644 index 0000000..3813e4e Binary files /dev/null and b/sem2/lab4/TD/TDHELP.TDH differ diff --git a/sem2/lab4/TD/TDINST.EXE b/sem2/lab4/TD/TDINST.EXE new file mode 100644 index 0000000..07d427b Binary files /dev/null and b/sem2/lab4/TD/TDINST.EXE differ diff --git a/sem2/lab4/TD/TDMAP.EXE b/sem2/lab4/TD/TDMAP.EXE new file mode 100644 index 0000000..e5bc453 Binary files /dev/null and b/sem2/lab4/TD/TDMAP.EXE differ diff --git a/sem2/lab4/TD/TDREMOTE.EXE b/sem2/lab4/TD/TDREMOTE.EXE new file mode 100644 index 0000000..d7d335a Binary files /dev/null and b/sem2/lab4/TD/TDREMOTE.EXE differ diff --git a/sem2/lab4/TD/TDRF.EXE b/sem2/lab4/TD/TDRF.EXE new file mode 100644 index 0000000..a49d4d0 Binary files /dev/null and b/sem2/lab4/TD/TDRF.EXE differ diff --git a/sem2/lab4/TD/TDSTRIP.EXE b/sem2/lab4/TD/TDSTRIP.EXE new file mode 100644 index 0000000..6913771 Binary files /dev/null and b/sem2/lab4/TD/TDSTRIP.EXE 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 + 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 Binary files /dev/null and b/sem2/lab5/TD/TD.EXE differ diff --git a/sem2/lab5/TD/TD.OVL b/sem2/lab5/TD/TD.OVL new file mode 100644 index 0000000..91fdc3a Binary files /dev/null and b/sem2/lab5/TD/TD.OVL differ diff --git a/sem2/lab5/TD/TD386.EXE b/sem2/lab5/TD/TD386.EXE new file mode 100644 index 0000000..ac749ac Binary files /dev/null and b/sem2/lab5/TD/TD386.EXE differ diff --git a/sem2/lab5/TD/TDCONFIG.TD b/sem2/lab5/TD/TDCONFIG.TD new file mode 100644 index 0000000..bfdf827 Binary files /dev/null and b/sem2/lab5/TD/TDCONFIG.TD differ diff --git a/sem2/lab5/TD/TDH386.SYS b/sem2/lab5/TD/TDH386.SYS new file mode 100644 index 0000000..0bfe7bc Binary files /dev/null and b/sem2/lab5/TD/TDH386.SYS differ diff --git a/sem2/lab5/TD/TDHELP.TDH b/sem2/lab5/TD/TDHELP.TDH new file mode 100644 index 0000000..3813e4e Binary files /dev/null and b/sem2/lab5/TD/TDHELP.TDH differ diff --git a/sem2/lab5/TD/TDINST.EXE b/sem2/lab5/TD/TDINST.EXE new file mode 100644 index 0000000..07d427b Binary files /dev/null and b/sem2/lab5/TD/TDINST.EXE differ diff --git a/sem2/lab5/TD/TDMAP.EXE b/sem2/lab5/TD/TDMAP.EXE new file mode 100644 index 0000000..e5bc453 Binary files /dev/null and b/sem2/lab5/TD/TDMAP.EXE differ diff --git a/sem2/lab5/TD/TDREMOTE.EXE b/sem2/lab5/TD/TDREMOTE.EXE new file mode 100644 index 0000000..d7d335a Binary files /dev/null and b/sem2/lab5/TD/TDREMOTE.EXE differ diff --git a/sem2/lab5/TD/TDRF.EXE b/sem2/lab5/TD/TDRF.EXE new file mode 100644 index 0000000..a49d4d0 Binary files /dev/null and b/sem2/lab5/TD/TDRF.EXE differ diff --git a/sem2/lab5/TD/TDSTRIP.EXE b/sem2/lab5/TD/TDSTRIP.EXE new file mode 100644 index 0000000..6913771 Binary files /dev/null and b/sem2/lab5/TD/TDSTRIP.EXE 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 -- cgit v1.2.3