Ассемблер и программирование для IBM PC



         

ГЛАВА 7. Логика и Организация Программы - часть 16


Команды циклического сдвига

Циклический сдвиг представляет собой операцию сдвига, при которой выдвинутый бит занимает освободившийся разряд. Существуют следующие команды циклического сдвига:

ROR ;Циклический сдвиг вправо ROL ;Циклический сдвиг влево RCR ;Циклический сдвиг вправо с переносом RCL ;Циклический сдвиг влево с переносом

Ассемблер для IBM PC. Глава 7 148

Следующая последовательность команд иллюстрирует операцию циклического сдвига ROR:

MOV CL,03 ; BX: MOV BX,10110111B ; 10110111 ROR BX,1 ; 11011011 ;Сдвиг вправо на 1 ROR BX,CL ; 01111011 ;Сдвиг вправо на 3

Первая команда ROR при выполнении циклического сдвига переносит правый единичный бит регистра BX в освободившуюся левую позицию. Вторая команда ROR переносит таким образом три правых бита. В командах RCR и RCL в сдвиге участвует флаг CF. Выдвигае мый из регистра бит заносится в флаг CF, а значение CF при этом поступает в освободившуюся позицию. Рассмотрим пример, в котором используются команды циклического и простого сдвига. Предположим, что 32-битовое значение находится в регистрах DX:AX так, что левые 16 бит лежат в регистре DX, а правые - в AX. Для умножения на 2 этого значения возможны cледующие две команды:

SHL AX,1 ;Умножение пары регистров RCL DX,1 ; DX:AX на 2

Здесь команда SHL сдвигает все биты регистра AX влево, причем самый левый бит попадает в флаг CF. Затем команда RCL сдвигает все биты регистра DX влево и в освободившийся правый бит заносит значение из флага CF.

ОРГАНИЗАЦИЯ ПРОГРАММ ------------------------------------------------------------

Ниже даны основные рекомендации для написания ассемблер ных программ:

1. Четко представляйте себе задачу, которую должна решить программа

2. Сделайте эскиз задачи в общих чертах и спланируйте общую логику программы. Например, если необходимо прове рить операции пеpесылки нескольких байт (как в примере на рис.7.5), начните c определения полей с пересылаемы ми данными. Затем спланируйте общую стратегию для инициализации, условного перехода и команды LOOP. Приведем основную логику, которую используют многие программисты в таком случае: инициализация стека и сегментных регистров вызов подпрограммы цикла возврат Подпрограмма цикла может быть спланирована следующим образом: инициализация регистров значениями адресов




Содержание  Назад  Вперед