Мегаобучалка Главная | О нас | Обратная связь


Запись программы на диск



2016-01-05 321 Обсуждений (0)
Запись программы на диск 0.00 из 5.00 0 оценок




Варианты №4

 

4. а) Описать адресацию и работу параллельного порта компьютера

б) Провести сравнение чисел X иY.Если X >Y , вывести на экран 0, если X <Y,

вывести на экран 1.

 

 

Написание программы в Debug и сохранение программы на диск.

 

Для создания данной программы будем использовать две функции DOS: функцию вывода строки на экран и функцию ввода с клавиатуры.

 

О функциях DOS

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

 

Чтобы обратиться к функции DOS:

- поместить номер функции DOS в регистр AH (если есть подфункции, то номер подфункции

обычно помещается в AL)

- загрузить остальные регистры согласно описанию функции

- подготовить необходимые буферы, строки ASCII и управляющие блоки

- вызвать прерывание INT 21H

- проверить индикатор ошибки, возвращенный DOS (флаг переноса)

 

DOS не изменяет значений регистров, исключая случаи, когда результирующие данные возвращаются через регистры. В процессе развития DOS новые версии остаются (в целом) совместимыми с более ранними версиями.

 

1). Функция ввода с клавиатуры

 

вход: AH = 02h

выход: AL = код символа, полученный из стандартного ввода.

 

Данная функция считывает (ожидает) символ со стандартного входного устройства. Отображает этот символ на стандартное выходное устройство (эхо).

 

2). Функция вывода строки на дисплей

 

вход: AH = 09h

DS:DX =адрес строки, заканчивающейся символом ‘$’

выход: нет

Описание :

Строка, исключая завершающий её символ ‘$’, посылается на стандартный вывод.

Обычно, чтобы перейти на новую строку, включают в текст пару CR/LF (ASCII 0Dh и 0Ah).

 

3). Завершение программы

Вызвать прерывание DOS Int 20h

 

Подготовка данных (строк) для вывода на экран

Разместим в памяти строки диалога с пользователем для наглядности программы. Для перехода на новую строку будем вводить перед каждой строкой по два байта 0d 0a (см. выше).

 

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

 

рис.1

 

На рис.1 видно, что сначала мы ввели в память два байта 0D и 0A в адреса 13E2:0200 и 13E2:0201 соответственно, а далее с адреса 13E2:0202 расположили первую строку программы "Вариант №4…". Последний байт этой строки символ $, код которого 24h, расположился по адресу 13E2:0243. Поэтому продолжаем ввод оставшихся строк с адреса 13E2:0244. После введения каждой строки командой "damp"= d просматриваем дамп памяти для определения адреса ввода последующей строки.

 

 

Листинг программы

mov ax, 900 `подготавливаем функцию вывода строки на экран, AH = 09h

mov dx, 200 `в регистр dx вносим адрес выводимой строки "Вариант №4……"

int 21 `вызываем прерывание DOS для выполнения функции вывода строки на экран

mov dx, 244 `в регистр dx вносим адрес строки "Введите число Х="

int 21 `вызываем прерывание DOS для выполнения функции вывода строки на экран

mov ax, 100 `подготавливаем функцию ввода символа с клавиатуры, AH = 01h

int 21 `вызываем прерывание DOS для выполнения функции

mov cx, ax `сохраним (скопируем) значение регистра AX (AL = код введённого числа X) в

` регистре CX для последующего использования (сравнения)

mov ax, 900 `опять готовим функцию вывода на экран, AH = 09h

mov dx, 257 `адрес строки "Введите число Y ="

int 21 `вызываем прерывание DOS для выполнения функции вывода строки на экран

mov ax, 100 `готовим функцию ввода символа, AH = 01h

int 21 `выполняем эту функцию: программа ожидает ввода символа с клавиатуры

mov bx, ax `копируем значение регистра ax (AL = код числа Y) в регистр bx

mov ax, 900 `установим заранее функцию вывода на экран, AH = 09h

cmp cx, bx `сравниваем значения регистров CX и BX, в которые мы сохранили числа X и Y

JG ds:133 `если число Х (т.е.его 16–ричный код) больше числа Y (...), то переходим к

` адресу 133, где запрограммирован вывод соответствующей строки на экран

JL ds:13A `если число Х (т.е.его 16–ричный код) меньше числа Y (...), то переходим к

` адресу 13A, где запрограммирован вывод соответствующей строки на экран

mov dx, 288 `в dx вносим адрес строки о равенстве чисел X и Y (переходы jg и jl не совершились)

int 21 `прерывание DOS, вывод строки на экран

int 20 `завершение программы

mov dx, 26a `в dx вносим адрес строки "X > Y" (сюда перейдёт по команде jg)

int 21 `прерывание DOS, вывод строки на экран

int 20 `завершение программы

mov dx, 279 `в dx вносим адрес строки "X < Y" (сюда перейдёт по команде jl)

int 21 `прерывание DOS, вывод строки на экран

int 20 `завершение программы

 

Ввод программы в Debug начинаем командой "assembler" – a. Программа записывается с адреса 100(если нет, то ввести команду a100). Сегментный регистр здесь DS = 13E2 (не существенно). В процессе программирования мы его не изменяем, поэтому адресацию производим лишь через регистр DX:

Запись программы на диск

Для записи программы на диск необходимо знать её размер в байтах, и это значение необходимо внести в регистр CX. Последний байт внесённый до этого нами в область данных имеет адрес 296 (см. выше). Это значение и будет размером программы. Вводим это число в регистр CX:

 

 

Далее необходимо командой "name"– n ввести имя программы (придумать) и командой "write"– w произвести запись программы в файл:

 

 

Теперь чтобы загрузить эту программу в Debug надо ввести её имя командой "name"– n, и загрузить командой "load" – L(файл программы должен находиться в каталоге программы debug):

Для запуска программы вводим командуg:

В данной программе сравниваются числа от 0 до 9. Анализ правильности ввода (что введено именно число, а не какая–нибудь буква) не производится. Данную проверку возможно было бы производить по анализу кодов введённых символов. То есть, если коды введённых символов выходят за рамки определённого диапазона (30h – 39h), то программа возвращается к вводу числа X или Y.



2016-01-05 321 Обсуждений (0)
Запись программы на диск 0.00 из 5.00 0 оценок









Обсуждение в статье: Запись программы на диск

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (321)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)