Главная страница
Навигация по странице:

  • Программирование » Тема

  • Решение задачи 1

  • Модуль input

  • Модуль output1

  • Модуль output2

  • 9891_пришивалко_виталий_лаб_6. Лабораторная работа 6 По дисциплине Программирование Тема Процедуры. Студент гр. 9891 Пришивалко В. Н


    Скачать 120.51 Kb.
    НазваниеЛабораторная работа 6 По дисциплине Программирование Тема Процедуры. Студент гр. 9891 Пришивалко В. Н
    Дата02.05.2021
    Размер120.51 Kb.
    Формат файлаdocx
    Имя файла9891_пришивалко_виталий_лаб_6.docx
    ТипЛабораторная работа
    #200843

    МИНОБРНАУКИ РОССИИ

    Санкт-Петербургский государственный

    электротехнический университет

    «ЛЭТИ» им. В.И. Ульянова (Ленина)

    Кафедра вычислительной техники


    Лабораторная работа №6

    По дисциплине «Программирование»

    Тема: Процедуры.



    Студент гр. 9891




    Пришивалко В. Н.

    Преподаватель




    Валов А. А.



    Санкт-Петербург

    2021

    Содержание:
    Цель………………………………………………………………………..2

    Техническое задание

    1. Задание 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'



    Заключение:

    В ходе выполнения работы были получены практические навыки реализации модульной программы. Научился передавать параметры через стек. Были изучены директивы и компоновка многомодульной программы.


    написать администратору сайта