Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vvod_inform_s_klav_v_pamyat_i_vyvod_eyo_na_ekr.doc
Скачиваний:
23
Добавлен:
07.06.2015
Размер:
699.9 Кб
Скачать

Контрольные вопросы

1.Какая информация может располагаться в сегменте данных?

2.Как должен начинаться и заканчиваться кодовый сегмент программы?

3.Какие ASCII – коды используются в программе для вывода информации на экран с новой строки?

4.Какое прерывание и какая функция DOS используются для вывода строки символов на экран?

5.Для каких целей используется функция DOS – 02h?

6.Для каких целей служит оператор offset?

17.Что означает символ $, стоящий в конце строки подлежащей выводу на STDOUT?

18.Как программным способом можно организовать временную задержку?

Лабораторная работа № 3

Исследование процесса ввода информации в память ПЭВМ с помощью командной строки

В данной работе необходимо составить программу, которая выполняет следующие действия. В область сегмента данных вводятся несколько символов клавиатуры, набираемых в командной строке. После ввода символов в память на монитор с новой строки выводится сообщение: ’Ввод символов клавиатуры в память ЭВМ с помощью командной строки’, составленное на английском языке. Затем введённые символы с новой строки выводятся на экран монитора. Внимание! В этом случае вначале имя файла с исполняемой программой (.exe файла) набирается в командной строке, затем в ней набираются символы клавиатуры, и только после этого нажимается клавиша Enter для выполнения программы. Например, после имени файла lab_2.exe можно напечатать предложение: ,’I am learning ASSEMBLER’, которое вводится в память после нажатия клавиши Enter.

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

Напомним, что после нажатия клавиши Enter набранные в командной строке символы клавиатуры запишутся в префикс программного сегмента, начиная с ячейки памяти под номером 81h. В ячейке 80h будет сформировано число, отражающее количество конкретно введенных символов в префикс программного сегмента. Следовательно, первое что нужно сделать в кодовом сегменте программы, это передать введённые символы из PSP в сегмент данных. Для этого в области .data заранее формируется буфер, объёмом не более 255 байт, так как в префикс программного сегмента большее количество символов записать нельзя. Весь этот буфер предварительно заполняется символами ’$’ – окончание вывода.

Для перезаписи введённых символов в этот буфер в кодовом сегменте программы оператором offset необходимо занести начальный адрес буфера в индексный регистр si. Тогда на этот адрес будет указывать пара регистров ds:[si]. Напомним, что здесь квадратные скобки означают, что в Вашей программе должна использоваться косвенная адресация при перезаписи указанных символов в сегмент данных. Для задания адреса символа в области PSP также необходимо использовать пару регистров es:[di]. При этом в индексный регистр di предварительно заносится начальный адрес массива символов в PSP – 81h с помощью команды mov di,81h. Как было отмечено раннее, вначале программы сегментные регистры es и ds настроены на начало PSP, но после первых двух обязательных команд программы

mov ax,@data

и

mov ds,ax

регистр ds настраивается на область данных .data, а регистр es всё ещё будет указывать на начало PSP. Отметим, что непосредственно передовать информацию из одной области памяти в другую нельзя. Передача байтов может происходить только через аккумулятор al, то есть очередной байт из PSP вначале передаётся в аккумулятор, а затем уже в сегмент данных. Эту передачу всех символов необходимо организовать циклически с использованием регистра cx и команды loopnz метка. Для этого в регистр cx , а точнее в cl нужно передать содержимое ячейки 80h префикса программного сегмента, а старшую половину регистра – ch – обнулить. Отметим, что обнулить любой регистр, также как и ячейку памяти можно командой xor - ’исключающее ИЛИ’, например, xor cx,cx, а передачу содержимого ячейки – командой mov al,es:[80h]. Таким образом, только после перезаписи введенных символов в сегмент данных, а именно в отведённый для этих целей буфер, осуществляется вывод на экран монитора заданного сообщения и затем с новой строки вывод самих введённых символов клавиатуры.

Контрольные вопросы

1.Что такое PSP, где он располагается и для каких целей используется?

2.В какую область PSP вводятся данные из командной строки?

3.В какую ячейку памяти PSP записывается число реально введённых в него символов клавиатуры и какое максимальное значение оно может иметь?

4.Сколько байт отводится в ASCII – коде под каждый символ клавиатуры?

5.На какую область памяти указывают сегментные регистры ds и es в начале выполнения программы?

6.На какие области памяти будут указывать регистры ds и es после выполнения команд программы mov ax,@data и mov ds,ax?

7.Что такое стек и какие команды используются при работе с ним?

8.Каким способом можно быстро настроить сегментный регистр es на область данных, если регистр ds уже на неё настроен?

9.Как осуществляется передача данных из одной области памяти в другую?

10.Нужно – ли при использовании ввода данных память с помощью командной строки организовывать буфер для ввода?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]