лабораторная работа саод. ОСиС1 Стефанова М.А. 220692. Отчет по лабораторной работе 1 Изучение работы клавиатуры и дисплея уоу
Скачать 126.56 Kb.
|
МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего образования «Тульский государственный университет» Институт прикладной математики и компьютерных наук Кафедра вычислительной техники Отчет по лабораторной работе № 1 «Изучение работы клавиатуры и дисплея УОУ» Вариант № 9 по дисциплине Операционный системы и среды Выполнил студент группы 220692: Стефанова М. А. Проверил: асс. Демидова А. В. Тула 2020 ЦЕЛЬ РАБОТЫ Целью выполнения данной работы является приобретение навыков разработки программ, использующих в своей работе функциональные клавиши для управления процессом решения. ЗАДАНИЕ НА ЛАБОРАТОРНУЮ РАБОТУ Написать программу, которая позволяет ввести два числа (от 0 до 9) и вычислить их разность, после чего ответ выводится на экран. При этом первое число должно быть больше второго. ХОД РАБОТЫ Создать файл и записать в него код разработанной программы (листинг программы приведен ниже). Листинг программы: .model small ; код размещается в одном сегменте, а данные и стек – в другом .stack 16h .data ; сегмент данных, в которых находятся данные программы msgA db 13,10,'Enter A = ', '$ ' ;сообщение, выводимое на экран, ;где 13 и 10 – это последовательность ASCII CR/LF, используемая для ;продвижения к началу следующей строки msgB db 13,10,'Enter B = ', '$ ' msg1 db 13,10,'Result = ', '$ ' msg label byte ;структура для ввода символов клавиатуры maxnum db 6 ;максимальное количество символов reallen db ? numfld db 5 dup(30h) ;буфер для ASCII кодов символов ;зарезервировать 5 байт ;и пока ничего туда не помещать mult10 dw 0 ;вспомогательная переменная для преобразования символов в число ascval db 5 dup(30h),'$' x dw ? a dw 0 b dw 0 c dw 0 z dw 0 ;результат преобразования символов в число u dw 0 .code ;сегмент кода start: ;начало выполнения программы mov ax, @data ;@data - это идентификатор DATASEG при компиляции ;и сборки приложения на место этого слова будет поставлено реальное ;смещение сегмента, в котором находятся данные. mov ds, ax ;данные из регистра ax пересылаются в регистр ds mov ah,9 ;функция DOS вывода строки lea dx, msgA ;сообщение "Enter A = " int 21H; ;вызов прерывания DOS - получить следующую клавишу mov ah,0AH lea dx,msg int 21H ;вызов прерывания DOS call asbin ;ввод числа с клавиатуры mov ax,z mov a,ax mov ah,9 lea dx, msgB ; Сообщение "Enter B = " int 21H; mov ah,0AH lea dx,msg int 21H call asbin ; Ввод числа с клавиатуры mov ax,z mov b,ax mov bx, dx mov cx, ax xor dx,dx mov ax, a cmp [b], ax jb @sub; если первое меньше второго jmp start @sub: sub ax,b ;вычитание mov x, ax mov ah,9 lea dx, msg1 ;сообщение "Result = " int 21H; 64 call outp ;вывод результата на экран Exit: mov ah, 4ch ;выйти из программы, пересылка 4c00h в регистр ax, функция DOS завершения int 21h ;вызов прерывания с номером 21h asbin proc ;процедура ввода с клавиатуры - преобразования символов в число mov mult10,0001 ;инициализация фактора преобразования mov z,0 ;обнуление результата mov cx,10 ;основание системы счисления lea si,numfld-1 ;установка указателя на начало буфера mov bl,reallen ;загрука фактического колиества символов числа sub bh,bh ;обнуление регистра bh b20: ;цикл преобразования символов часло mov al,[si+bx] ;загрузка символа из конца буфера and ax,000fH ;выделение младешей тетрады mul mult10 ;выделение еденицы и умножение цифры на 10 в степени n add z,ax ;прибавление промежуточного результата mov ax,mult10 ;загрузка переменной нового значеня mult10 в ax mul cx ;умножение переменной mult10 на 10 mov mult10,ax ;сохранение нового значение переменной dec bx ;перемещение указателя на следующий разряд числа jnz B20 ;продолжение цикла преобразования ret asbin endp outp proc ;процедура вывода на экран mov cx,10 ; система счисления lea si, ascval+4 ;установка указателя на конец массива ascval mov ax, x ;результат х занести в ax c20: cmp ax,10 ;сравнить результат с числом 10 jb c30 ;если меньше то преобразовывать не надо xor dx,dx ;очистка регистра dx для команды деления div cx ;делим на 10 or dl, 30h ;преобразование остатка к ASCII коду mov [si], dl ;занесение остатка от деления в массив ascval dec si ;перемещение указателя массива на 1 байт влево jmp c20 ;переход на начало для преобразования след. цифры c30: or al, 30h ;если остаток меньше 10, то вывод результата на экран mov [si], al ;дисплея командами (см. ниже) lea dx, ascval ;загрузка адреса массива mov ah, 9 ;Вызов 9-ой функции MS-DOS int 21h ret ;возврат в головную программу из п/программы outp endp ;конец процедуры end start Для создания исполняемого файла необходимо сначала оттранслировать программу, используя команду «tasm». Получаются объектные модули. После нужно скомпоновать программу, объединив все объектные модули, если их несколько, используя команду «link», в результате чего получается exe-файл. Теперь можно запустить программу и увидеть результаты ее работы (рисунок 1). Рисунок 1 – Результат тестирования ВЫВОД В результате выполнения данной работы мы приобрели теоретические знания и практические навыки в области разработки программ, использующих в своей работе функциональные клавиши для управления процессом решения. |