MOV BP, GAMMA      ;Слово, память-регистр



Министерство образования Республики Беларусь

Учреждение образования «Витебский государственный политехнический колледж»

 

УТВЕРЖДАЮ

Зам. директора по учебной работе

____________ З.В. Блажевич

« ___ » ____________ 20__ г.

 

 

МИКРОПРОЦЕССОРНАЯ ТЕХНИКА

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

 

Система команд CPU i8086. Команды сравнения кодов.

Команды пересылки. Влияние на флаги.

 

по специальности 2-40 01 01

«Программное обеспечение информационных технологий»

 

 

Витебск

2009

 

 

Разработана Иваненко Е.С., преподавателем спецдисциплин.

 

 

Рассмотрено и одобрено на заседании цикловой комиссии информатики и программирования.

 

Протокол № __ от « __ » _____________ 20 __ г.

 

Председатель ЦК ___________ А.С. Шандриков

 

 

Лабораторная работа № 6.

Тема: «Система команд CPU Intel 8086. Команды сравнения кодов. Команды пересылки. Влияние на флаги»

 

Цель работы:

- Приобрести практические навыки по применению арифметических команд;

- Закрепить навыки по отладке программ с помощью отладчика AFD на языке Ассемблера.

Оборудование:

Методические рекомендации по выполнению работ, ПК, программа-отладчик AFD.

 

Сведения из теории.

Команды сравнения.

CMP операнд1, операнд2 – команда предназначена для сравнения между собой двух переменных. Значение результат нигде не сохраняется, изменяются только флаги.

Команды передачи данных.

Как любой современный процессор, МП К1810 имеет обширный набор команд, предназначенных для пересылок данных между регистрами, а также между регистрами и памятью. Команды передачи данных удобно разделить на четыре группы:

- общие команды передачи данных;

- команды передачи данных с привлечением стека (стековые команды);

- команды ввода-вывода;

- команды передачи цепочек байтов и слов.

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

 

Общие команды передачи данных. Данная подгруппа включает в себя команды, осуществляющие передачи регистр-регистр, регистр-память и память-регистр. К этой группе относятся следующие команды:

MOV <приемник>,<источник>

xchg <операнд1>,<операнд2>

Наиболее мощной и основной среди них является команда MOV (передать, переслать). Она реализует самые разнообразные варианты пересылки.

Отметим особенности применения этой команды:

- командой mov нельзя осуществить пересылку из одной области памяти в другую. Если такая необходимость возникает, то нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения.

- нельзя загрузить в сегментный регистр значение непосредственно из памяти. Поэтому для выполнения такой загрузки нужно использовать промежуточный объект. Это может быть регистр общего назначения или стек;

- нельзя переслать содержимое одного сегментного регистра в другой сегментный регистр.;

- нельзя использовать сегментный регистр cs в качестве операнда назначения. Дело в том, что в архитектуре микропроцессора пара cs:ip всегда содержит адрес команды, которая должна выполняться следующей. Изменение командой mov содержимого регистра cs фактически означало бы операцию перехода, а не пересылки, что недопустимо.

Для двунаправленной пересылки данных применяют команду xchg. Для этой операции можно, конечно, применить последовательность из нескольких команд mov, но из-за того, что операция обмена используется довольно часто, разработчики системы команд микропроцессора посчитали нужным ввести отдельную команду обмена xchg. Естественно, что операнды должны иметь один тип. Не допускается (как и для всех команд ассемблера) обменивать между собой содержимое двух ячеек памяти.

 

Команды работы с адресами и указателями памяти.

При написании программ на Ассемблере производится интенсивная работа с адресами операндов, находящимися в памяти. Для поддержки такого рода операций есть специальная группа команд, в которую входят следующие команды:

lea <регистр>, <источник>— загрузка эффективного адреса;

lds <регистр>, <источник>— загрузка указателя в регистр сегмента данных ds;

les <регистр>, <источник>— загрузка указателя в регистр дополнительного сегмента данных es;

lgs <регистр>, <источник>— загрузка указателя в регистр дополнительного сегмента данных gs;

lfs <регистр>, <источник>— загрузка указателя в регистр дополнительного сегмента данных fs;

lss <регистр>, <источник>— загрузка указателя в регистр сегмента стека ss.

Команда lea похожа на команду mov тем, что она также производит пересылку. Однако, обратите внимание, команда lea производит пересылку не данных, а эффективного адреса данных (то есть смещения данных относительно начала сегмента данных) в <регистр>.

Часто для выполнения некоторых действий в программе недостаточно знать значение одного лишь эффективного адреса данных, а необходимо иметь полный указатель на данные. Полный указатель на данные состоит из сегментной составляющей и смещения.

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

Но не все так просто с операндом <источник>. На самом деле, в команде в качестве <источник> нельзя указывать непосредственно имя операнда в памяти, на который хотели бы получить указатель.

Предварительно необходимо получить само значение полного указателя в некоторой области памяти и указать в команде получения полного адреса имя этой области. Для выполнения этого действия необходимо вспомнить директивы резервирования и инициализации памяти.

При применении этих директив возможен частный случай, когда в поле операндов указывается имя другой директивы определения данных (фактически, имя переменной). В этом случае в памяти формируется адрес этой переменной. Какой адрес будет сформирован (эффективный или полный), зависит от применяемой директивы. Если это dw, то в памяти формируется только 16-битное значение эффективного адреса, если же dd — в память записывается полный адрес. Размещение этого адреса в памяти следующее: в младшем слове находится смещение, в старшем — 16-битная сегментная составляющая адреса.

 

Команды преобразования данных.

К этой группе можно отнести множество команд микропроцессора, но большинство из них имеют те или иные особенности, которые требуют отнести их к другим функциональным группам. Поэтому из всей совокупности команд микропроцессора непосредственно к командам преобразования данных можно отнести только одну команду:

xlat [<адрес_таблицы_перекодировки>]

Действие этой команды заключается в том, что она замещает значение в регистре al другим байтом из таблицы в памяти, расположенной по адресу, указанному операндом <адрес_таблицы_перекодировки>. Слово “таблица” весьма условно — по сути это просто строка байт. Адрес байта в строке, которым будет производиться замещение содержимого регистра al, определяется суммой (bx) + (al), то есть содержимое al выполняет роль индекса в байтовом массиве.

При работе с командой xlat обратите внимание на следующий тонкий момент. Несмотря на то, что в команде указывается адрес строки байт, из которой должно быть извлечено новое значение, этот адрес должен быть предварительно загружен (например, с помощью команды lea) в регистр bx. Таким образом, операнд <адрес_таблицы_перекодировки> на самом деле не нужен. Что касается строки байт (таблицы перекодировки), то она представляет собой область памяти размером от 1 до 255 байт (диапазон числа без знака в 8-битном регистре).

 

Загрузка регистра флагов eFlags/Flags из/в регистр AH.

sahf – запись содержимого регистра ah в младший байт регистра eflags/flags, в котором содержатся пять флагов cf, pf, af, zf и sf.

Алгоритм работы: команда загружает младший байт регистра eflags/flags содержимым регистра ah. В битах 7, 6, 4, 2 и 0 регистра ah должны, соответственно, содержаться новые значения флагов sf, zf, af, pf и cf. Применение: эта команда используется совместно с командой lahf. Из-за того, что регистр флагов непосредственно недоступен, сочетание этих команд можно применять для анализа — и, возможно, изменения — состояния некоторых флагов в регистре eflags/flags. Содержимое старшей части регистра флагов не изменяется.

 lahf – извлечение содержимого младшего байта регистра eflags/flags, в котором содержатся пять флагов: cf, pf, af, zf и sf.

Алгоритм работы: команда загружает регистр ah содержимым младшего байта регистра eflags/flags. Применение: из-за того, что регистр флагов непосредственно недоступен, команду lahf можно применять для анализа и последующего изменения командой sahf состояния некоторых флагов регистра eflags/flags.

 

Команды ввода-вывода.

in <аккумулятор>, <номер_порта> — ввод в <аккумулятор> из порта с номером <номер_порта>;

out <номер_порта>, <аккумулятор> — вывод содержимого <аккумулятор> в порт с номером <номер_порта>.

 

 

Методика выполнения работы.

1. Вызвать программу-отладчик AFD.

2. На запрос “Press any key to continue” нажать любую клавишу.

 

 

«Изучение формирования адресов с помощью отладчика AFD»

Система команд

Систему или набор (и даже репертуар команд МП К1810 образуют 113 базовых команд, многие из которых допускают использование разнообразных режимов адресации. В изучении системы команд МП помогает группирование команд по функциональному назначению. Кроме того, значительную помощь читателю окажут и подробные примеры выполнения команд.

Команды передачи данных

Как любой современный процессор, МП К1810 имеет обширный набор команд, предназначенных для пересылок данных между регистрами, а также между регистрами и памятью. Команды передачи данных удобно разделить на четыре группы:

общие команды передачи данных;

команды передачи данных с привлечением стека (стековые команды);

команды ввода-вывода;

команды передачи цепочек байтов и слов.

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

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

Общие команды передачи данных. Данная подгруппа включает в себя команды, осуществляющие передачи регистр-регистр, регистр-память и память-регистр. Наиболее мощной среди них является команда MOV (передать, переслать).

Команда MOV. Эта команда имеет следующее представление: MOV dst , src       dst :=( src )

И осуществляет передачу содержимого источника src в получатель dst. Команда MOV имеет несколько форматов, показанных на рис. 1.1.

Самой гибкой и универсальной является команда MOV mem / reg 1, mem / reg 2. Она содержит постбайт режима адресации, с помощь, которого можно задавать любой допустимый режим адресации. Наличие бита w показывает возможность передачи байт и слов, а бит d определяет направление передачи. Таким образом, с помощью одной этой команды осуществляются передачи регистр-регистр/память и память-регистр, при чем регистром может быть любой общий регистр. Длина команды составляет 2, 3 или 4 байта, а время выполнения равно двум тактам в формате регистр-регистр, (8+EA) тактам в формате память-регистр и (9+ЕА) тактам синхронизации в формате регистр-память.

Пример 1.

 (SI)=3456               MOV CX,[SI]                              (CX)=3AAD

(DS)=ABCD

([AF126])=3AAD

Пример 2.

(BX)=789A             MOV DL,BX                   (DI)=789A

 

Команда MOV mem / reg 1, mem / reg 2 выполняет функцию команды MOV r1, r2 микропроцессора К580, но является более универсальной.

Примеры записи команды на языке ассемблера приведены ниже.

         MOV DX,CX                 ;Слово, регистр-регистр

MOV BP, GAMMA      ;Слово, память-регистр


Дата добавления: 2022-12-03; просмотров: 22; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!