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




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

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

 

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

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

 

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

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

 

 

Витебск

 

 

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

 

 

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

 

Протокол № __ от «__ » _____________ 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. Естественно, что операнды должны иметь один тип. Не допускается (как и для всех команд ассемблера) обменивать между собой содержимое двух ячеек памяти.

 

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

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

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

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

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

 

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

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

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

3. Изучить выполнение команды MOV dst, src с косвенной адресацией, имеющей форматы MOV mem/reg1, MOV mem/reg2; MOV mem/reg, data:

MOV AX, [DI]

MOV [SI], BL

INT3

Перейти в поле 2, нажав клавишу F7. Ввести команды D 100, A и выше указанную программу. Выйти из режима ассемблирования, нажав одновременно две клавиши ctrl+enter. В соответствующих регистрах и ячейках памяти записать указанные числа. Выполнить программу в пошаговом режиме, многократно нажимая клавишу F2. Результаты занести в таблицу 1.

 

Таблица 1.

Регистр, ячейка памяти До выполнения команды После выполнения команды Комментарии
АХ      
DI      
  4F03    
CL      
SI      
[20] 3F    

 

4. Изучить выполнение команды MOV dst, src с базовой адресацией, имеющей форматы MOV mem/reg1, mem/reg2; MOV mem/reg, data:

MOV AX, [BP+10]

MOV [BX], DL

INT3

Перейти в поле 2, нажав клавишу F7. Ввести команды D 100, A и выше указанную программу. Выйти из режима ассемблирования, нажав одновременно две клавиши ctrl+enter. В соответствующих регистрах и ячейках памяти записать указанные числа. Выполнить программу в пошаговом режиме, многократно нажимая клавишу F2. Результаты занести в таблицу 2.

 

Таблица 2.

Регистр, ячейка памяти До выполнения команды После выполнения команды Комментарии
АХ      
BP      
[20][21] 12FA    
DL      
BX      
[30]      
[10][11] 67FD    

 

5. Изучить выполнение команды MOV dst, src с индексной адресацией, имеющей форматы MOV mem/reg1, mem/reg2; MOV mem/reg, data:

MOV [SI+5], AX

MOV DX, [DI+10]

MOV [SI], 34

INT3

Перейти в поле 2, нажав клавишу F7. Ввести команды D 100, A и выше указанную программу. Выйти из режима ассемблирования, нажав одновременно две клавиши ctrl+enter. В соответствующих регистрах и ячейках памяти записать указанные числа. Выполнить программу в пошаговом режиме, многократно нажимая клавишу F2. Результаты занести в таблицу 3.

 

Таблица 3.

Регистр, ячейка памяти До выполнения команды После выполнения команды Комментарии
АХ 12FE    
SI      
[15][16]      
DX AF45    
DI      
[40][41] DA34    
[10][11] 67FD    

 

6. Изучить выполнение команды MOV dst, src с базовой индексной адресацией, имеющей форматы MOV mem/reg1, mem/reg2; MOV mem/reg, data:

MOV AX, [BP+SI]

MOV [BX+DI], CX

MOV [BX+SI+4], 34

INT3

Перейти в поле 2, нажав клавишу F7. Ввести команды D 100, A и выше указанную программу. Выйти из режима ассемблирования, нажав одновременно две клавиши ctrl+enter. В соответствующих регистрах и ячейках памяти записать указанные числа. Выполнить программу в пошаговом режиме, многократно нажимая клавишу F2. Результаты занести в таблицу 4.

 

Таблица 4.

Регистр, ячейка памяти До выполнения команды После выполнения команды Комментарии
АХ      
SI      
BP      
[30][31]      
BX      
DI      
[35][36] 34EF    
CX 53FB    
[19] 7F    

 

Содержание отчета:

1. Название и цель работы.

2. Заполненные таблицы 1-4.

3. Фрагмент программы домашнего задания с результатами.

4. Вывод о проделанной работе.

 

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

1. Назначение команды MOV.

2. Назначение команды XLAT, LEA.

3. Назначение команды XCHG.

4. Назначение команд SAHF, LAHF.

5. Чем отличаются команды ADD и ADC?

6. Где находится второй множитель в командах умножения?

7. В каких регистрах находится результат после умножения?

8. В каких регистрах находится результат после деления?

 

Литература

1. Майко Г.В. «Ассемблер для IBM PC»: - М.: «Бизнес-Информ», «Сирин», 1999г. – 212с.

2. Юров В., Хорошенко С. «Аssembler»: учебный курс – СПб: Питер Ком, 1999г. – 672 с.

 

Домашнее задание

Составить фрагмент программы в соответствии с вариантом домашнего задания.

Варианты домашнего задания

Вариант Задача
  - по адресу DS:0015, 0010 записать число 02; - в регистр BX записать число 2А; - сложить эти числа; - результат разделить на 20 и записать в ячейку памяти со смещением [0015].
  - в регистр BX записать число 00А2; - увеличить его на 10; - по адресу со смещением DS:0015 записать число 82; - из содержимого ВХ вычесть число записанное [0015]; - результат получить в регистре DX.
  - по относительному адресу [0100] записать число 2А; - по относительному адресу [0105] записать число 08; - разделить содержимое [0100] на значение числа по адресу [0105]; - результат записать по адресам [0106 - 0107].
  - в ячейку памяти со смещением [0020] записать число 2А; - в регистр DX записать число 43; - сложить между собой эти числа; - умножить его на 5; - увеличить на 1; - результат записать в регистр СХ.
  - в регистр DX записать число 1А58; - получить дополнительный код этого числа; - уменьшить полученное число на 1; - умножить на 3; - результат записать в ячейку памяти со смещением [0100].
  - в регистр С1 записать число 1А; - в регистр Dl записать 09; - из числа, записанного в регистре С1, вычесть число, записанное в регистре Dl; - полученное значение умножить на 3; - увеличить результат на 1; - результат записать в ячейку со смещением [0030].
  - в ячейку памяти со смещением [0010] записать число 09; - в регистр Bl записать число 2А; - сложить содержимое ячейки памяти и регистра Bl; - результат разделить на 03; - увеличить на 1 и записать в ячейку памяти со смещением [0020].
  - в ячейку со смещением [0030] записать число 1А3; - в регистр BX записать число А1F2; - записать последовательно в стек (BX) и [0030]; - и в процессе чтения из стека обменять содержимое регистра и ячейки памяти.
  - в ячейки памяти со смещением [0200] и [0202] записать числа А2 и 3F; - вычесть ([0200]) - ([0202]); - результат разделить на 3А; - результат увеличить на 1 и записать в ячейку со смещением [0200];
  - в регистр ВХ записать число А219; - в ячейку памяти со смещением [0010] число 23; - из регистра ВХ вычесть число в [0010]; - умножить на 5; - уменьшить на 1; - результат записать в СХ
  - в регистр АХ записать число В90С; - в регистр ВХ – 340А; - сложить этих два числа; - результат уменьшить на 1; - умножить на 3F; - результат записать в ячейку памяти со смещением [0010].
  - в ячейку со смещением [0010] записать число 43; - в регистр Вl записать число 54; - сложить между собой эти числа; - результат умножить на 5; - результат записать в ячейку памяти [0020]
  - в регистр Сl записать число 09; - в регистр Dl записать число 23; - умножить между собой эти два числа; - результат сложить с числом 2А; - результат записать в ячейку памяти со смещением [0010].
  - в ячейку памяти со смещением [0010] записать число 54; - в регистр Dl записать число 06; - сложить между собой эти два числа; - результат умножить на 3; - результат записать в ячейку памяти [0010]
  - в регистр АХ записать число 12; - в регистр СХ записать число А9; - вычесть из числа, записанного в регистре СХ число, записанное в регистре АХ; - результат умножить на 4;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-12-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: