Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
met.doc
Скачиваний:
0
Добавлен:
30.04.2019
Размер:
1.92 Mб
Скачать

Задачи к выполнению лабораторной работы

  1. Вычислить значение функции

  1. Вычислить значение функции

  1. Вычислить значение функции

  1. Увеличить содержимое CX на 1, если значение AX равно 0. Увеличить содержимое CX на 10, если значение AX равно 1.В противном случае увеличить содержимое CX на 100.

  2. Вычислить значение функции

  1. Найти сумму максимальных элементов каждой строки матрицы.

  2. Найти произведение минимальных элементов каждого столбца матрицы.

  3. Найти сумму элементов квадратной матрицы, находящихся над ее главной диагональю.

  4. Найти произведение элементов квадратной матрицы, находящихся под ее главной диагональю.

  5. Сложить номер строки, содержащей минимальный элемент матрицы, с номером столбца, содержащим ее максимальный элемент.

Варианты заданий

Номер варианта

Номер задачи

Номер варианта

Номер задачи

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 установить правильность их решения.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]