Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы теория.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
37.81 Кб
Скачать

3. Команды арифметического сдвига, алгоритмы команды, флаги, формат, пример использования.

7(15) ┌── 0

┌───┐ ┌────────┼──────┐ 0

SAL-сдвиг арифметический влево │ CF│<───│ <────┘ │<──

└───┘ └───────────────┘

Команды SAL и SHL имеют одинаковый машинный код.

7(15) ──┐ 0

┌───┐ ┌───┬────┼──────┐

SAR-сдвиг арифметический вправо │ CF│ ┌─>│Зн.│ └───> │──┐

знак остается неизменным └───┘ │ └─┬─┴───────────┘ │

^ └────┘ │

└─────────────────────────┘

В команде арифметического сдвига вправо знак не изменяется, его значение

тиражируется в освобождающиеся справа от знака разряды. Команды SAL,SAR

могут использоваться для умножения и целочисленного деления чисел на

число кратное степени 2. Сдвиг положительных чисел выполняется также,

как и в командах логических сдвигов. Поэтому рассмотрим особенности

операций над отрицательными числами.

Пример.

Пусть al=-10=1.1110110. Выполним последовательность команд.

sal al,1 ;al=-20=1.1101100,OF=0;

sal al,1 ;al=-40=1.1011000,OF=0;

sal al,1 ;al=-80=1.0110000,OF=0;

sal al,1 ;al=+96=0.1100000,OF=1.

При последнем сдвиге знак числа изменился на противоположный, т.е. про-

изошло переполнение, флаг переполнения установился в единицу.

Пусть al=-10=1.1110110. Выполним последовательность команд.

sar al,1 ;al=-5=1.1111011,OF=0;

sar al,1 ;al=-3=1.1111101,OF=0;

sar al,1 ;al=-1=1.1111111,OF=0;

sar al,1 ;al=-1=1.1111111,OF=0.

При сдвиге четных отрицательных чисел результат равен делению на 2.

При сдвиге нечетных отрицательных чисел результат равен делению на 2

минус единица. Сдвиг числа -1 вправо не меняет его значения.

Билет 5.

2. Параметр объединения at, пример использования.

Параметр объединения AT <константное выражение>

Накладывает сегмент на любой участок памяти, начиная с адреса, оп-

ределенного константным выражением. Константное выражение определяет

абсолютный адрес сегмента без последних четырех битов. Сегмент с пара-

метром АТ не объеиняется с другими сегментами.

Пример наложения сегмента на поле данных BIOS.

BIOS_D segment AT 0400h

org 17h ;смещение на 17h байт от начала сегмента

f1keyb db ? ; Флаги

f2keyb db ? ; лавиатуры.

BIOS_D ends

Выполнение функции int 16h ah=02h тождественно команде

mov al,f1keyb.

Пример наложения сегмента на нулевую страницу видеобуфера.

VIDEO segment AT 0B800h

sсr dw 25*80 dup(?)

VIDEO ends

Любая программа занимает сплошное поле памяти. AT-сегменты не вклю-

чаются в это поле. Переменные в АТ-сегментах нельзя инициализировать.

3. Команды циклического сдвига, алгоритмы команды, флаги, формат, пример использования.

7(15) ┌── 0

┌───┐ ┌────────┼──────┐

ROL-циклический сдвиг влево │ CF│<─┬─│ <────┘ │<──┐

└───┘ │ └───────────────┘ │

└─────────────────────┘

7(15) ──┐ 0

ROR-циклический сдвиг вправо ┌───┐ ┌────────┼──────┐

│ CF│<─┬>│ └──── >├>──┐

└───┘ │ └───────────────┘ │

└─────────────────────┘

Команды циклического сдвига вращают биты регистра или операнда в памяти. Команды циклического сдвига влево сдвигают все биты вверх (к старшему), за исключением старшего бита, который возвращается вниз. Команды циклического сдвига вправо делают обратное: биты сдвигаются вниз (к младшему), а младший бит переносится в вершину. Для команд RCL и RCR флаг CF является частью вращаемого множества. Команда RCL сдвигает флаг CF в младший бит, а старший бит сдвигает во флаг CF. Команда RCR сдвигает флаг CF в старший бит, а младший бит сдвигает во флаг CF. Для команд ROL и ROR исходное значение флага CF не является частью результата, но флаг CF получает копию бита, который был сдвинут из одного конца в другой.

Билет 6.