ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
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 | Логическое исключающее ИЛИ |