- •Исследование процессов ввода/вывода информации и системы команд микропроцессоров семесйства 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. Библиографический список
2.4. Команды передачи данных.
Во всех компьютерах необходимы команды, предназначенные просто для пересылок данных, адресов и непосредственных операндов в регистры или ячейки памяти. В микропроцессоре ВМ86 имеется 4 базовые команды передачи данных. MOV, LEA, LDS, и LTS. В данной работе подробно рассмотрим команду MOV. Остальные команды и их использование при разработке программ будем рассматривать по мере их использования.
Команда mov предназначена для пересылок байта или слова внутри ЦП или между ЦП и памятью. Ее формат может занимать от двух до шести байт в зависимости от способа адресации. Мнемоника и формат этой команды на ассемблере имеет вид:
MOV dst,src здесь dst операнд-получатель, src операнд-источник.
В зависимости от режима адресации эта команда может передавать информацию:
из регистра в регистр:
непосредственный операнд в регистр;
непосредственный операнд в ячейку памяти;
из ячейки памяти в регистр;
из регистра в ячейку памяти:
из регистра (ячейки памяти) в сегментный регистр (кроме регистра cs);
из сегментного регистра в регистр или ячейку памяти.
При выполнении команд передачи данных не изменяется ни один из флажков (кроме специальных команд пересылки). Существует ряд особенностей использования команды MOV. Во-первых, нельзя одной командой передать содержимое одной ячейки памяти в другую. Во-вторых, невозможно за одну операцию загрузить непосредственный операнд в сегментный регистр. В-третьих, нельзя непосредственно пересылать содержимое одного сегментного регистра в другой. Подобные ситуации разрешаются с использованием других регистров микропроцессора. Например:
Mov ax,segment
MOV DS,AX
МOV AX,DS
MOV ES,AX
или
PUSH DS
POP ES
Рассмотрим еще несколько примеров команды MOV:
1) MOV DS,AX; переслать (АХ) в DS
2) MOV AL,’E’; переслать в AL ASCII код буквы Е
3) Mov [bx],dx переслать (dx) в ячейку адресованную (вх)
Здесь ЕА прибавляется к (DS)×16.
4) MOV AX,Y[BP][SI]; переслать в АХ содержимое ячейки памяти, определенной суммой (ВР), (SI) и смещения Y
Здесь ЕА прибавляется к (SS)×16.
Отметим, что при использовании регистра ВР в качестве базового, эффективный адрес ЕА всегда складывается с содержимым сегментного регистра SS, умноженного на 16.
Приведем варианты фрагментов программы, которые помещают в регистр AL, используя различные способы адресации, ASCII код буквы I из символьной цепочки "ABCDEFGHIJKLM". Цепочка предварительно вводится в оперативную память командой ассемблера DB, которая помечается меткой CharStarmg. Отметим, что каждый символ занимает в памяти один байт. Символ I смещен относительно А на 8 байт. На рис.5 приведено расположение цепочки в памяти.
Рис.5. Расположение цепочки "ABCDEFGHIJKLM" в памяти
.DATA - определение сегмента данных
MAIN DB 'MAIN'
CharStrmg DB ’ABCDEFGHIJ’
.CODE - определение сегмента кода.
MOV AX,@DATA; в регистр АХ загружается сегментный адрес сегмента данных; MOV DS,AX; в регистр DS перемещается содержимое регистра АХ.
MOV SI,OFFSET CharString + 8; в регистр SI загружается смещение строки CharString относительно начала сегмента данных на 8 байт (непосредственная адресация)
MOV AL,[SI]; в регистр АХ помещается значение символа I из строки символов (регистровая относительная адресация)
MOV ВХ,8
MOV AL,[CharString + ВХ]
MOV BX,OFFSET CharString
MOV AL,[BX + 8]
MOV SI,6
MOV AL,[CharString + SI + 2]
MOV BX.OFFSET CharString
MOV DI,8
MOV AL,[BX + DI]
MOV SI,OFFSET CharString
MOV BX,8
MOV AL,[SI + BX]
MOV BX,OFFSET CharString
MOV SI,7
MOV AL,[BX + SI + 1]
В приведенном примере команда OFFSET загружает начальный адрес цепочки ABCDEFGHIJ относительно начала сегмента данных. Знак @ загружает адрес начала сегмента, имя которого стоит за этим знаком. В нашем примере сегмента данных DATA.
Если возникает необходимость сменить сегмент данных, то это можно сделать, например следующим образом: