- •Лабораторная работа № 1
- •Основные понятия Архитектура эвм и ее структурная схема
- •Центральный процессор
- •Оперативная память
- •Представление данных
- •Содержание работы
- •Лабораторная работа № 2
- •Основные понятия
- •Запуск отладчика
- •Команды программы debug
- •Команда ассемблирования (перевод мнемокода ассемблера в машинный код)
- •Команда дизассемблирования (перевод машинного кода в мнемокод ассемблера)
- •Команда ввода данных в память
- •Команда вывода содержимого участка памяти на экран
- •Команда просмотра и изменения содержимого регистров
- •Мнемонические обозначения состояний флагов
- •Команда пошагового выполнения программы
- •Команда задания имени файла программы
- •Команда загрузки файла в память
- •Команда записи области памяти в файл
- •Команда выхода из отладчика
- •Содержание работы
- •Варианты заданий
- •Основные понятия Теоретические основы адресации памяти в реальном режиме
- •00000H [физический адрес] ffffFh.
- •Режимы адресации
- •Непосредственная адресация
- •Прямая адресация
- •Косвенная адресация
- •Адресация по базе
- •Индексная адресация
- •Базово-индексная адресация
- •Форматы команд
- •Содержание работы
- •Задачи к выполнению лабораторной работы
- •Варианты заданий
- •Арифметические команды
- •Основные понятия
- •Мнемоника арифметических команд
- •Задачи к выполнению лабораторной работы
- •Команды поразрядной обработки данных
- •Основные понятия
- •Мнемоника команд поразрядной обработки данных
- •Задачи к выполнению лабораторной работы
- •Варианты заданий
- •Команды передачи управления
- •Основные понятия
- •Мнемоника команд передачи управления
- •Команды управления циклами (loop, loope, loopz, loopne, loopnz) имеют следующие форматы в мнемонике ассемблера:
- •Задачи к выполнению лабораторной работы
- •Варианты заданий
- •Команды обработки строк
- •Основные понятия
- •Мнемоника команд обработки строк
- •Задачи к выполнению лабораторной работы
- •Варианты заданий
- •Описание команд программы debug
- •Библиографический список
Задачи к выполнению лабораторной работы
Вычислить значение функции
Вычислить значение функции
Вычислить значение функции
Увеличить содержимое CX на 1, если значение AX равно 0. Увеличить содержимое CX на 10, если значение AX равно 1.В противном случае увеличить содержимое CX на 100.
Вычислить значение функции
Найти сумму максимальных элементов каждой строки матрицы.
Найти произведение минимальных элементов каждого столбца матрицы.
Найти сумму элементов квадратной матрицы, находящихся над ее главной диагональю.
Найти произведение элементов квадратной матрицы, находящихся под ее главной диагональю.
Сложить номер строки, содержащей минимальный элемент матрицы, с номером столбца, содержащим ее максимальный элемент.
Варианты заданий
Номер варианта |
Номер задачи |
Номер варианта |
Номер задачи |
1 |
1, 6 |
14 |
3, 9 |
2 |
1, 7 |
15 |
3, 10 |
3 |
1, 8 |
16 |
4, 6 |
4 |
1, 9 |
17 |
4, 7 |
5 |
1, 10 |
18 |
4, 8 |
6 |
2, 6 |
19 |
4, 9 |
7 |
2, 7 |
20 |
4, 10 |
8 |
2, 8 |
21 |
5, 6 |
9 |
2, 9 |
22 |
5, 7 |
10 |
2, 10 |
23 |
5, 8 |
11 |
3, 6 |
24 |
5, 9 |
12 |
3, 7 |
25 |
5, 10 |
13 |
3, 8 |
|
|
Лабораторная работа № 8
Команды обработки строк
Цель работы: изучить специальные цепочечные команды, используемые для обработки строк данных, и особенности их применения.
Основные понятия
Часто возникает необходимость пересылать или сравнивать поля данных, длина которых превышает слово. Например, необходимо сравнить описания или имена для того, чтобы отсортировать их в восходящей последовательности. Элементы такого формата известны как строковые данные и могут являться как символьными, так и числовыми.
Процессор поддерживает ряд команд, ориентированных на обработку строковых данных. В табл. 8.1 приведена мнемоника этих команд и описание выполняемых ими действий.
Таблица 8.1
Мнемоника команд обработки строк
Обозначение |
Выполняемая функция |
MOVSB/MOVSW |
Пересылка строк |
LODSB/LODSW |
Загрузка из строки |
STOSB/STOSW |
Запись в строку |
CMPSB/CMPSW |
Сравнение строк |
SCASB/SCASW |
Сканирование строки |
REP/REPE/REPZ/REPNE/REPNZ |
Префиксы повторения |
CLD |
Сброс флага направления |
STD |
Установка флага направления |
Команды пересылки строк пересылают байт или слово из строки-источника в строку-приемник и имеют следующий формат в мнемонике ассемблера:
MOVSB,
MOVSW.
Вне зависимости от применяемой команды, строка-приемник располагается в дополнительном сегменте данных и адресуется косвенным образом через регистр DI (ES:DI), а строка-источник располагается в сегменте данных и адресуется через регистр SI (DS:SI).
Команда MOVSB пересылает один байт из строки-источника в строку-приемник и изменяет содержимое регистров SI и DI на единицу.
Команда MOVSW пересылает слово из строки-источника в строку-приемник и изменяет содержимое регистров SI и DI на два.
При выполнении команды пересылки строк содержимое индексных регистров может как увеличиваться, так и уменьшаться. На это влияет состояние флага направления (DF). Если DF = 0, то содержимое индексных регистров увеличивается на 1 или на 2, в зависимости от пересылаемых данных. Если DF = 1, то содержимое индексных регистров уменьшается.
Команды пересылки строк имеют следующий формат машинного кода.
1010010w |
Если поле w равно 0, то пересылаются байты (команда MOVSB). Если поле w равно 1, то пересылаются слова (команда MOVSW).
Примеры использования команд пересылки строк:
LES DI,[D4] |
; загрузить ES:DI адресом строки-приемника |
LDS SI,[D8] |
; загрузить DS:SI адресом строки-источника |
CLD |
; сбросить флаг направления ; (увеличение индексных регистров) |
MOVSB |
; переслать байт из строки-источника в строку-приемник ; (при этом инкрементируются SI и DI) |
MOWSW |
; переслать слово из строки-источника в приемник ; (при этом содержимое SI и DI увеличится на 2) |
Команды загрузки из строки пересылают байт или слово из строки-источника в аккумулятор и имеют следующий формат в мнемонике ассемблера:
LODSB
LODSW
Как и в командах пересылки строк, строка-источник располагается в сегменте данных и адресуется через регистр SI (DS:SI).
Команда LODSB пересылает один байт из строки-источника в регистр AL и инкрементирует SI, если флаг направления сброшен, или декрементирует SI, если флаг направления установлен.
Команда LODSW пересылает слово из строки-источника в регистр AX и увеличивает содержимое регистра SI на два, если DF = 0, или уменьшает содержимое SI на два, если DF = 1.
Команды загрузки аккумулятора из строки имеют следующий формат машинного кода.
1010011w |
Если поле w = 0, то загружается байт (команда LODSB). Если поле w = 1, то загружается слово (команда LODSW).
Примеры использования команд загрузки из строки:
LDS SI,[0BD8] |
; загрузить DS:SI адресом строки-источника |
CLD |
; сбросить флаг направления ; (увеличение индексных регистров) |
LODSB |
; переслать байт из строки-источника в AL ; (при этом инкрементируются SI) |
LODSW |
; переслать слово из строки-источника в AX ; (при этом содержимое SI увеличится на 2) |
Команды записи в строку пересылают байт или слово из аккумулятора в строку-приемник и имеют следующий формат в мнемонике ассемблера:
STOSB
STOSW
Как и в командах пересылки строк, строка-приемник располагается в дополнительном сегменте данных и адресуется через регистр DI (ES:DI).
Команда STOSB пересылает один байт из AL в строку-приемник и инкрементирует DI, если флаг направления сброшен, или декрементирует DI, если флаг направления установлен.
Команда STOSW пересылает слово из AX в строку-приемник и увеличивает содержимое регистра DI на два, если DF = 0, или уменьшает содержимое DI на два, если DF = 1.
Команды записи содержимого аккумулятора в строку имеют следующий формат машинного кода.
1010101w |
Если поле w = 0, то записывается байт (команда STOSB). Если поле w = 1, то записывается слово (команда STOSW).
Примеры использования команд записи в строку:
LES DI,[0BD8] |
; загрузить ES:DI адресом строки-приемника |
CLD |
; сбросить флаг направления ; (увеличение индексных регистров) |
STOSB |
; переслать байт из AL в строку-приемник ; (при этом инкрементируются DI) |
STOSW |
; переслать слово из AX в строку-приемник ; (при этом содержимое DI увеличится на 2) |
Команды сравнения строк сравнивают байты или слова из строки-источника и строки-приемника и имеют следующий формат в мнемонике ассемблера:
CMPSB
CMPSW
Вне зависимости от применяемой команды, строка-приемник располагается в сегменте данных и адресуется через регистр SI (DS:SI), а строка-источник располагается в дополнительном сегменте данных и адресуется косвенным образом через регистр DI (ES:DI).
Команда CMPSB осуществляет сравнение байт из строки-приемника и строки-источника (вычитает байт строки источника из байта строки приемника, результат ни куда не помещает, но изменяет флаги AF, CF, PF, SF и ZF) и инкрементирует индексные регистры, если DF = 0, или декрементирует индексные регистры, если DF = 1.
Команда CMPSW сравнивает слова из строки-источника и строки-приемника (аналогично команде CMPSB) и увеличивает содержимое индексных регистров на два, если DF = 0, или уменьшает содержимое индексных регистров на два, если DF = 1.
Команды сравнения строк имеют следующий формат машинного кода.
1010011w |
Если поле w = 0, то сравниваются байты (команда CMPSB). Если поле w = 1, то сравниваются слова (команда CMPSW).
Примеры использования команд сравнения строк:
LES DI,[0BD4] |
; загрузить ES:DI адресом ; строки-источника |
LDS SI,[0BD8] |
; загрузить DS:SI адресом ; строки-приемника |
CLD |
; сбросить флаг направления ; (увеличение индексных регистров) |
CMPSB |
; сравнить байты из строки-источника ; и строки-приемника ; (при этом инкрементируются SI и DI) |
CMPSW |
; сравнить слова из строки-источника ; и строки-приемника (при этом ; содержимое SI и DI увеличится на 2) |
Команды сканирования строки сравнивают байт или слово из аккумулятора с байтом или словом из строки-приемника и имеют следующий формат в мнемонике ассемблера:
SCASB
SCASW
Как и в командах пересылки строк, строка-приемник располагается в дополнительном сегменте данных и адресуется через регистр DI (ES:DI).
Команда SCASB сравнивает содержимое AL с байтом из строки-приемника (аналогично команде CMPSB) и инкрементирует DI, если флаг направления сброшен, или декрементирует DI, если флаг направления установлен.
Команда SCASW сравнивает содержимое AX со словом из строки-приемника и увеличивает содержимое регистра DI на два, если DF = 0, или уменьшает содержимое DI на два, если DF = 1.
Команды сканирования строки имеют следующий формат машинного кода.
1010111w |
Если поле w = 0, то сравниваются байты (команда SCASB). Если поле w = 1, то сравниваются слова (команда SCASW).
Примеры использования команд сканирования строки:
LES DI,[0BD8] |
; загрузить ES:DI адресом строки-приемника |
CLD |
; сбросить флаг направления ; (увеличение индексных регистров) |
SCASB |
; сравнить байты из AL и строки-приемника ; (при этом инкрементируются DI) |
SCASW |
; сравнить слова из AX и строки-приемника ; (при этом содержимое DI увеличится на 2) |
Префиксы повторения используются для повторного выполнения следующей за префиксом команды обработки строк и имеют следующие мнемонические обозначения на языке ассемблера:
REP
REPE
REPZ
REPNE
REPNZ
Количество повторений задается предварительно в регистре CX. При каждом повторении команды работы со строками, снабженной одним из этих префиксов, происходит декрементирование регистра CX. Повторение прекращается в зависимости от условия, определяемого смыслом префикса. Условия прекращения повторений приведены в табл. 8.2.
Таблица 8.2
Префиксы повторения
Префикс |
Условие прекращения повторений |
REP |
CX = 0 |
REPE/REPZ |
CX = 0 или ZF = 0 |
REPNE/REPNZ |
CX = 0 или ZF = 1 |
Префиксы повторения имеют следующий формат машинного кода.
1111001z |
Префиксы REP, REPE и REPZ транслируются в машинный формат с z = 1, а префиксы REPNE и REPNZ – в машинный формат с z = 0.
Примеры применения префиксов:
MOV CX,10 |
|
REP MOVSB |
; переслать 10 байт из строки-источника ; в строку-приемник |
REPE CMPSB |
; найти первое несовпадение байт строки-источника ; и строки-приемника |
REPNE SCASB |
; найти первое вхождение содержимого AL в строку |
Команда CLD сбрасывает, а команда STD устанавливает флаг направления флаг направления. У этих команд нет операндов и они имеет следующие форматы машинного кода.
CLD: |
11111100 |
STD: |
11111101 |
СОДЕРЖАНИЕ РАБОТЫ
1. Ознакомиться с теоретическим материалом.
2. С помощью программы debug исследовать выполнение всех арифметических команд с любым возможным типом их операндов.
3. В соответствии со своим вариантом решить поставленные задачи и с помощью DEBUG установить правильность их решения.