
- •2. Работа с файлами с использованием дескриптора файла, стандартные файлы-устройства.
- •3. Косвенный межсегментный переход, формат команды, адресация перехода, алгоритм команды, флаги, пример использования команды.
- •2. Структура байта атрибута, назначение атрибутов файла.
- •3. Команда дальнего возврата, формат команды, адресация перехода,
- •2. Организация главной программы как дальней процедуры.
- •3 Команда test, алгоритм команды, формируемые флаги, формат, пример использования
- •2. Инициализация сегментных регистров при запуске exe-файла.
- •3. Команды арифметического сдвига, алгоритмы команды, флаги, формат, пример использования.
- •2. Параметр объединения at, пример использования.
- •3. Команды циклического сдвига, алгоритмы команды, флаги, формат, пример использования.
- •2.Параметры директивы сегмент public и stack. Условия их применения.
- •3 Команды циклического сдвига через флаг переноса, алгоритмы команд, флаги, формат, пример использования.
- •2. Использование командной строки при запуске exe-файла.
- •2. Организация «оператора case» на ассемблере с использованием внутрисегментного косвенного перехода.
- •2.Порядок передачи параметров в процедуру(функцию) на паскале. Привести пример программы, нарисовать стек процедуры (функции).
2. Структура байта атрибута, назначение атрибутов файла.
При создании файла задаются его атрибуты. Ниже приведена структура
байта атрибутов.
┌──┬──┬──┬──┬──┬──┬──┬──┐
│ │ │ │ │ │ │ │ │
└──┴──┴──┴──┴──┴──┴──┴──┘
│ 7 │6 │5 │4 │3│ 2 │1 │0
│ │ │ │ │ │ │ └ обычный файл
│ │ │ │ │ │ └только для чтения
│ │ │ │ │ └ спрятанный файл
│ │ │ │ └ системный файл
│ │ │ └метка тома
│ │ └ каталог
│ └─ архивный файл
└── не используется
Байт атрибутов используется для файлов, каталогов и меток тома(назва-
ние диска). Единица в соответствующем бите указывает определенное свойство,
ноль - отсутствие этого свойства. Биты "каталог" и "метка тома" для файлов
не должны устанавливаться.
3. Команда дальнего возврата, формат команды, адресация перехода,
алгоритм команды.
retf - межсегментный возврат
[SP] -> IP
SP:= SP+2
[SP] -> CS
SP:= SP+2
Алгоритм работы:
Работа команды зависит от типа процедуры:
для процедур дальнего типа - последовательно восстановить из стека содержимое eip/ip и сегментного регистра cs.
Команда RET предназначена для возврата из подпрограмм, она передает управление по адресу возврата, выбираемому из стека. Этот адрес обычно помещается в стек командой CALL. Необязательный числовой параметр команды RET указывает количество байт, которые команда дополнительно освобождает в стеке после извлечения адреса возврата (эти байты могли содержать, например, параметры покидаемой подпрограммы, переданные командой CALL-через_шлюз_вызова).
Для дальнего возврата адрес в стеке является дальним указателем, первым извлекается смещение, затем следует селектор.
В реальном режиме регистры CS и IP загружаются сразу без каких-либо проверок.
В защищенном режиме дальний возврат инициализирует проверку селектора и дескриптора адреса возврата. Кроме этого, возврат к меньшему уровню привилегий вызывает перезагрузку стека SS:eSP значением, сохраненным перед блоком параметров стека покидаемой процедуры. Сегментные регистры DS, ES, FS и GS могут быть очищены при выполнении дальнего возврата к меньшему уровню привилегий, если значения селекторов в этих регистрах задают сегменты, которые не могут быть использованы на новом уровне привилегий (определяется путем анализа соответствующих дескрипторов).
Если осуществляется дальний возврат с изменением уровня привилегий и очисткой блока параметров в стеке, то соответствующее число байт освобождается как в стеке покидаемой процедуры, так и в стеке головной процедуры.
Билет 3.
2. Организация главной программы как дальней процедуры.
Организация главной программы, как дальней процедуры.
begin proc far Состояние стека после выполнения
команд для возврата в DOS
возврат┌─ push DS ├────────────┤
в │ xor AX,AX; AX:=0 │ 0000h │<─ SP
DOS └─ push AX ├────────────┤
│ Адрес PSP │
инициализа- ┌─ mov AX,DSeg ├────────────┤
ция сегмента└─ mov DS,AX
данных
retf
begin endp
Cseg ends
end begin;begin - пусковой адрес
Главная программа заканчивается выполнением команды retf, по кото-
рой осуществляется переход на начало PSP. Затем выполняется int 20h и
управление возвращается в DOS.