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 | |
Добавил решения второго семестра
| -rw-r--r-- | TASM/DEBUG.EXE | bin | 0 -> 22928 bytes | |||
| -rw-r--r-- | TASM/DPMI16BI.OVL | bin | 0 -> 65376 bytes | |||
| -rw-r--r-- | TASM/DPMILOAD.EXE | bin | 0 -> 22212 bytes | |||
| -rw-r--r-- | TASM/DPMIMEM.DLL | bin | 0 -> 24932 bytes | |||
| -rw-r--r-- | TASM/TAD.BAT | 3 | ||||
| -rw-r--r-- | TASM/TADL.BAT | 13 | ||||
| -rw-r--r-- | TASM/TASM.EXE | bin | 0 -> 129266 bytes | |||
| -rw-r--r-- | TASM/TD.EXE | bin | 0 -> 492768 bytes | |||
| -rw-r--r-- | TASM/TLINK.EXE | bin | 0 -> 150569 bytes | |||
| -rw-r--r-- | TASM/cmd.bat | 1 | ||||
| -rw-r--r-- | sem2/lab1/hel.bat | 3 | ||||
| -rw-r--r-- | sem2/lab1/hel1.bat | 3 | ||||
| -rw-r--r-- | sem2/lab1/hello1.asm | 17 | ||||
| -rw-r--r-- | sem2/lab1/hello11.asm | 17 | ||||
| -rw-r--r-- | sem2/lab1/hello2.asm | 22 | ||||
| -rw-r--r-- | sem2/lab1/hello3.asm | 15 | ||||
| -rw-r--r-- | sem2/lab2/lab2_guschin.pdf | bin | 0 -> 88793 bytes | |||
| -rw-r--r-- | sem2/lab2/task2/task2.asm | 40 | ||||
| -rw-r--r-- | sem2/lab2/task3/run.bat | 3 | ||||
| -rw-r--r-- | sem2/lab2/task3/task3.asm | 37 | ||||
| -rw-r--r-- | sem2/lab3/Dump.asm | 80 | ||||
| -rw-r--r-- | sem2/lab3/arr.asm | 36 | ||||
| -rw-r--r-- | sem2/lab3/draw.asm | 117 | ||||
| -rw-r--r-- | sem2/lab3/mydump.asm | 92 | ||||
| -rw-r--r-- | sem2/lab3/run.bat | 3 | ||||
| -rw-r--r-- | sem2/lab3/vdraw.asm | 59 | ||||
| -rw-r--r-- | sem2/lab3/vdraw2.asm | 68 | ||||
| -rw-r--r-- | sem2/lab3/vdump.asm | 128 | ||||
| -rw-r--r-- | sem2/lab4/TD/TD.EXE | bin | 0 -> 192448 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TD.OVL | bin | 0 -> 108640 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TD386.EXE | bin | 0 -> 23504 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TDCONFIG.TD | bin | 0 -> 1059 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TDH386.SYS | bin | 0 -> 6428 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TDHELP.TDH | bin | 0 -> 114748 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TDINST.EXE | bin | 0 -> 81692 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TDMAP.EXE | bin | 0 -> 16240 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TDREMOTE.EXE | bin | 0 -> 19932 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TDRF.EXE | bin | 0 -> 16470 bytes | |||
| -rw-r--r-- | sem2/lab4/TD/TDSTRIP.EXE | bin | 0 -> 11954 bytes | |||
| -rw-r--r-- | sem2/lab4/run.bat | 3 | ||||
| -rw-r--r-- | sem2/lab4/task3.asm | 40 | ||||
| -rw-r--r-- | sem2/lab5/DumpTSR.asm | 291 | ||||
| -rw-r--r-- | sem2/lab5/TD/TD.EXE | bin | 0 -> 192448 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TD.OVL | bin | 0 -> 108640 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TD386.EXE | bin | 0 -> 23504 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TDCONFIG.TD | bin | 0 -> 1059 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TDH386.SYS | bin | 0 -> 6428 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TDHELP.TDH | bin | 0 -> 114748 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TDINST.EXE | bin | 0 -> 81692 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TDMAP.EXE | bin | 0 -> 16240 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TDREMOTE.EXE | bin | 0 -> 19932 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TDRF.EXE | bin | 0 -> 16470 bytes | |||
| -rw-r--r-- | sem2/lab5/TD/TDSTRIP.EXE | bin | 0 -> 11954 bytes | |||
| -rw-r--r-- | sem2/lab5/examp.asm | 54 | ||||
| -rw-r--r-- | sem2/lab5/gavno.asm | 26 | ||||
| -rw-r--r-- | sem2/lab5/jee.asm | 27 | ||||
| -rw-r--r-- | sem2/lab5/resident.asm | 30 | ||||
| -rw-r--r-- | sem2/lab5/run.bat | 3 | ||||
| -rw-r--r-- | sem2/lab5/task.asm | 114 | ||||
| -rw-r--r-- | sem2/lab5/test.asm | 105 |
60 files changed, 1450 insertions, 0 deletions
diff --git a/TASM/DEBUG.EXE b/TASM/DEBUG.EXE Binary files differnew file mode 100644 index 0000000..7065b70 --- /dev/null +++ b/TASM/DEBUG.EXE diff --git a/TASM/DPMI16BI.OVL b/TASM/DPMI16BI.OVL Binary files differnew file mode 100644 index 0000000..53ffe53 --- /dev/null +++ b/TASM/DPMI16BI.OVL diff --git a/TASM/DPMILOAD.EXE b/TASM/DPMILOAD.EXE Binary files differnew file mode 100644 index 0000000..17881fa --- /dev/null +++ b/TASM/DPMILOAD.EXE diff --git a/TASM/DPMIMEM.DLL b/TASM/DPMIMEM.DLL Binary files differnew file mode 100644 index 0000000..1d24230 --- /dev/null +++ b/TASM/DPMIMEM.DLL 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 Binary files differnew file mode 100644 index 0000000..f3867a6 --- /dev/null +++ b/TASM/TASM.EXE diff --git a/TASM/TD.EXE b/TASM/TD.EXE Binary files differnew file mode 100644 index 0000000..dd5cd4e --- /dev/null +++ b/TASM/TD.EXE diff --git a/TASM/TLINK.EXE b/TASM/TLINK.EXE Binary files differnew file mode 100644 index 0000000..b46896d --- /dev/null +++ b/TASM/TLINK.EXE 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 Binary files differnew file mode 100644 index 0000000..7d91eb5 --- /dev/null +++ b/sem2/lab2/lab2_guschin.pdf 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 Binary files differnew file mode 100644 index 0000000..8b8ef4e --- /dev/null +++ b/sem2/lab4/TD/TD.EXE diff --git a/sem2/lab4/TD/TD.OVL b/sem2/lab4/TD/TD.OVL Binary files differnew file mode 100644 index 0000000..91fdc3a --- /dev/null +++ b/sem2/lab4/TD/TD.OVL diff --git a/sem2/lab4/TD/TD386.EXE b/sem2/lab4/TD/TD386.EXE Binary files differnew file mode 100644 index 0000000..ac749ac --- /dev/null +++ b/sem2/lab4/TD/TD386.EXE diff --git a/sem2/lab4/TD/TDCONFIG.TD b/sem2/lab4/TD/TDCONFIG.TD Binary files differnew file mode 100644 index 0000000..bfdf827 --- /dev/null +++ b/sem2/lab4/TD/TDCONFIG.TD diff --git a/sem2/lab4/TD/TDH386.SYS b/sem2/lab4/TD/TDH386.SYS Binary files differnew file mode 100644 index 0000000..0bfe7bc --- /dev/null +++ b/sem2/lab4/TD/TDH386.SYS diff --git a/sem2/lab4/TD/TDHELP.TDH b/sem2/lab4/TD/TDHELP.TDH Binary files differnew file mode 100644 index 0000000..3813e4e --- /dev/null +++ b/sem2/lab4/TD/TDHELP.TDH diff --git a/sem2/lab4/TD/TDINST.EXE b/sem2/lab4/TD/TDINST.EXE Binary files differnew file mode 100644 index 0000000..07d427b --- /dev/null +++ b/sem2/lab4/TD/TDINST.EXE diff --git a/sem2/lab4/TD/TDMAP.EXE b/sem2/lab4/TD/TDMAP.EXE Binary files differnew file mode 100644 index 0000000..e5bc453 --- /dev/null +++ b/sem2/lab4/TD/TDMAP.EXE diff --git a/sem2/lab4/TD/TDREMOTE.EXE b/sem2/lab4/TD/TDREMOTE.EXE Binary files differnew file mode 100644 index 0000000..d7d335a --- /dev/null +++ b/sem2/lab4/TD/TDREMOTE.EXE diff --git a/sem2/lab4/TD/TDRF.EXE b/sem2/lab4/TD/TDRF.EXE Binary files differnew file mode 100644 index 0000000..a49d4d0 --- /dev/null +++ b/sem2/lab4/TD/TDRF.EXE diff --git a/sem2/lab4/TD/TDSTRIP.EXE b/sem2/lab4/TD/TDSTRIP.EXE Binary files differnew file mode 100644 index 0000000..6913771 --- /dev/null +++ b/sem2/lab4/TD/TDSTRIP.EXE 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 Binary files differnew file mode 100644 index 0000000..8b8ef4e --- /dev/null +++ b/sem2/lab5/TD/TD.EXE diff --git a/sem2/lab5/TD/TD.OVL b/sem2/lab5/TD/TD.OVL Binary files differnew file mode 100644 index 0000000..91fdc3a --- /dev/null +++ b/sem2/lab5/TD/TD.OVL diff --git a/sem2/lab5/TD/TD386.EXE b/sem2/lab5/TD/TD386.EXE Binary files differnew file mode 100644 index 0000000..ac749ac --- /dev/null +++ b/sem2/lab5/TD/TD386.EXE diff --git a/sem2/lab5/TD/TDCONFIG.TD b/sem2/lab5/TD/TDCONFIG.TD Binary files differnew file mode 100644 index 0000000..bfdf827 --- /dev/null +++ b/sem2/lab5/TD/TDCONFIG.TD diff --git a/sem2/lab5/TD/TDH386.SYS b/sem2/lab5/TD/TDH386.SYS Binary files differnew file mode 100644 index 0000000..0bfe7bc --- /dev/null +++ b/sem2/lab5/TD/TDH386.SYS diff --git a/sem2/lab5/TD/TDHELP.TDH b/sem2/lab5/TD/TDHELP.TDH Binary files differnew file mode 100644 index 0000000..3813e4e --- /dev/null +++ b/sem2/lab5/TD/TDHELP.TDH diff --git a/sem2/lab5/TD/TDINST.EXE b/sem2/lab5/TD/TDINST.EXE Binary files differnew file mode 100644 index 0000000..07d427b --- /dev/null +++ b/sem2/lab5/TD/TDINST.EXE diff --git a/sem2/lab5/TD/TDMAP.EXE b/sem2/lab5/TD/TDMAP.EXE Binary files differnew file mode 100644 index 0000000..e5bc453 --- /dev/null +++ b/sem2/lab5/TD/TDMAP.EXE diff --git a/sem2/lab5/TD/TDREMOTE.EXE b/sem2/lab5/TD/TDREMOTE.EXE Binary files differnew file mode 100644 index 0000000..d7d335a --- /dev/null +++ b/sem2/lab5/TD/TDREMOTE.EXE diff --git a/sem2/lab5/TD/TDRF.EXE b/sem2/lab5/TD/TDRF.EXE Binary files differnew file mode 100644 index 0000000..a49d4d0 --- /dev/null +++ b/sem2/lab5/TD/TDRF.EXE diff --git a/sem2/lab5/TD/TDSTRIP.EXE b/sem2/lab5/TD/TDSTRIP.EXE Binary files differnew file mode 100644 index 0000000..6913771 --- /dev/null +++ b/sem2/lab5/TD/TDSTRIP.EXE 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 |