Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СПО 7 вариант

.docx
Скачиваний:
6
Добавлен:
05.09.2020
Размер:
165.69 Кб
Скачать

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«УФИМСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра АСУ

100

6

7

8

9

10

11

12

13

14

15

16

17

90

80

70

60

50

40

30

20

10

РАСЧЁТНО ГРАФИЧЕСКАЯ РАБОТА

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

Тема: «Низкоуровневое системное программирование для IBM PC»

Вариант 7.1.1.1.1

Группа

Фамилия, И., О.

Подпись

Дата

Оценка

Студент

Демидов М.Б.

Консультант

Лянцев О.Д.

Принял

Лянцев О.Д.


Уфа 2019 г.

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

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

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

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

ЗАДАНИЕ

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

Студент_Демидов М.Б. Группа ИВТ-314 Консультант __Лянцев О.Д.

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

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

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

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

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

Вариант 7. Вывести на экран параметры командной строки

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

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

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

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

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

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

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

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

Примеры выполнения программы, блок-схема алгоритма

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

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

подпись

Оглавление

Введение: 4

Цель: 4

Задание: 5

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

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

Результат работы программы: 10

Вывод: 10

Заключение: 10

Введение:

Знакомство с назначением и возможностями системных программ (их обычно называют DOS и BIOS) является необходимым элементом подготовки квалифицированного программиста, независимо от того, в какой предметной области он работает. При разработке программ на языках высокого уровня (Паскаль, Си, COBOL, Java) многие средства DOS и BIOS реализуются в неявной форме с помощью операторов языка, его встроенных функций или библиотечных процедур, и необходимость прямого использования системных функций возникает реже. Однако знакомство с внутренними возможностями DOS и BIOS с помощью языка низкого уровня Assembler, ее алгоритмами и процедурами позволяет увидеть за формализмом языка высокого уровня те реальные процессы, которые будут протекать в системе при выполнении прикладной программы и, следовательно, более осознанно подойти к разработке структуры программы и ее конкретных алгоритмов.

Образ программы в памяти начинается с префикса программного сег-мента (Program Segment Prefics, PSP), образуемого и заполняемого системой. PSP всегда имеет размер 256 байтов содержит таблицы и поля данных, ис-пользуемые системой в процессе выполнения программы. Некоторые из этих полей будут описаны ниже. Вслед за PSP располагаются сегменты програм-мы. Сегментные регистры автоматически инициализируются следующим об-разом: ES и DS указывают на начало PSP (что дает возможность, сохранив их содержимое, обращаться затем в программе к PSP), CS - на начало сегмента команд, a SS - на начало сегмента стека. В указатель команд IP загружается относительный адрес точки входа в программу (из операнда директивы END), а в указатель стека SP - смещение конца сегмента стека. Таким обра-зом, после загрузки программы в память адресуемыми оказываются все сег-менты, кроме сегмента данных. Инициализация регистра DS в первых стро-ках программы позволяет сделать адресуемым и этот сегмент для PSP.

Заполнять PSP будет по-прежнему система, но место под него в начале сегмента должен отвести программист. В программе нет необходимости инициализировать сегментный регистр DS, поскольку его, как и остальные сегментные регистры, инициализирует система. Данные можно разместить после программной процедуры (как это показано на рисунке), или внутри нее, или даже перед ней. Следует только иметь в виду, что при загрузке про-граммы типа .СОМ регистр IP всегда инициализируется числом l00h, поэтому сразу вслед за оператором ORG l00h должна стоять первая выполнимая строка программы. Если данные желательно расположить в начале программы, перед ними следует поместить оператор перехода на реальную точку входа, например JMP entry.

Цель:

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

Задание:

Вывести на экран параметры командной строки.

Формат программы: COM - программа;

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

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

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

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

Да

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

.model small

.code ;область кода

org 100h

start:

Процедура вычисление размера файла

lea dx, EndFile ;загружаем в dx адрес метки на конце файла

mov ax, dx ;копируем в ax

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

sub ax,dx ;вычитаем из конца начало, получая размер в байтах в ax

Процедура перевода числа из регистра ax(размера программы) в символьную строку

lea si,progSize+3 ;записываем в SI адрес последего символа строки с размером файла

;Начинаем перевод число в AX в строку

mov cx,10 ; Задаемся делителем CX = 10

Repeat:

mov dx,0 ; Обнуляем DX (для деления)

div cx ; Делим DX:AX на CX (10), получаем в AX частное, в DX остаток

add dl,'0' ;остаток лежит в младшей части - DL. Прибавляем код '0' для преобразования в символ

mov [si], dl;записываем этот символ в строку с размером файла

dec si ;уменьшаем адрес на единицу, т.к. идем справа налево(от младших разрядов к старшим)

cmp ax,0 ; Сравниваем AX с 0

jne Repeat ; Если не ноль, то перевели еще не все число, повторяем

На этом вывод программы закончен. переходим к самой программе

lea dx,progSizeMsg ;загружаем адрес строки с размером программы

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

int 21h ;dos

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

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

int 21h ;dos

mov si,80h ;по адресу 80h лежит значение количества символов в строке аргументов. Далее идет сама строка символов

lodsb ;загружаем значение по адресу si в al

cmp al,0 ;проверяем, не пустая ли строка аргументов

je Zero ;если al=0, то прыгаем вниз

;иначе у нас что-то есть в строке аргументов

mov cx,0 ;обнуляем cx

mov cl,al ;копируем в cl из al количество символов в строке аргументов

push cx ;сохраним cx в стеке

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

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

int 21h ;dos

mov ah,10h ;Функция ожидания нажатия клавиши

int 16h

MOV AH,03 ;функция получения позиции курсора

MOV BH,00 ;нулевая страница

INT 10h ;сервис BIOS

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

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

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

mov bp,81h ;адрес считывания.

pop cx ;возвращаем из стека количество символов в строке аргументов

mov bl,0C7h ;белый текст на красном фоне

int 10h ;выводим

jmp Exit

Zero:

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

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

int 21h ;dos

Exit:

mov ah,10h ;Функция ожидания нажатия клавиши

int 16h

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

int 21h ;сервис DOS

header DB 'Расчетно-графическая работа',10,13,'<<Системное программное обеспечение>>',10,13,'Студента группы ИВТ-314',10,13,'Демидов М.Б.',10,13,'Вариант 7',10,10,13,'$'

argsMsg db 'Аргументы командной строки:$'

zeroArgs db 'Аргументы командной строки отсутствуют!',10,13,'$'

progSizeMsg db 'Размер программы: '

progSize db ' ',' байт',10,10,13,'$'

EndFile: ;метка на конце программы для вычисления ее размера

end start

Результат работы программы:

Вывод:

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

Заключение:

В результате разработки данного курсового проекта была усвоена работа с ассемблером, рассмотрена и реализована структура программы в виде com-файла, определяющая свой собственный размер в памяти и выводящая на экран параметры командной строки, используя системные функции прерываний DOS и BIOS.

Список литературы

  1. Методические указания для курсового проектирования по курсу «Системное программное обеспечение» / Уфимск.гос.авиац.техн.ун-т; Сост.:О.Д.Лянцев – Уфа, 1997 – 27 с.

  2. Стандарты в программной документации: Методические указания к курсовому и дипломному проектированию для студентов всех специальностей. – Уфа: УАИ, 1987 – 35с.

  3. Лабораторный практикум по дисциплине «Системное программное обеспечение» / Уфимск. гос. авиац. техн. ун-т. Сост.: О.Д. Лянцев. – Уфа, 2008. – 57 с.