отчёт по учебной практике. Министерство образования и науки забайкальского края государственное профессиональное образовательное учреждение
Скачать 233.84 Kb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ ЗАБАЙКАЛЬСКОГО КРАЯ ГОСУДАРСТВЕННОЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ЧИТИНСКИЙ ТЕХНИКУМ ОТРАСЛЕВЫХ ТЕХНОЛОГИЙ И БИЗНЕСА УТВЕРЖДАЮ Зам. директора по учебной работе _____________ А.С.Варфоломеева «__» ___________________2022 г. ОТЧЁТ ПО УЧЕБНОЙ ПРАКТИКЕ 09.02.07 Информационные системы и программирование
2022 г. Содержание Введение 3 1.Создание программного обеспечения на языке ассемблера 5 2.Практическая работа №1 “Написание первой программы на языке ассемблера” 6 3.Практическая работа №2 “Применение функций DOS и BIOS” 7 3.1 Задание 1 8 3.2 Задание 2 8 3.3 Задание 3 8 3.4 Задание 4 8 4.Практическая работа №3 “Линейные алгоритмы” 9 4.1 Задание 1 10 4.2 Задание 2 11 4.3 Задание 3 11 4.4 Задание 4 12 4.5 Задание 5 13 5.Практическая работа №4 “Десятичная арифметика” 15 Заключение 19 Список использованных источников 20 ВведениеУчебную практику "Разработка модулей программного обеспечения для компьютерных систем" проходил в ГПОУ “ЧТОТиБ”, в течении с 04.05.2021 г. по 06.05.2021 г. Учебная практика важна не только тем, что дает студенту общие представление и навыки о том, как будет проходить производственная практика в будущем, но и является основной часть процесса подготовки профессионально ориентированных работников и является отличной возможностью для проявления себя, показать свои знания и навыки, полученные на занятиях. Поэтому, каждый актуальный учебный процесс чередует теорию с практикой. Цель учебной практики – приобретение и закрепление теоретических и практических навыков: Разработки кода программного продукта на основе готовой спецификации на уровне модуля; Использования инструментальных средств на этапе отладки программного продукта; Задачи учебной практики состоят в следующем: Осуществлять разработку кода программного модуля на языках низкого и высокого уровня; Создавать программу по разработанному алгоритму как отдельный модуль; Разрешение проблем совместимости программного обеспечения; Диагностика и восстановление к омпьютерной системы. Выполнять отладку и тестирование программы на уровне модуля Осуществлять разработку кода программного модуля на современных языках программирования Уметь выполнять оптимизацию и рефакторинг программного кода Оформлять документацию на программные средства приобретение первоначального практического опыта: Разработка кода программного продукта на основе готовой спецификации на уровне модуля Использование инструментальных средств на этапе отладки программного продукта Проведение тестирования программного модуля по определенному сценарию Разработка мобильных приложений профессиональных компетенций(ПК): Формировать алгоритмы разработки программных модулей в соответствии с техническим заданием Разрабатывать программные модули в соответствии с техническим заданием Выполнять отладку программного модуля с использованием специализированных программных средств. Выполнять тестирование программных модулей Осуществлять рефакторинг и оптимизацию программного кода Выбирать способы решения задач профессиональной деятельности, применительно к различным контекстам Осуществлять поиск, анализ и интерпретацию информации, необходимой для выполнения задач профессиональной деятельности. Пользоваться профессиональной документацией на государственном и иностранном языке Создание программного обеспечения на языке ассемблераТеория Процесс создания программы на языке ассемблера включает в себя следующие этапы: Постановка задачи (точное и подробное описание функциональности будущей программы, а также описание всех входных и выходных данных и способа их передачи программе); Разработка алгоритма программы (построение блок схемы, граф-схемы или текстовое или математическое описание решения); Формализация алгоритма (запись алгоритма на языке программирования). Создание текстового файла программы с расширением .asm (например my.asm). Отсутствие среды разработки позволяет программисту самостоятельно выбрать текстовый редактор для написания кода программы. Для этой цели подойдет любой текстовый редактор с нумерацией строк, мы рекомендуем редактор, встроенный в оболочку "FAR Manager". Компиляция программы. Компиляция - процесс перевода программы из текстового вида в машинный код. При использовании компилятора фирмы Borland необходимо выполнить: tasm my.asm т.е. запускаем компилятор tasm и передаем с командной строки имя файла, содержащего программу. Если программа имеет синтаксические ошибки, компилятор выдаст сообщение об ошибке с указанием номера строки и описанием для каждой ошибки (нужно вернуться на этап №3 и исправить синтаксические ошибки). В случае успешной компиляции будет создан файл, содержащий объектный код программы my.obj, который ещё не является исполняемым модулем. Компоновка программы. Компоновка - создание из файла объектного кода исполняемого модуля. tlink my.obj. В качестве параметра компоновщик tlink принимает имя файла содержащего объектный код программы (в нашем случае - my.obj). В случае успешной компоновки будет создан исполняемый модуль my.exe Запуск и тестирование исполняемого модуля программы. На данном этапе необходимо проверить, соответствует ли написанная программа постановке задачи, сделанной нами на этапе №1. Неправильная работа программы говорит об алгоритмической ошибке (семантическая ошибка), поэтому для успешного её устранения нужно вернуться на этап разработки алгоритма (этап №2). Практическая работа №1 “Написание первой программы на языке ассемблера”Теория Переход на новую строку Для организации перехода на новую строку достаточно вывести на экран символы перевода строки и возврата каретки (CR/LF). Эти символы имеют коды 10 и 13. Если в нашей программе необходимо после вывода строки перейти на новую, то для этого достаточно переписать вторую строку программы: mes2 db 'Выводим строку и переходим на новую...', 10, 13, '$' Переход на новую строку можно выполнить и до вывода сообщения на экран: mes3 db 10, 13, 'Выводим с новой строки...$' Постановка задачи. Написать программу, которая выводит одно под другим следующие сообщения: Привет! Меня зовут компьютер! До свидания! Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb1.asm и записываем в него следующий код(без нумерации): data segment; начало сегмента данных mes db 'Hello!', 10,13,'My name a computer!', 10,13,'Goodbye!$' ; ссылка на сообщение в сегменте данных data ends; конец сегмента данных code segment; начало сегмента кода start:; метка start - начало программы assume cs: code, ds: data; директива компилятора mov ax, data; настройка сегмента данных mov ds, ax; настройка сегмента данных mov ah, 9; функция №9 - вывод строки на экран lea dx, mes; берем адрес строки int 21h; вызов прерывания для вывода строки mov ax, 4c00h; функция завершения программы int 21h; прерывание для завершения программы code ends; конец сегмента кода end start; конец программы с меткой start Результат работы алгоритма см. рис. 1. Практическая работа №2 “Применение функций DOS и BIOS”Теория Общий алгоритм применения функций любого прерывания: Поместить номер вызываемой функции в регистр ah; Подготовить, если необходимо, входные данные для функции; Вызвать прерывание; Сохранить или обработать выходные данные Пример 1: Вывести на экран символ '$' mov ah, 02; номер функции mov dl, '$'; входные данные int 21h; вызов прерывания Пример 2: Очистить экран mov ah, 0fh; получить параметры видеорежима int 10h mov ah, 00; установить параметры видеорежима int 10h Функции BIOS (Int 10h):
Задание 1Постановка задачи. Написать программу, которая выводит на экран сумму двух введенных с клавиатуры цифр (значение вводить так, чтобы сумма была меньше 10); Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb2-1.asm и записываем в него следующий код(без нумерации): Задание 2Постановка задачи. Написать программу, которая выводит на экран сумму двух введенных с клавиатуры цифр (значение вводить так, чтобы сумма была меньше 10); Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb2-2.asm и записываем в него следующий код(без нумерации): Задание 3Постановка задачи. Написать программу, которая выводит на экран сумму двух введенных с клавиатуры цифр (значение вводить так, чтобы сумма была меньше 10); Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb2-3.asm и записываем в него следующий код(без нумерации): Задание 4Постановка задачи. Написать программу, которая выводит на экран сумму двух введенных с клавиатуры цифр (значение вводить так, чтобы сумма была меньше 10); Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb2-4.asm и записываем в него следующий код(без нумерации): Практическая работа №3 “Линейные алгоритмы”Теория Команда пересылки данных: mov <приемник>, <источник> команда mov – команда пересылки данных, результатом ее исполнения является копирование данных из операнда <источник> в операнд <приемник>. mov ah, 09; записать в регистр ah число 09 mov cl, ah; скопировать байт из регистра ah в ch mov bx, cx; скопировать слово из регистра cx в регистр bx mov ch, 0fh mov ch, bl Простейшие арифметические команды:
Отладчик Turbo Debugger Отладчик Turbo Debugger (TD) – оконная среда отладки программ, позволяет производить отладку программ, написанных на языках Pascal, C, assembler. TD позволяет определить: место логической ошибки (семантической); причину логической ошибки. Для использования TD необходимо выполнить следующие действия: tasm /z *.asm ;откомпилировать с добавлением отладочной информации tlink /v *.obj ;скомпоновать с добавлением отладочной информации td *. exe Файл с исходным кодом программы должен находиться в директории отладчика. Задание 1Постановка задачи. Написать программу, которая выводит на экран сумму двух введенных с клавиатуры цифр (значение вводить так, чтобы сумма была меньше 10); Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb3-1.asm и записываем в него следующий код(без нумерации): data segment; начало сегмента данных data ends; конец сегмента данных code segment; начало сегмента кода start:; начало программы с меткой start assume cs: code, ds:data; директива компилятора mov ax, data; настройка сегмента данных mov ds, ax; настройка сегмента данных mov ah, 8; функция №8 - ввод символа с ожиданием int 21h; вызов прерывания для ввода символа mov bl, al; сохранение al в bl mov ah, 8; функция №8 - ввод символа с ожиданием int 21h; вызов прерывания для ввода символа mov bh, al; сохранение al в bh add bl, bh; сложение bl и bh sub bl, 30h; вычитание 30 бит для корректного отображения результата mov ah, 2; функция №2 - вывод символа mov dl, bl; получаем выводимые данные int 21h; вызов прерывания для вывода символа mov ax, 4c00h; функция завершения программы int 21h; прерывание для завершения программы code ends; конец программы end start; конец программы с меткой start Результат работы алгоритма см. рис. 6. Задание 2Постановка задачи. Изучите работу отладчика TD на примере задачи из первого задания. Необходимо изучить: a). Систему меню программы TD. (см. рис. 7) b). Систему вспомогательных окон CPU; (см. рис. 8) Dump. (см. рис. 9) Задание 3Постановка задачи. Написать программу, которая выводит на экран два введенных с клавиатуры символа в обратном порядке (Например: '1gg1', 'assa', '-==-'); Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb3-3.asm и записываем в него следующий код(без нумерации): data segment ; начало сегмента данных mes db 'Enter anyway sumbols',10,13,'$'; ссылка на сообщение с меткой mes data ends; конец сегмента данных code segment; начало сегмента кода start:; начало программы с меткой start assume cs: code, ds: data; директива компилятора mov ax, data; настройка сегмента данных mov ds, ax; настройка сегмента данных mov ah, 9; функция №9 - вывод строки lea dx, mes; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа mov cl, al; сохранение символа в cl mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа mov ch, al; сохранение символа в ch mov ah, 2; функция №2 - вывод символа mov dl, ch; получение данных для вывода int 21h; вызов прерывания для вывода символа mov ah, 2; функция №2 - вывод символа mov dl, cl; получение данных для вывода int 21h; вызов прерывания для вывода символа mov ax, 4c00h; функция завершения программы int 21h; прерывание для завершения программы code ends; конец сегмента кода end start; конец программы с меткой start Результат работы алгоритма см. рис. 10. Задание 4Постановка задачи. Написать программу, которая вычисляет y=2a-b+1 при a и b введенных с клавиатуры; Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb3-4.asm и записываем в него следующий код(без нумерации): data segment; начало сегмента данных mes db 'y = 2a - b + 1',10,13,'$'; ссылка на сообщение с меткой mes a db 'a = $'; ссылка на сообщение с меткой a b db 10,13,'b = $'; ссылка на сообщение с меткой b ex db 10,13,'OTBET: $'; ссылка на сообщение с меткой ex data ends; конец сегмента данных code segment; начало сегмента кода start:; начало программы с меткой start assume cs: code, ds: data; директива компилятора mov ax, data; настройка сегмента данных mov ds, ax; настройка сегмента данных mov ah, 9; функция №9 - вывод строки lea dx, mes; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 9; функция №9 - вывод строки lea dx, a; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа sub al, 30h; вычитание 30 бит для корректного вычисления mov bl, 2; присвоение bl 2 mul bl; умножение al на bl mov bl, al; сохранение результата в bl mov ah, 9; функция №9 - вывод строки lea dx, b; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа mov bh, al; сохранение al в bh sub bh, 30h; вычитание 30 бит для корректного вычисления sub bl, bh; вычитание из bl bh add bl, 1; сложение bl и 1 xor ax, ax; зачистка регистра ax mov al, bl; перенос значения из bl в al mov bl, 10; присвоение bl 10 div bl; деление al на bl add ax, 3030h; добавление регистру ax 30 бит для корректного отображения mov bh, ah; перенос значения из ah в bh mov ah, 9; функция №9 - вывод строки lea dx, ex; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 2; функция №2 - вывод символа mov dl, al; получение данных для вывода int 21h; вызов прерывания для вывода символа mov ah, 2; функция №2 - вывод символа mov dl, bh; получение данных для вывода int 21h; вызов прерывания для вывода символа mov ax, 4c00h; функция завершения программы int 21h; прерывание для завершения программы code ends; конец сегмента кода end start; конец программы с меткой start Результат выполнения алгоритма см. рис. 11. Задание 5Постановка задачи. Написать программу, которая выводит на экран сумму двух введенных с клавиатуры цифр (значение вводить так, чтобы сумма была больше 10); Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb3-5.asm и записываем в него следующий код(без нумерации): data segment; начало сегмента данных mes db 'y = a + b',10,13,'$'; ссылка на сообщение с меткой mes a db 'a = $'; ссылка на сообщение с меткой a b db 10,13,'b = $'; ссылка на сообщение с меткой b ex db 10,13,'OTBET: $'; ссылка на сообщение с меткой ex data ends; конец сегмента данных code segment; начало сегмента кода start:; начало программы с меткой start assume cs: code, ds: data; директива компилятора mov ax, data; настройка сегмента данных mov ds, ax; настройка сегмента данных mov ah, 9; функция №9 - вывод строки lea dx, mes; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 9; функция №9 - вывод строки lea dx, a; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа sub al, 30h; вычитание 30 бит для корректного вычисления mov bl, al; сохранение al в bl mov ah, 9; функция №9 - вывод строки lea dx, b; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа mov bh, al; сохранение al в bh sub bh, 30h; вычитание 30 бит для корректного вычисления add bl, bh; сложение из bl и bh xor ax, ax; зачистка регистра ax mov al, bl; перенос значения из bl в al mov bl, 10; присвоение bl 10 div bl; деление al на bl add ax, 3030h; добавление регистру ax 30 бит для корректного отображения mov bh, ah; перенос значения из ah в bh mov ah, 9; функция №9 - вывод строки lea dx, ex; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 2; функция №2 - вывод символа mov dl, al; получение данных для вывода int 21h; вызов прерывания для вывода символа mov ah, 2; функция №2 - вывод символа mov dl, bh; получение данных для вывода int 21h; вызов прерывания для вывода символа mov ax, 4c00h; функция завершения программы int 21h; прерывание для завершения программы code ends; конец сегмента кода end start; конец программы с меткой start Результат работы алгоритма см. рис. 12. Практическая работа №4 “Десятичная арифметика”Теория Команды, предназначенные для работы с неупакованными BCD-числами:
Постановка задачи. Написать программу, которая выводит на экран сумму двух введенных с клавиатуры цифр (значение вводить так, чтобы сумма была больше 10); Разработка алгоритма программы. Алгоритм линейный, разработки не требует. Формализация (запись) алгоритма. В текстовом редакторе создаем файл lb4.asm и записываем в него следующий код(без нумерации): data segment; начало сегмента данных mes db 'Enter values for the expression A+B $'; ссылка на сообщение с меткой mes a db 10,13,'a = $'; ссылка на сообщение с меткой a b db 10,13,'b = $'; ссылка на сообщение с меткой b ex db 10,13,'OTBET: $'; ссылка на сообщение с меткой ex data ends; конец сегмента данных code segment; начало сегмента кода start:; начало программы с меткой start assume ds:data, cs:code; директива компилятора mov ax, data; настройка сегмента данных mov ds, ax; настройка сегмента данных mov ah, 9; функция №9 - вывод строки lea dx, mes; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 9; функция №9 - вывод строки lea dx, a; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа mov cl, al; сохранение символа в cl sub cl, 30h; вычитание 30 бит для корректного счета mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа mov ch, al; сохранение символа в ch sub ch, 30h; вычитание 30 бит для корректного счета mov ah, cl; перемещение cl в ah mov al, ch; перемещение ch в al aad; преобразование ah и al в двухзначное число mov bl, al; сохранение результата в bl mov ah, 9; функция №9 - вывод строки lea dx, b; получение адреса строки int 21h; вызов прерывания для вывода строки mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа mov cl, al; сохранение символа в cl sub cl, 30h; вычитание 30 бит для корректного счета mov ah, 1; функция №1 - ввод символа int 21h; вызов прерывания для ввода символа mov ch, al; сохранение символа в ch sub ch, 30h; вычитание 30 бит для корректного счета mov ah, cl; перемещение cl в ah mov al, ch; перемещение ch в al aad; преобразование ah и al в двухзначное число mov bh, al; сохранение результата в bh mov ah, 9; функция №9 - вывод строки lea dx, ex; получение адреса строки int 21h; вызов прерывания для вывода строки xor ax, ax; очищение регистров ax mov ah, bl; перемещение bl в ah add ah, bh; сложение ah и bh aaa; коррекция результата после сложения mov bl, ah; сохранение десятков в bl mov bh, al; сохранение единиц в bh mov ah, 2; функция №2 - вывод символа add bl, 30h; добавление 30 бит для корректного отображения mov dl, bl; получение данных для вывода int 21h; вызов прерывания для вывода символа mov ah, 2; функция №2 - вывод символа add bh, 30h; добавление 30 бит для корректного отображения mov dl, bh; получение данных для вывода int 21h; вызов прерывания для вывода символа mov ax, 4c00h; функция завершения программы int 21h; прерывание для завершения программы code ends; конец сегмента кода end start; конец программы с меткой start Результат работы алгоритма см. рис. 13. ЗаключениеВ результате прохождения учебной практики поставленная цель была достигнута, все задачи решены в полном объеме, профессиональные компетенции приобретены. Знания, умения, навыки, полученные за период учебной практики, явились отличным стимулом для активной работы в освоении будущей специальности, позволили практически реализовать теоретически изученные моменты, получить начальный учебный опыт работы и сформировать общее представление о специфике деятельности. Список использованных источниковYouTube: [Электронный ресурс]. – Режим доступа: https://www.youtube.com - свободный; Приложение Рисунок 1 – Результат работы алгоритма 1 практической работы Рисунок 6 – Результат работы алгоритма 3 практической работы, 1 задания Рисунок 7 – Меню программы TD Рисунок 8 – CPU Рисунок 9 – Dump Рисунок 10 – Результат работы алгоритма 3 практической работы, 3 задания Рисунок 11 – Результат работы алгоритма 3 практической работы, 4 задания Рисунок 12 – Результат работы алгоритма 3 практической работы, 5 задания Рисунок 13 – Результат работы алгоритма 4 практической работы |