- •Лабораторная работа № 1
- •Основные понятия Архитектура эвм и ее структурная схема
- •Центральный процессор
- •Оперативная память
- •Представление данных
- •Содержание работы
- •Лабораторная работа № 2
- •Основные понятия
- •Запуск отладчика
- •Команды программы debug
- •Команда ассемблирования (перевод мнемокода ассемблера в машинный код)
- •Команда дизассемблирования (перевод машинного кода в мнемокод ассемблера)
- •Команда ввода данных в память
- •Команда вывода содержимого участка памяти на экран
- •Команда просмотра и изменения содержимого регистров
- •Мнемонические обозначения состояний флагов
- •Команда пошагового выполнения программы
- •Команда задания имени файла программы
- •Команда загрузки файла в память
- •Команда записи области памяти в файл
- •Команда выхода из отладчика
- •Содержание работы
- •Варианты заданий
- •Основные понятия Теоретические основы адресации памяти в реальном режиме
- •00000H [физический адрес] ffffFh.
- •Режимы адресации
- •Непосредственная адресация
- •Прямая адресация
- •Косвенная адресация
- •Адресация по базе
- •Индексная адресация
- •Базово-индексная адресация
- •Форматы команд
- •Содержание работы
- •Задачи к выполнению лабораторной работы
- •Варианты заданий
- •Арифметические команды
- •Основные понятия
- •Мнемоника арифметических команд
- •Задачи к выполнению лабораторной работы
- •Команды поразрядной обработки данных
- •Основные понятия
- •Мнемоника команд поразрядной обработки данных
- •Задачи к выполнению лабораторной работы
- •Варианты заданий
- •Команды передачи управления
- •Основные понятия
- •Мнемоника команд передачи управления
- •Команды управления циклами (loop, loope, loopz, loopne, loopnz) имеют следующие форматы в мнемонике ассемблера:
- •Задачи к выполнению лабораторной работы
- •Варианты заданий
- •Команды обработки строк
- •Основные понятия
- •Мнемоника команд обработки строк
- •Задачи к выполнению лабораторной работы
- •Варианты заданий
- •Описание команд программы debug
- •Библиографический список
Команды управления циклами (loop, loope, loopz, loopne, loopnz) имеют следующие форматы в мнемонике ассемблера:
LOOP disp,
LOOPE disp,
LOOPZ disp,
LOOPNE disp,
LOOPNZ disp,
где disp – адресное выражение типа метки с атрибутом NEAR, значение которого лежит в интервале от –128 до 127 от адреса следующей за циклом команды.
Все эти команды декрементируют значение регистра CX. Если после этого значение CX не равно нулю, то LOOP передает управление по адресу своего операнда. Эквивалентные друг другу команды LOOPE и LOOPZ передают управление по адресу своего операнда, если CX не равно нулю и значение флага ZF равно 1. Эквивалентные друг другу команды LOOPNE и LOOPNZ передают управление по адресу своего операнда, если CX не равно нулю и ZF = 0. Эти действия позволяют легко реализовать цикл с заданным количеством повторений, которое задается в CX.
Команды управления циклами имеют следующий формат машинных кодов:
LOOP: |
11100010 |
disp |
LOOPE/LOOPZ: |
11100001 |
disp |
LOOPNE/LOOPNZ: |
11100000 |
disp |
Примеры использования команд управления циклами:
; Пример 1: вычисление суммы элементов массива из 10 байт |
||
|
XOR AX,AX |
; обнуление суммы |
|
XOR SI,SI |
; обнуление индекса |
|
MOV CX,0Ah |
; загрузка количества элементов |
NEXT: |
|
; начало цикла |
|
ADD AL, [SI + 20] |
; сложение очередного элемента с ; общей суммой |
|
ADC AH,0 |
; учет возможного переноса |
|
INC SI |
; увеличение индекса |
|
LOOP NEXT |
; возврат в цикл, ; если массив не исчерпан |
; Пример 2: поиск первого ненулевого элемента в массиве из 10 байт |
||
|
MOV SI, -1 |
; установить значение индекса |
|
MOV CX, 0Ah |
; установить количество элементов |
NEXT: |
|
; начало цикла |
|
INC SI |
; увеличить индекс |
|
CMP [SI + 20], 0 |
; сравнить текущий элемент с нулем |
|
LOOPE NEXT |
; возврат в цикл, ; если элемент не найден и массив еще ; не исчерпан |
|
JNE YES |
; если элемент найден, то переход ; к метке YES |
|
... |
; действия, если элемент не найден |
|
... |
; массив содержит только нули |
|
JMP short END |
; переход к метке END |
YES: |
... |
; действия, если элемент найден |
|
... |
; SI указывает на ненулевой элемент |
END: |
... |
; завершающие действия |
; Пример 3: поиск заданного значения в массиве из 10 байт |
||
|
MOV AL, 5Dh |
; загрузить искомое значение |
|
MOV SI, -1 |
; установить значение индекса |
|
MOV CX, 0Ah |
; установить количество элементов |
NEXT: |
|
; начало цикла |
|
INC SI |
; увеличить индекс |
|
CMP [SI + 20], AL |
; сравнить текущий элемент ; с искомым значением |
|
LOOPNE NEXT |
; возврат в цикл, ; если элемент не найден ; и массив еще не исчерпан |
|
JCXZ NO |
; если элемент не найден, то переход ; к метке NO |
|
... |
; действия, если элемент найден. |
|
... |
; SI указывает на этот элемент |
NO: |
JMP short END |
; переход к метке END |
|
... |
; действия, если элемент не найден |
END: |
... |
; завершающие действия |
СОДЕРЖАНИЕ РАБОТЫ
1. Ознакомиться с теоретическим материалом.
2. С помощью программы debug исследовать выполнение всех арифметических команд с любым возможным типом их операндов.
3. В соответствии со своим вариантом решить поставленные задачи и с помощью DEBUG установить правильность их решения.