Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

7. Строковые (цепочечные) команды




Задания

1. Даны три битовые переменные без знака a, b, c, d. Записать в d наибольшее из значений этих переменных.

2. Пусть a, b, c – числа размером в слово. Вычислить значение функции f при следующих условиях:

                                      f=4*a+b/c-6, если a> =b

                                      f=6-c*(a+b), если b> =c

                                      f=3/a-(7+b)*5, если c> =a и b> =c

3. Даны три произвольных числа. Записать в регистр SI «1», если можно построить треугольник с такими длинами сторон, и «0», если нет.

4. Вычислить значение суммы:

5. Вычислить значение произведения:

 

 

7. СТРОКОВЫЕ (ЦЕПОЧЕЧНЫЕ) КОМАНДЫ

 

Цепочечные команды позволяют работать с длинными последовательностями байт (блоками памяти) и выполнять такие операции как пересылки вида «память-память», установка всех байт блока памяти в какое-либо значение, сравнение двух последовательностей байт и другие. Для задания адресов двух последовательностей байт в цепочечных командах используются регистровые пары DS: SI и ES: DI. Сегмент последовательности указывается в сегментном регистре DS или ES, а смещение – в индексном регистре SI или DI. Некоторые цепочечные команды работают только с одной последовательностью. Сама по себе цепочечная команда обрабатывает только один элемент последовательности. Обработка сразу всей последовательности возможна при использовании так называемых префиксов повторения, которые будут рассмотрены ниже. Цепочечные команды могут обрабатывать последовательности, состоящие из байт или слов. Каждая цепочечная команда имеет две разновидности – команду для обработки последовательностей байт, (мнемоническое обозначение заканчивается на букву ‘B’) и команду для обработки последовательностей слов (мнемоническое обозначение заканчивается на букву ‘W’). Цепочечные команды автоматически увеличивают значение индексных регистров на 1 или 2 (в зависимости от того, обрабатывается ли последовательность байт или слов) или уменьшают на 1 или на 2. Если флаг направления DF установлен, то значения индексных регистров уменьшаются, если сброшен – то увеличиваются. Цепочечные команды не имеют операндов.

Действие команд MOVSB и MOVSW аналогично команде MOV, но выполняется пересылка вида «память-память». Адрес источника указывается в регистровой паре DS: SI (сегмент: смещение), а адрес приемника – в регистровой паре ES: DI (сегмент: смещение). Выполняется пересылка байта или слова из ячейки памяти по адресу DS: SI в ячейку памяти по адресу ES: DI. После этого значение регистров SI и DI автоматически увеличивается или уменьшается на 1 (для команды MOVSB) или на 2 (для команды MOVSW).

Пример использования команд MOVSB и MOVSW (предполагается, что флаг DF сброшен):

A1 DB 1                              ; описание переменных

A2 DW 2

B1 DB?

B2 DW?

. . .

MOV DS, SEG A1            ; настройка DS: SI на A1

MOV SI, OFFSET A1

MOV ES, SEG B1             ; настройка ES: DI на B1

MOV DI, OFFSET B1

MOVSB                    ; B1: = A1, SI: = SI+1, DI: = DI+1

MOVSW                   ; B2: = A2, SI: = SI+2, DI: = DI+2

 

Команды STOSB и STOSW позволяют установить значение байта или слова по адресу, определяемому регистровой парой ES: DI, в соответствии со значением регистра AL (для команды STOSB) или AX (для команды STOSW). После установки значения происходит автоматическое увеличение или уменьшение значения регистра DI на 1 (для команды STOSB) или на 2 (для команды STOSW). Эти две команды работают только с одной последовательностью байт или слов.

Пример использования команд STOSB и STOSW (предполагается, что флаг DF сброшен):

A DB?                        ; описание переменных

B DW?

. . .

MOV ES, SEG A      ; настройка ES: DI на A

MOV DI, OFFSET A

MOV AL, 40H

STOSB                                ; A: = AL, DI: = DI+1

MOV AX, 10010111B

STOSW                              ; B: = AX, DI: = DI+2

 

Команды CMPSB и CMPSW сравнивают байты или слова двух последовательностей с адресами, задаваемыми регистровыми парами DS: SI и ES: DI соответственно. Сравнение означает вычитание второго операнда (адресуемого ES: DI) из первого (адресуемого DS: SI) и установку флагов, при этом разность никуда не записывается. Действие команд CMPSB и CMPSW на флаги аналогично команде вычитания SUB. Команда CMPSB сравнивает байты последовательности, а команда CMPSW – слова. Также как и для команд MOVSB и MOVSW после сравнения происходит автоматическое увеличение или уменьшение значений регистров SI и DI.

Пример использования команд CMPSB и CMPSW (предполагается, что флаг DF сброшен):

A1 DB 1                              ; описание переменных

A2 DW 3

B1 DB 2

B2 DW 4

. . .

MOV DS, SEG A1            ; настройка DS: SI на A1

MOV SI, OFFSET A1

MOV ES, SEG B1             ; настройка ES: DI на B1

MOV DI, OFFSET B1

CMPSB  ; сравнение A1 и B1, SI: = SI+1, DI: = DI+1

CMPSW ; сравнение A2 и B2, SI: = SI+2, DI: = DI+2

 

Команды SCASB и SCASW аналогичны командам CMPSB и CMPSW, но сравнение байт или слов выполняется со значением регистра AL (для команды SCASB) или AX (для команды SCASW). При этом из регистра AL или AX вычитается значение байта (для команды SCASB) или слова (для команды SCASW) по адресу ES: DI. После этого значение регистра DI увеличивается или уменьшается на 1 (для команды SCASB) или на 2 (для команды SCASW).

Пример использования команд STOSB и STOSW (предполагается, что флаг DF сброшен):

A DB 1                                ; описание переменных

B DW 2

. . .

MOV ES, SEG A      ; настройка ES: DI на A

MOV DI, OFFSET A

MOV AL, 1

SCASB                               ; сравнение A и AL, DI: = DI+1

MOV AX, 0003H

SCASW                         ; сравнение B и AX, DI: = DI+2

 

Команда LODSB загружает в регистр AL значение байта по адресу, определяемому регистровой парой DS: SI. Команда LODSW загружает в регистр AX значение слова по адресу, определяемому регистровой парой DS: SI. После этого значение регистра SI увеличивается или уменьшается на 1 (для команды LODSB) или на 2 (для команды LODSW).

Пример использования команд STOSB и STOSW (предполагается, что флаг DF сброшен):

A DB?                        ; описание переменных

B DW?

. . .

MOV ES, SEG A      ; настройка ES: DI на A

MOV DI, OFFSET A

MOV AL, 255

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...