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

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)

Регистры общего назначения

целочисленного устройства

Адресное пространство памяти   стек
порядок выполнения работы - student2.ru
AX
порядок выполнения работы - student2.ru порядок выполнения работы - student2.ru

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

AH AL
eax

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

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

DH DL
edx

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

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

CX

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

CH CL
ecx

порядок выполнения работы - student2.ru порядок выполнения работы - student2.ru ss:esp

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

BX
0

ebx

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

31 16 15 0 Сегментные регистры

 
 
CS

DS
Индексные регистры

       
  порядок выполнения работы - student2.ru
   
ES
 

SS
порядок выполнения работы - student2.ru
SI

DI

       
    порядок выполнения работы - student2.ru
 
SP
 

31 16 15 0 15 0

Регистры устройства с Регистры состояния

плавающей точкой (сопроцессора) и управления

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

FL
ST(0)
eflags

ST(1)
31 16 15 0

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

IP
eip

.

. Системные регистры

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

 
 
ST(7)

79 0

Регистры ММХ-расширения

Целочисленные с плавающей точкой

       
   
XMMi
 
MMXi
 

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 Логическое исключающее ИЛИ

Наши рекомендации