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

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.