|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Лабораторная работа № 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.Нужно – ли при использовании ввода данных память с помощью командной строки организовывать буфер для ввода?
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |