Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГР_БалыбердинН.А..docx
Скачиваний:
12
Добавлен:
05.09.2020
Размер:
128.12 Кб
Скачать

ФГБОУ ВО Уфимский государственный авиационный технический университет

Кафедра АСУ

100

1

2

3

4

5

6

7

8

9

10

11

12

90

80

70

60

50

40

30

20

10

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К расчетно-графической работе

по дисциплине «Системное программное обеспечение»

НИЗКОУРОВНЕВОЕ СИСТЕМНОЕ

ПРОГРАММИРОВАНИЕ

ДЛЯ IBM PC

Вариант 2.1.1.1.1.

Группа ИВТ-414

Фамилия И.О.

Подпись

Дата

Оценка

Студент

Балыбердин Н.А.

Консультант

Лянцев О.Д.

Принял

Лянцев О.Д.

Уфа 2020 г.

Федеральное агентство по образования

Государственное образовательное учреждение высшего профессионального образования

«Уфимский государственный авиационный технический университет»

Кафедра Автоматизации систем управления

ЗАДАНИЕ

на РГР проект по дисциплине «Системное программное обеспечение»

Студент_Балыбердин Н.А. Группа__ИВТ-414 ___ Консультант___Лянцев О.Д.____

ФИО № акад. гр. ФИО

  1. Тема курсовой работы (наименование темы)

Разработка программы с помощью низкоуровневых средств на

языке ассемблера

  1. Основное содержание:

Вариант 2: вывести на экран содержимое текстового файла

FILE_SPO.txt (размером не более 80 байтов) синими символами на

желтом фоне

  1. Требования к оформлению:

    1. Пояснительная записка должна быть оформлена в редакторе Microsoft ®Word в соответствии с требованиями ___________ЕСКД,ЕСПД_________________________

ЕСКД, ЕСПД, ГОСТ и др.

    1. В пояснительной записке должны содержаться следующие разделы:

Титульный лист, задание, введение, обоснование выбора

низкоуровневых функций, текст программы с

комментариями, примеры выполнения программы, заключение

    1. Графическая часть должна содержать:

Примеры выполнения программы

Дата выдачи «___»__________20__г. Дата окончания «__»_______20__г.

Руководитель____________________

подпись

Содержани

Введение 4

Цель: 5

Задание: 5

Выбор системных функций и разработка алгоритма 6

Текст программы 8

Скриншоты программы 11

Заключение 11

Литература 12

Введение 3

Цель: 5

Задание: 5

Выбор системных функций и разработка алгоритма 6

Текст программы 8

Скриншоты программы 10

Заключение 11

Литература 12

Введение

Распространение микрокомпьютеров послужило причиной пересмотра отношения к языку ассемблера по двум основным причинам. Во-первых, программы, написанные на языке ассемблера, требуют значительно меньше памяти и времени выполнения.

Во-вторых, знание языка ассемблера и результирующего машинного кода дает понимание архитектуры машины, что вряд ли обеспечивается при работе на языке высокого уровня. Хотя большинство специалистов в области программного обеспечения ведут разработки на языках высокого уровня, таких как Паскаль или С, что проще при написании программ, наиболее мощное и эффективное программное обеспечение полностью или частично написано на языке ассемблера.

Языки высокого уровня были разработаны для того, чтобы избежать специальной технической особенности конкретных компьютеров. Язык ассемблера, в свою очередь, разработан для конкретной специфики компьютера или точнее для специфики процессора. Следовательно, для того, чтобы написать программу на языке ассемблера для конкретного компьютера, следует знать его архитектуру.

Язык ассемблера помогает раскрыть все секреты аппаратного и программного обеспечения. С его помощью можно получить представление о том, как аппаратная часть взаимодействует с операционной системой и как прикладные программы обращаются к операционной системе. Большинство программистов работают с языками высокого уровня, где отдельное утверждение преобразовывается во множество процессорных команд. Ассемблер язык машинного уровня; каждая команда непосредственно интерпретируется в машинный код, что дает основание считать его языком низкого уровня. Наиболее часто язык ассемблера используется для написания дополнений к операционной системе или для написания программ прямого доступа к аппаратуре. Он необходим также при оптимизации критических блоков в прикладных программах с целью повышения их быстродействия.

Написание ассемблерных программ требует знаний организации всей системы компьютера. Машинная программа представляет собой последовательность команд, которые «объясняют» компьютеру, что он должен делать. Но машинный язык труден для понимания людей – программистов.

Язык ассемблера, сохраняя все значения машинного языка, в то же время более понятен и удобен программисту. Компьютер «читает» программы на языке ассемблера и переводит их в машинный код, «ассемблирует» программу. Таким образом, операцию перевода с языка ассемблера на машинный выполняет программа, называемая ассемблером.

Язык ассемблера, в отличие от языков программирования высокого уровня, является машинно-зависимым, языком низкого уровня. По этой причине программа, написанная на ассемблере, должна отражать все особенности архитектуры микропроцессора: организацию памяти, способы адресации операндов, правила использования регистров и т. д. Из-за необходимости учёта подобных особенностей ассемблер уникален для каждого типа микропроцессоров.

Цель:

Целью выполнения расчётно-графической работы по дисциплине «Системное программное обеспечение» является формирование у студентов опыта создания прикладных программ на основе низкоуровневых системных функций BIOS и MS DOS.

Задание:

а) вывести на экран содержимое текстового файла FILE_SPO.txt (размером не более 80 байтов) синими символами на желтом фоне;

б) формат программы: com-программа;

в) ввод с клавиатуры: средствами DOS;

г) вывод на экран: в текстовом режиме;

д) динамическое распределение памяти: определение размера программы.

Выбор системных функций и разработка алгоритма

Рассмотрим работу в текстовом режиме. Вся работа программы осуществляется в стандартном текстовом режиме 80 символов на 25 строк.

Когда дисплей установлен в текстовый режим, то каждой позиции символа на экране отводится два байта памяти. Первый байт содержит номер кода ASCII кода символа, а второй — атрибуты символа. Цветной адаптер может выводить в цвете, как сам символ, так и всю область, отведенную данному символу (фоновый цвет).

Также рассмотрим структуру com-файла и определим функции ввода и вывода.

Программа типа .com содержит лишь один сегмент, включающий все компоненты программы: PSP (префикс программного сегмента — это область размером 100h байт, которая содержит информацию необходимую DOS для работы программы), программный код (т.е. оттранслированные в машинные коды программные строки), данные и стек. После загрузки программы все сегментные регистры (CS, DS, ES, SS) указывают на начало PSP. Указатель стека инициализируется числом FFFEh. Отсюда следует, что, независимо от фактического размера программы ей выделяется 64 Кбайт адресного пространства, всю нижнюю часть которой занимает стек.

Первое слово PSP содержит номер прерывания DOS, которое будет приводить к завершению программы. Когда выполняется последний оператор RET программы, то значения на вершине стека указывают счетчику команд (регистр IP) на начало PSP, таким образом, код завершения выполняется как следующая инструкция программы.

mov ah,13h — функция вывода строки

mov ah,2Ch — функция DOS определить время,

mov ah,0 — функция считывания кода нажатой клавиши

mov ah,04Ch — функция DOS завершения программы. Используется для выхода из программы.

Блок схема алгоритма

Текст программы

TITLE RGR_VAR2

.MODEL SMALL

.CODE

ORG 100H

Begin:

lea dx,Header ;загружаем адрес строки заголовка

call Show ;функция вывода

lea dx,FileString ;адрес строки с сообщением об имени файла

call Show ;Функция вывода строки на экран

lea dx,PressContinue ;адрес строки с сообщением о продолжении

call Show

MOV AH,10H ;ожидание нажатия кнопки

INT 16H

lea dx,FileName ;загружаем в dx адрес с именем файла

call OtkrFile ;получаем дескриптор файла через функцию

jc Error ;проверить флаг на ошибку открытия файла(файл отсутствует)

mov bx,ax ;сохраняем дескриптор файла в bx

lea dx,Buffer ;записываем адрес буфера в dx

mov cx,1 ;сколько байт(символов) читать. Будем читать по одному символу

Read:

mov ah,3fh ;функция считывания из файла

int 21h ;сервис dos

inc dx ;сдвинем адрес записи на ячейку

cmp ax, 0 ;в ax будет 0, если достигнут конец файла

jc Error ;проверить флаг на ошибку

jne Read ;если не конец файла, читаем дальше

dec dx ;уменьшим адрес записи на 1. Чтобы избежать вывода лишнего символа

mov ax,dx ;сохраняем конечный адрес строки в ax

lea dx,Buffer ;берем начальный адрес строки

sub ax,dx ;Вычитаем из адреса конца строки адрес начала. Тем самым находим размер строки

push ax ;сохраним количество символов для вывода в стеке

Call ZakrFile ;функция закрытие файла

mov ah,03 ;функция определения позции курсора. Координаты записываются в DX

mov bh,0 ;страница 0

int 10h ;вызвать BIOS

pop cx ;возвращаем количество символов для вывода из стека в cx. Будем использовать его для следующей функции

mov ah,13h ;функция вывода строки

mov al,1 ;использовать атрибут и переместить курсор

mov bh,0 ;0 страница

mov bl,0E9h ;Ярко синий текст на желтом фоне

lea bp,Buffer ;адрес считывания

;положение курсора получено ранее в DX. Количество символов для вывода в CX

int 10h ;выполняем

jmp Exit

Error:

lea dx, ErrStr ;загружаем в dx адрес строки с сообщением об ошибке

call Show

Exit:

MOV AH,10H ;ожидание нажатия кнопки

INT 16H

mov ah,04Ch ;функция DOS выхода из пpогpаммы

mov al,0h ;код возвpата

int 21h

OtkrFile PROC ;Функция открытия файла

mov ah,3dh ;функция открытия файла

mov al,0 ;0 - открыть для чтения 1 - запись 2 - чтение,запись

int 21h ;сервис dos

ret ;возврат

OtkrFile ENDP

ZakrFile PROC ;функция закрытия файла

mov ah,3eh ;функция закрытия файла

int 21h ;сервис dos

ret

ZakrFile ENDP

Show PROC ;функция вывода

mov ah,09 ;функция вывода строки на экран

int 21h ;dos

ret

Show ENDP

FileString DB 'Filename: '

FileName DB 'FILE_SPO.txt',0,10,13,'$'

ErrStr DB 'Ошибка работы с файлом. Возможно, файл отсутствует.',10,13,'$'

Header DB 'Расчетно-графическая работа',10,13,'<<Системное программное обеспечение>>',10,13,'Студента группы ИВТ-314',10,13,'Балыбердин Н.А.',10,13,'Вариант 2',10,10,13,'$'

PressContinue DB 'Press any key to continue...',10,10,13,'$'

Buffer DB ?

End Begin