summaryrefslogtreecommitdiff
path: root/sem2/lab2
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2020-10-22 21:03:24 +0400
committerAndrew <saintruler@gmail.com>2020-10-22 21:03:24 +0400
commit143f34d941f32e0808fc9344d4c4126ff530d64a (patch)
treec79fcf309ad00e52100c0da544d96d3cc6ab6617 /sem2/lab2
Добавил решения второго семестра
Diffstat (limited to 'sem2/lab2')
-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
4 files changed, 80 insertions, 0 deletions
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