
- •2. Работа с файлами с использованием дескриптора файла, стандартные файлы-устройства.
- •3. Косвенный межсегментный переход, формат команды, адресация перехода, алгоритм команды, флаги, пример использования команды.
- •2. Структура байта атрибута, назначение атрибутов файла.
- •3. Команда дальнего возврата, формат команды, адресация перехода,
- •2. Организация главной программы как дальней процедуры.
- •3 Команда test, алгоритм команды, формируемые флаги, формат, пример использования
- •2. Инициализация сегментных регистров при запуске exe-файла.
- •3. Команды арифметического сдвига, алгоритмы команды, флаги, формат, пример использования.
- •2. Параметр объединения at, пример использования.
- •3. Команды циклического сдвига, алгоритмы команды, флаги, формат, пример использования.
- •2.Параметры директивы сегмент public и stack. Условия их применения.
- •3 Команды циклического сдвига через флаг переноса, алгоритмы команд, флаги, формат, пример использования.
- •2. Использование командной строки при запуске exe-файла.
- •2. Организация «оператора case» на ассемблере с использованием внутрисегментного косвенного перехода.
- •2.Порядок передачи параметров в процедуру(функцию) на паскале. Привести пример программы, нарисовать стек процедуры (функции).
2.Параметры директивы сегмент public и stack. Условия их применения.
PUBLIC - для объединения сегментов кода и сегментов данных. Позво-
ляет объединить сегменты, у которых одно и то же имя, один и тот же
класс и имеется параметр PUBLIC.
Если объединить все сегменты данных, то в дальних процедурах моду-
лей не требуется:
1. Инициализация сегмента данных текущего модуля (для вспомога-
тельных модулей).
2. Обращение к внешней переменной через ES
В этом случае глобальные и локальные переменные всех модулей рас-
полагаются в одном сегменте данных. Объединение сегментов выполняется на
этапе редактирования, поэтому правила использования локальных и глобаль-
переменных остаются в силе.
Если объединить все сегменты кода, то исчезнет необходимость ис-
пользовать межсегментные вызовы процедур. Все вызовы могут быть ближними.
Сегменты, не имеющие параметр PUBLIC, не объединяются. Если суммар-
ный объем сегмента превышает 64 Kb, сегменты не объединяются.
Пример объединения сегментов данных двух модулей.
;M1 ;M2
extrn z:word public Z
A segment public 'Q' A segment public 'Q'
x dw -5 z dw ?
y db -8 y dw 20
A ends A ends
;М.EXE
A segment public 'Q'
0000 x dw -5 ;Переменные М1
0002 y db -8 ;
0003 ;Пропуск 13 пустых байтов. Выход на гра-
................................;ницу параграфа.
000F ;
--------------------------------;
0010 z dw ? ;Переменные М2
0012 y dw 20;
A ends
При отсутствии параметра выравнивания, по умолчанию, объединение
сегментов выполняется на границе параграфа.
В рассмотренном примере в одном сегменте данных располагаются две
локальные переменные y. В командах программы они представлены разными
адресами.
Параметр stack
Используется точно так же как и параметр pablic, но для объединения
сегментов стека. При его наличии автоматически осуществляется инициали-
зация регистров SS и SP. При объединении сегментов стека исчезает
проблема инициализации сегмента стека в дальних процедурах вспомогатель-
ных модулей.
3 Команды циклического сдвига через флаг переноса, алгоритмы команд, флаги, формат, пример использования.
7(15) ┌── 0
RCL-циклический сдвиг влево ┌───┐ ┌────────┼──────┐
через триггер флага перноса ┌───┤ CF│<───│ <────┘ │<──┐
│ └───┘ └───────────────┘ │
└────────────────────────────────┘
7(15) ──┐ 0
┌───┐ ┌────────┼──────┐
RCR-циклический сдвиг вправо ┌─>─┤ CF├────│ └───> ├>──┐
через триггер флага переноса │ └───┘ └───────────────┘ │
└────────────────────────────────┘
В командах циклического сдвига через флаг переноса выполняется
сдвиг в поле из 9-ти или 17-ти байт.
Пример: В поле байта записать биты в обратном порядке.
А db 75
Для решения задачи будем осуществлять передачу бит из исходного
поля в результирующее через триггер флага переноса.
shl ┌──────────────┐
┌───<──┤7 A 0│ Аисх.=01001011b
┌──┴──┐ └──────────────┘
│ CF │
│ │
└──┬──┘ ┌──────────────┐
└──>───┤7 AL 0│ AL = 11010010b
rcr └──────────────┘
mov cx,8
c: shl a,1
rcr al,1
loop c
Билет 7.