9891_пришивалко_виталий_лаб_6. Лабораторная работа 6 По дисциплине Программирование Тема Процедуры. Студент гр. 9891 Пришивалко В. Н
Скачать 120.51 Kb.
|
МИНОБРНАУКИ РОССИИ Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина) Кафедра вычислительной техники Лабораторная работа №6 По дисциплине «Программирование» Тема: Процедуры.
Санкт-Петербург 2021 Содержание: Цель………………………………………………………………………..2 Техническое задание Задание 1…………………………………………………………….2 Решение……………………………………………………………………2 Примеры кода……………………………………………………………..2 Заключение………………………………………………………………..4 Цель: освоение средств, обеспечивающих модульное программирование Задание 1: Необходимо создать основной модуль main программы, который после пуска программы осуществляет вывод на экран сообщения: “нажмите любую клавишу”, а затем вызывает call input процедуру, которая осуществляет ожидание нажатия клавиши. При нажатии клавиши процедура input вводит идентификатор нажатой клавиши и возвращает управление основному модулю main программы. В модуле main программы анализируется идентификатор нажатой клавиши. Если нажата клавиша, помеченная символом A, то модуль main программы осуществляет вызов процедуры output1, обеспечивающей печать сообщения “нажата клавиша A - взаимодействие завершено” и возвращающей управление основному модулю main программы, который завершает работу программы. Если идентификатор нажатой клавиши не соответствует символу A, то основной модуль main программы осуществляет вызов процедуры output2, которая осуществляет печать сообщения “нажмите клавишу A” и возвращает управление основному модулю main программы. Программа этого модуля в данном случае осуществляет безусловный переход (JMP) на существующую в программе команду CALL INPUT. Решение задачи 1: Код программы main TITLE MAIN .Model Small .Stack 100h .Data pkey db "press any key...$" a dw 1 ;переменные для передачи в стек b dw 2 .Code EXTRN INPUT:FAR EXTRN OUTPUT1:FAR EXTRN OUTPUT2:FAR start: mov ax, @data mov ds, ax mov es, ax ; add your code here lea dx, pkey mov ah, 9 int 21h ;output string at ds:dx inpt: push a ;передаем параметры в стек, при выходе вызываемая функция очистит стек push b call INPUT cmp al, 41h je otp1 ;call output1 if press A call OUTPUT2 jmp inpt otp1: call OUTPUT1 ; wait for any key.... mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h ends end start ; set entry point and stop the assembler. Модуль__output1'>Модуль__input'>Модуль input TITLE INPUT .model small .stack 100h .data .code PUBLIC INPUT INPUT PROC far push bp mov bp,sp ;кадр стека a equ [bp+6] ;первый параметр b equ [bp+4] ;тут можно что-то сделать с параметрами mov ax,@data mov ds,ax mov ah,1 int 21h pop bp ret 4 ;из стека доп. извлекаем 4 байта INPUT endp End Модуль output1 TITLE OUTPUT1 .model small .stack 100h .Data mes1 DB 10, 13, 'A - was pressed, end of program $' .code PUBLIC OUTPUT1 OUTPUT1 PROC far mov ax,@data mov ds,ax mov ah,9 lea dx, mes1 int 21h ret OUTPUT1 endp end Модуль output2 TITLE OUTPUT2 .model small .stack 100h .data mes2 DB 10, 13, 'Please, press A $' .code PUBLIC OUTPUT2 OUTPUT2 PROC far mov ax,@data mov ds,ax mov ah,9 lea dx,mes2 int 21h ret OUTPUT2 endp End Опыт 1: нажимаем клавишу f – должно появится сообщения ‘Please, press A’ - ок Опыт 2: нажимаем A должно появится сообщение 'A – was pressed, end of program' Заключение: В ходе выполнения работы были получены практические навыки реализации модульной программы. Научился передавать параметры через стек. Были изучены директивы и компоновка многомодульной программы. |