Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_Lektsii_2015.doc
Скачиваний:
116
Добавлен:
22.03.2016
Размер:
1.19 Mб
Скачать
  1. Стек и сегмент стека

Стек – это область оперативной памяти, доступ к которой осуществляется по принципу LIFO (Last In First Out (последним зашел – первым вышел) – элемент, записанный в стек последним, считывается из него первым).

Для стека можно отвести любую область памяти, однако ее размер не должен превышать 64 Кб и ее начальный адрес должен быть кратным 16. Эту область называют сегментом стека (рис. 1).

Рис. 1. Сегмент стека

Описание сегмента стека в программе на языке ассемблера:

S SEGMENT STACK

DB k DUP (?)

S ENDS

  1. Стековые команды

2.1. Запись и чтение слов

Запись слова в стек: PUSH op

Допустимые типы операнда: r16, sr, m16.

op - >[ss:sp]

В команде PUSH в качестве операнда можно указывать любой сегментный регистр, (например, PUSH CS).

Чтение слова из стека: POP op

Допустимые типы операнда: r16, sr (кроме CS), m16.

[ss:sp] - > op

Слово, считанное из стека по команде POP, может быть помещено в любой регистр, кроме сегментного регистра CS.

    1. Запись и чтение флагов

Запись регистра флагов в стек: PUSHF

Чтение регистра флагов из стека: POPF

    1. Запись и чтение РОН

Запись регистров в стек: PUSHА

Чтение регистров из стека: POPА

AX, CX, DX, BX, SP, BP, SI, DI

3. Работа со стеком

Сохранение значений регистров

Пример:

PUSH СX

…….. ; использование СX

POP СX

Пересылка данных через стек

Пример:

Необходимо выполнить операцию X:=Y, где X и Y – переменные размером в слово:

PUSH Y

POP X ; X:=Y

Проверка на выход за пределы стека

SP=0? – стек полон?

SP=к? – стек пуст?

(к - размер сегмента стека в байтах)

Очистка и восстановление стека

ADD SP, 2*N ; очистка стека от N слов

MOV AX, SP

…….. ; записи в стек

MOV SP, AX

Доступ к элементам стека

Пример:

Пусть в стеке записано не менее трех слов. Требуется в регистр АХ записать копию третьего сверху элемента стека:

Адрес третьего слова стека равен адресу вершины стека плюс 4. Устанавливаем регистр BP на вершину стека и используем выражение [BP+4] для доступа к третьему слову:

MOV BP, SP

MOV AX, [BP+4] ; AX:=w3

Важно: при работе со стеком необходимо соблюдать баланс между командами записи в стек и чтения из стека.

Пример использования стека

В одномерном массиве сосчитать количество пар чисел, сумма которых равна 10.

Модульное программирование

Модуль – продукт процесса разбиения большой задачи на ряд более мелких функционально самостоятельных подзадач. Этот процесс называется функциональной декомпозицией задачи.

Между структурными единицами программы (модулями) существуют управляющие и информационные связи. Применительно к языку ассемблера рассматривают несколько форм организации управляющих связей:

  • Макроподстановки;

  • Объединение в одну программу подпрограмм, написанных на языке ассемблера;

  • Объединение в единый модуль подпрограмм, написанных на разных языках программирования.

В качестве информационных связей выделяют:

  • Общие области памяти и общие программно-аппаратные ресурсы процессора;

  • Унифицированная передача аргументов при вызове модуля;

  • Унифицированная передача аргументов при возвращении управления из модуля.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]