1. Изучить приведенный теоретический материал к лабораторной работе.
2. Используя прямую (первый вариант) и косвенную (второй вариант) адресацию, написать программы на ассемблере, выполняющие алгоритмы преобразований из п. 5 (по указанию преподавателя).
Примечания к кодированию программ:
- программа с использованием прямой адресации будет похожа на приведенную в предыдущей лабораторной работе программу, только непосредственные значения смещений в командах должны измениться в соответствии с заданным алгоритмом;
- для варианта косвенной адресации зашлите адреса начала массивов в базовый и индексный регистры, например командами:
MOV BX, OFFSET SOURCE и
MOV DI, OFFSET DEST,
И далее используйте регистры BX и DI для адресации элементов массивов.
3. Оттранслировать программу в объектный код.
4. Провести отладку программы и проверить получаемые результаты.
СОДЕРЖАНИЕ ОТЧЕТА.
Отчет должен включать:
§ титульный лист;
§ описание цели работы;
§ описание задания на лабораторную работу;
§ - словесные пояснения к алгоритму решения задачи и схему программы (обращаю Ваше внимание на то, что схема программы одна, а реализаций этой схемы должно быть две – с применением прямой и косвенной типов адресации);
§ листинги программ;
§ результаты выполнения программ;
§ выводы.
ВАРИАНТЫ ЗАДАНИЙ
1. Задать одномерный массив, состоящий из Х элементов (Х задается преподавателем из диапазона [7..10]). Заполнить массив константами. Переместить заданный массив в другую область памяти, поменяв местами элементы с четными и нечетными номерами (поставив каждый элемент с четным номером на место нечетного элемента и каждый элемент с нечетным номером – на место четного)
а) элементы массива – однобайтовые;
б) элементы массива – двухбайтовые;
2. Задать одномерный массив, состоящий из Х элементов (Х задается преподавателем из диапазона [7..10]). Заполнить массив константами. Переместить в другую область памяти элементы с нечетными номерами
а) элементы массива – однобайтовые;
б) элементы массива – двухбайтовые;
3. Задать одномерный массив, состоящий из Х элементов (Х задается преподавателем из диапазона [7..10]). Заполнить массив константами. Переместить в другую область памяти элементы с четными номерами
а) элементы массива – однобайтовые;
б) элементы массива – двухбайтовые;
4. Задать одномерный массив, состоящий из Х элементов (Х задается преподавателем из диапазона [7..10]). Заполнить массив константами. Создать новый одномерный массив, поместив в него на место элементов с четными номерами элементы заданного массива с нечетными номерами и обнулив элементы нового массива с нечетными номерами
а) элементы массива – однобайтовые;
б) элементы массива – двухбайтовые;
5. Задать одномерный массив, состоящий из Х элементов (Х задается преподавателем из диапазона [7..10]). Заполнить массив константами. Создать новый одномерный массив, поместив в него на место элементов с нечетными номерами элементы заданного массива с нечетными номерами и заполнив элементы нового массива с четными номерами максимальными значениями констант
а) элементы массива – однобайтовые;
б) элементы массива – двухбайтовые.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Каков синтаксис команд ассемблера?
2. Какие группы директив Вы знаете? Какие из директив обязательны в программе на ассемблере?
3. Что такое исполнительный адрес и как он используется при определении физического адреса операнда?
4. В чем заключается различие прямых и косвенных режимов адресации?
5. Как различить в командах ассемблера прямые и косвенные режимы адресации?
6. Какие режимы адресации Вы знаете?
СПИСОК ЛИТЕРАТУРЫ
1. Юров В. Assembler. – СПб.: Питер,2002 – 624 с.
2. Абель П. Язык ассемблера для IBM PC и программирования. М.: Высшая школа, 1992. – 447 с.
3. Бройдо В.Л. ПЭВМ: Архитектура и программирование на ассемблере. СПб.: СПб.ГИЭА, 1994. – 218 с.
4. Югов В.Ю., Хорошенко С. Assembler: учебный курс. СПб.: Питер, 1999. – 672 с.
5. Л. Скэнлон. Персональные ЭВМ IBM PC и XT. Программирование на языке Ассемблера: Пер. с англ. – 2-е изд., стереотип. – М.: Радио и связь. 1991. –336 с.
6. Бройдо В.Л. Вычислительные системы, сети и телекоммуникации. – СПб.: Питер, 2002. – 688 с.
Приложение 1
Программная модель микропроцессора Intel (Pentium III)
Регистры общего назначения
целочисленного устройства
|
|
|
|
|
|
ss:esp
|
ebx
31 16 15 0 Сегментные регистры
|
|
| |||
|
|
|
| |||
31 16 15 0 15 0
Регистры устройства с Регистры состояния
плавающей точкой (сопроцессора) и управления
|
|
|
|
.
. Системные регистры
.
|
79 0
Регистры ММХ-расширения
Целочисленные с плавающей точкой
| |||
| |||
63 0 127 0
Приложение 2
Система команд микропроцессора Intel 8086
Мнемокод | Действие |
AAA | Корректировка сложения для представления в кодах ASCII |
FFD | Корректировка деления для представления в кодах ASCII |
AAM | Корректировка умножения для представления в кодах ASCII |
AAS | Корректировка вычитания для представления в кодах ASCII |
ADC | Сложение с переносом |
ADD | Сложение |
AND | Логическое И |
CALL | Вызов процедуры |
CBW | Преобразование байта в слово |
CLC | Обнуление флага переноса |
CLI | Обнуление флага прерывания |
CMC | Обращение флага переноса |
CMP | Сравнение значений |
CMPS, CMPSB, CMPSB | Сравнение строк |
CWD | Преобразование слова в двойное слово |
DAA | Корректировка сложения для представления в десятичной форме |
DAS | Корректировка вычитания для представления в десятичной форме |
DEC | Уменьшение значения на 1 |
DIV | Деление |
ECS | Передача команды сопроцессору |
HLT | Останов |
IDIV | Деление целых чисел |
IMUL | Умножение целых чисел |
IN | Считывание значения из порта |
INC | Приращение значения на 1 |
INT | Прерывание |
INTO | Прерывание при переполнении |
Продолжение приложения 2
IRET | Возврат после прерывания |
JA, JNBE | Переход, если выше |
JAE, JNB | Переход, если выше или равно |
JNC | Переход, если нет переноса |
JB, JNAE | Переход, если ниже |
JC | Переход, если есть перенос |
JBE, JNA | Переход, если ниже или равно |
JCXZ | Переход, если содержимое регистра CX равно 0 |
JE, JZ | Переход, если равно |
JG, JNLE | Переход, если больше |
JGE, JNL | Переход, если больше или равно |
JL, JGNE | Переход, если меньше |
JLE, JNG | Переход, если меньше или равно |
JMP | Переход безусловный |
JNE, JNZ | Переход, если не равно |
JNO | Переход, если нет переполнения |
JNP, JPO | Переход, если нет четности |
JNS | Переход, если знаковый разряд = 0 |
JO | Переход, если переполнение |
JP, JPE | Переход, если есть четность |
JS | Переход, если знаковый разряд =1 |
LAHF | Загрузка регистра AH флагами |
LDS | Загрузка указателя с использованием регистра DS |
LEA | Загрузка исполнительного адреса |
LES | Загрузка указателя с использованием регистра ЕS |
LOCK | Замыкание шины |
LODS, LODSB, LODSW | Загрузка строки |
LOOP | Повторение цикла до конца счетчика |
LOOPE, LOOPZ | Повторение цикла, если равно |
LOOPNE, LOOPNZ | Повторение цикла, если не равно |
MOV | Пересылка значения |
MOVS, MOVSB, MOVSW | Пересылка строки |
Окончание приложения 2
MUL | Умножение |
NEG | Обращение знака |
NOP | Нет операции |
NOT | Обращение битов |
OR | Логическое ИЛИ |
OUT | Вывод значения в порт |
POP | Извлечение значения из стека |
POPF | Извлечение флагов из стека |
PUSH | Помещение значения в стек |
PUSHF | Помещение флагов в стек |
RCL | Сдвиг влево циклически с флагом переноса |
RCR | Сдвиг вправо циклически с флагом переноса |
REP, REPE, REPZ | Повторение, пока равно |
REPNE, REPNZ | Повторение, пока не равно |
RET | Возврат в вызывающий модуль (процедуру) |
ROL | Сдвиг влево циклически |
ROR | Сдвиг вправо циклически |
SAHF | Загрузить флаги из регистра AH |
SAL, SHL | Сдвиг влево арифметически |
SAR | Сдвиг вправо арифметически |
SBB | Вычитание с заемом |
SCAS, SCASB, SCASW | Сканирование строки |
SHR | Сдвиг вправо логически |
STC | Установка флага переноса |
STD | Установка флага направления |
STI | Установка флага прерывания |
STOS, STOSB, STOSW | Сохранение строки |
SUB | Вычитание |
TEST | Проверка |
WAIT | Ожидание |
XCHG | Обмен значений |
XLAT | Выбор значения из таблицы |
XOR | Логическое исключающее ИЛИ |