
- •2. Работа с файлами с использованием дескриптора файла, стандартные файлы-устройства.
- •3. Косвенный межсегментный переход, формат команды, адресация перехода, алгоритм команды, флаги, пример использования команды.
- •2. Структура байта атрибута, назначение атрибутов файла.
- •3. Команда дальнего возврата, формат команды, адресация перехода,
- •2. Организация главной программы как дальней процедуры.
- •3 Команда test, алгоритм команды, формируемые флаги, формат, пример использования
- •2. Инициализация сегментных регистров при запуске exe-файла.
- •3. Команды арифметического сдвига, алгоритмы команды, флаги, формат, пример использования.
- •2. Параметр объединения at, пример использования.
- •3. Команды циклического сдвига, алгоритмы команды, флаги, формат, пример использования.
- •2.Параметры директивы сегмент public и stack. Условия их применения.
- •3 Команды циклического сдвига через флаг переноса, алгоритмы команд, флаги, формат, пример использования.
- •2. Использование командной строки при запуске exe-файла.
- •2. Организация «оператора case» на ассемблере с использованием внутрисегментного косвенного перехода.
- •2.Порядок передачи параметров в процедуру(функцию) на паскале. Привести пример программы, нарисовать стек процедуры (функции).
3 Команда test, алгоритм команды, формируемые флаги, формат, пример использования
Команда TEST вычисляет поразрядное логическое "И" своих двух операндов. Каждый бит результата равен 1, если соответствующие биты операндов равны 1, иначе каждый бит равен 0. Результат нигде не запоминается, только соответствующим образом выставляются флаги SF, ZF и PF.
Логические операции выполняются поразрядно, поэтому межразрядные
связи отсутствуют. Устанавливаются флаги: SF,ZF,PF, а флаги: CF и OF
cбрасываются на ноль. Команда TEST выполняет операцию AND, изменяет флаги, а результат не формирует.
Для двухоперандных команд используются три формата
kop mem/reg,mem/reg
7 0 7 6 5 3 2 0 7 0 7 0
┌────────────┬───┬───┐ ┌─────┼─────┼─────┐ ┌ ─ ─ ┐ ┌ ─ ─ ┐
│ КОП │ d │ w │ │ mod │ reg │ r/m │ displ disph
└────────────┴───┴───┘ └─────┴─────┴─────┘ └ ─ ─ ┘ └ ─ ─ ┘
kop mem/reg,data
7 0 7 0 7 0 7 0 7 0 7 0
┌───────┬──┬─┐ ┌───┬────┬─────┐ ┌ ─ ─ ─┐ ┌ ─ ─ ┐ ┌─────┐ ┌ ─ ─ ┐
│ KOP │S │W│ │mod│ kop│ r/m │ dispL dispH │dataL│ dataH
└───────┴──┴─┘ └───┴────┴─────┘ └ ─ ─ ─┘ └ ─ ─ ┘ └─────┘ └ ─ ─ ┘
kop AC,data
7 0 7 0 7 0
┌───────┬─┐ ┌─────┐ ┌ ─ ─ ┐
│ KOP │W│ │dataL│ dataH
└───────┴─┘ └─────┘ └ ─ ─ ┘
Билет 4.
2. Инициализация сегментных регистров при запуске exe-файла.
Пример расположения в памяти небольшого EXE-файла.
DS,ES -> ┌──┬──┬────────┐ Сегмент PSP содержит 256 байт, где
│CD│20│ │ располагаются системная информация,
13 8A h ├──┴──┘ │ необходимая для выполнения программы.
│ PSP │ В первых двух байтах записана команда
│ 256 байт │ int 20h, при выполнении которой управ-
SS -> ├──────────────┤ передается в DOS.
│ Sseg │ Во второй половине PSP записываются
13 9A h │64 б= 40h │ параметры, передаваемые в командной
SP -> ├──────────────┤ строке.
00 40h│ Dseg │
│ <=16 байт │
CS -> ├──────────────┤
13 9F h │ Cseg │
└──────────────┘
Регистры сегментов данных DS и ES устанавливаются DOS на начало
PSP. В программе может использоваться несколько сегментов данных. Обра-
щаться к этим сегментам можно только последовательно. Порядок работы с
данными определяет сам программист. Поэтому инициализация сегментных
регистров данных выполняется командами программы.
Регистр SS устанавливается на начало сегмента стека автоматически,
если в описании присутствует параметр stack
Sseg segment stack
Если stack не указать, то в программе необходимо инициализировать
свой сегмент стека
mov AX,Sseg
mov SS,AX.
Сегментный регистр CS всегда устанавливается DOS на начало Cseg.
Если в программе несколько сегментов кода, то CS устанавливается на
сегмент, где находится пусковой адрес.