
- •2. Работа с файлами с использованием дескриптора файла, стандартные файлы-устройства.
- •3. Косвенный межсегментный переход, формат команды, адресация перехода, алгоритм команды, флаги, пример использования команды.
- •2. Структура байта атрибута, назначение атрибутов файла.
- •3. Команда дальнего возврата, формат команды, адресация перехода,
- •2. Организация главной программы как дальней процедуры.
- •3 Команда test, алгоритм команды, формируемые флаги, формат, пример использования
- •2. Инициализация сегментных регистров при запуске exe-файла.
- •3. Команды арифметического сдвига, алгоритмы команды, флаги, формат, пример использования.
- •2. Параметр объединения at, пример использования.
- •3. Команды циклического сдвига, алгоритмы команды, флаги, формат, пример использования.
- •2.Параметры директивы сегмент public и stack. Условия их применения.
- •3 Команды циклического сдвига через флаг переноса, алгоритмы команд, флаги, формат, пример использования.
- •2. Использование командной строки при запуске exe-файла.
- •2. Организация «оператора case» на ассемблере с использованием внутрисегментного косвенного перехода.
- •2.Порядок передачи параметров в процедуру(функцию) на паскале. Привести пример программы, нарисовать стек процедуры (функции).
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.