Программное обеспечение вычислительной техники и автоматизированных систем

Автор: Пользователь скрыл имя, 30 Января 2013 в 13:40, курсовая работа

Краткое описание

Написать программу, вычисляющую объем свободного пространства на дискете.

Файлы: 1 файл

Курсовой проект - Макс.docx

— 80.75 Кб (Скачать)

Брянский Государственный Технический  Университет

Кафедра "Информатика и программное  обеспечение"

 

 

 

Курсовой проект

по дисциплине

ОРГАНИЗАЦИЯ ЭВМ И СИСТЕМ

 

специальность 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


Информация о работе Программное обеспечение вычислительной техники и автоматизированных систем