Автор: Пользователь скрыл имя, 30 Января 2013 в 13:40, курсовая работа
Написать программу, вычисляющую объем свободного пространства на дискете.
Брянский Государственный
Кафедра "Информатика и программное обеспечение"
Курсовой проект
по дисциплине
ОРГАНИЗАЦИЯ ЭВМ И СИСТЕМ
специальность 230105 «Программное обеспечение
вычислительной
техники и автоматизированных систем»
Группа: З-08ПО2
Студент: Денисенков М.В.
Номер зачётной книжки: 08.0796
Преподаватель: Трубаков А.О.
Брянск 2011
Исходный текст программы
Написать программу, вычисляющую объем свободного пространства на дискете.
Введение
Программа должна быть написана на языке ассемблера и реализовывать задачу по подсчет объема свободного пространства на дискете.
Анализ предметной области
Стандартная дискета на 1,44 Мб имеет две поверхности, которые нумеруются соответственно 0 и 1. На каждой стороне имеется 80 дорожек (нумерация от 0 до 79), которые поделены на секторы. Секторов в каждой дорожке 18 (нумерация от 1 до 18). В каждом секторе 512 байт.
В программе будет реализована возможность определить свободное место на дискете.
Доступ к дискам осуществляется через прерывание 21H. С помощью функции 36H
Вход
AH - 36H
DL – номер диска (0=текущий, 1=A)
Выход
AX – 0ffffH, если AL содержал неверный номер диска, и число секторов на кластер, если нет ошибок
BX – доступных кластеров
CX – байт на сектор
DX – всего кластеров на диске
Постановка задачи в формализованном виде
С помощью прерывания 21H выполнить функцию 36H перемножить AX*CX*BX и вывести на экран данные из буфера .
Общая блок-схема и описание программы
Инициализация сегментного регистра DS
Вывод титульного листа
Выход
Вызов прерывания
сравнение двух операндов
Отсутствует дискета
Умножение разрядов
0ffffH
Рисунок 1 – Блок-схема программы
Программа выводит титульный экран и ждёт нажатия любой клавиши. После этого вызывается подпрограмма, которая подсчитывает свободное место на дискете. Если в AX возвращено 0ffffH, значит, был задан неверный диск (или дисковод отсутствует). Иначе свободная память в байтах рассчитывается как AX*BX*CX.
Описание пользовательских структур данных
Данные, получаемые в результате прерывания, находятся в буфере AX:CX. В регистр DL – записывается номер диска. В регистр AX записывается либо сообщение об ошибке, либо число секторов на кластер, в BX содержится число доступных кластеров, CX – байт на сектор.
Руководство пользователя
При старте программа выдаёт титульный лист и ждёт нажатия любой клавиши. После этого она выводит на экран информацию о свободном месте на дискете в байтах.
Скриншоты тестовых запусков программы
Рисунок 2 – Титульный лист
Рисунок 3 – Сообщение с ошибкой
Листинг программы
.186
.model small
include ..\Lib\base.inc
include ..\Lib\conio.inc
.STACK 512
.DATA
TitlePage DB 10,13,23 dup(20h), "ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ"
DB 2 dup (10, 13), 17 dup (20h), "Брянский
государственный технический
DB 5 dup (10, 13), 18 dup (20h), "Курсовой проект по предмету 'Организация ЭВМ'"
DB 10, 13, 13 dup (20h), "на тему
'Определение свободного
DB 4 dup (10, 13), 58 dup (20h), "Студент группы З08ПО2"
DB 10, 13, 64 dup (20h), "Денисенков М. В."
DB 10, 13, 58 dup (20h), "Преподаватель:"
DB 10, 13, 65 dup (20h), "Трубаков А. О."
DB 7 dup (10, 13), 35 dup (20h), "Брянск 2011"
WaitStr DB 10, 13, "Для продолжения нажмите любую клавишу ....$"
strError DB 10, 13, "Неверный номер диска$"
strFree DB 10, 13, "Свободно на диске (байт) $"
.CODE
START:
; Инициализация сегментного регистра DS
mov AX,@data
mov DS,AX
; Основная часть программы
mov SI, offset TitlePage
call outputString
; Пауза до нажатия любой клавиши
call PauseForKey
;Проверка свободного места на дискете
mov AH, 36h
mov DL, 1
int 21h
CMP AX, 0ffffh
je Error
mul CX
mul BX ; AX*CX*BX - свободно в байтах
mov SI, offset strFree
call outputString
call OutputInt
pop AX
jmp Exit1
Error:
mov SI, offset strError
call OutPutString
Exit1:
mov SI, offset WaitStr
call outputString
; Пауза до нажатия любой клавиши
call PauseForKey
; Выход
call Exit
END START
Информация о работе Программное обеспечение вычислительной техники и автоматизированных систем