- •Исследование процессов ввода/вывода информации и системы команд микропроцессоров семесйства intel 80×i86
- •Введение
- •1.Цель работ
- •2.1. Архитектура микропроцессора Intel 8086.
- •2.2. Адресация памяти и данных.
- •2.3. Синтаксис операндов языка assembler
- •2.4. Команды передачи данных.
- •Mov ax,segment
- •3) Mov [bx],dx переслать (dx) в ячейку адресованную (вх)
- •Mov al,es:[si]; ds заменен на es
- •Команды lea, lds, les.
- •Lea reg, memr
- •Команда xchg
- •Стековые команды push и рор
- •2.5 Префикс программного сегмента (psp)
- •2.6 Арифметические команды
- •Команды сложения и вычитания
- •0015 65А0
- •0037 1D3e
- •0004 В837
- •0001 F0f8
- •Команды расширения знака.
- •Команды inc, dec, neg, cmp.
- •Команды двоичного умножения и деления.
- •Дополнительные сведения.
- •2.7 Основные правила при разработке программ на языке assembler.
- •Int 21h
- •Int 21h
- •Int 21h
- •Int 21h
- •Int 21h
- •Int 21h
- •Int 21h
- •3. Лабораторные работы
- •Контрольные вопросы
- •Лабораторная работа № 2
- •Контрольные вопросы
- •Лабораторная работа № 3
- •Дополнительная информация для составления программы по данному заданию.
- •Лабораторная работа № 4
- •Контрольные вопросы
- •Лабораторная работа № 5
- •Контрольные вопросы
- •Лабораторная работа № 6
- •Контрольные вопросы
- •Лабораторная работа № 7
- •Рекомендации по выполнению лабораторной работы.
- •4.1. Тексты подпрограмм вывода на экран.
- •Int 21h
- •Int 21h
- •Контрольные вопросы
- •Лабораторная работа № 8
- •Контрольные вопросы
- •Лабораторная работа № 9
- •Контрольные вопросы
- •Лабораторная работа № 10
- •Контрольные вопросы
- •Контрольные вопросы
- •Лабораторная работа № 14
- •Контрольные вопросы
- •6. Требования к отчетам
- •7. Библиографический список
Контрольные вопросы
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.Нужно – ли при использовании ввода данных память с помощью командной строки организовывать буфер для ввода?