diff options
| author | Andrew <saintruler@gmail.com> | 2020-04-15 15:02:38 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2020-04-15 15:02:38 +0400 |
| commit | 693d8b180c690601ce44d640352b0d44151edb76 (patch) | |
| tree | 65c8f3836e6fe7fa23b8a85770fc43cd2cd16288 /asvt/labs/lab2/files/task2/task2.asm | |
| parent | 25f4267e827b0e61c36e43d5c064f6cf381f6134 (diff) | |
* Добавил исходники из лабораторных работ по асвт
* Переместил документы по асвт в отдельную директорию
Diffstat (limited to 'asvt/labs/lab2/files/task2/task2.asm')
| -rw-r--r-- | asvt/labs/lab2/files/task2/task2.asm | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/asvt/labs/lab2/files/task2/task2.asm b/asvt/labs/lab2/files/task2/task2.asm new file mode 100644 index 0000000..521a215 --- /dev/null +++ b/asvt/labs/lab2/files/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 ; Окончание программы |