Стековые команды. Процедуры. (Лекция 14)

Содержание

Слайд 2

Механизм выполнения стековых команд процессором

В командах PUSH/POP адрес не задается!

Механизм выполнения стековых команд процессором В командах PUSH/POP адрес не задается! Процессор
Процессор будет обращаться к памяти по адресу SS: SP
SS – указатель сегмента стека,
SP – внутрисегментный адрес последнего записанного в стек значения («вершина стека»)
Процессор автоматически изменяет внутрисегментный адрес в регистре SP при выполнении стековых команд
Команды PUSH и POP выполняются над словами или двойными словами (не байтами!).

Слайд 3

Механизм выполнения стековой записи: PUSH

Запись в стек (PUSH) процессор ведет в

Механизм выполнения стековой записи: PUSH Запись в стек (PUSH) процессор ведет в
сторону уменьшения внутрисегментных адресов !
Перед записью процессор уменьшает SP на длину записываемого операнда и только затем выполняет запись
Пример: Пусть, SP = 6 . В регистрах DX = 2053h, EBX = 1F 03 FA 05h . Выполнены команды записи в стек: push dx и push ebx

Слайд 4

Механизм выполнения стекового чтения: POP

Процессор выполняет чтение из памяти, начиная с адреса

Механизм выполнения стекового чтения: POP Процессор выполняет чтение из памяти, начиная с
SS:SP
Затем увеличивает SP на длину прочитанного операнда.
Пример: Пусть SP=0. После выполнения команды POP CX в регистре СХ будет код FA 05

Слайд 5

Набор стековых команд в системе команд

POP/PUSH r/m16 ; чтение/запись слов
POP/PUSH r/m32

Набор стековых команд в системе команд POP/PUSH r/m16 ; чтение/запись слов POP/PUSH
; чтение/запись двойных слов
PUSH i16 или i32 ; запись непосредственной величины (слово или двойное слово)
PUSHA ; запись в стек всех 16-разр.регистров
POPA ; чтение из стека в 16-разр.регистры
PUSHAD ; запись в стек всех 32-разр. регистров
POPAD ; чтение из стека в 32-разр. регистры

Слайд 6

Использование стековых команд

Стековыми командами пользуются для быстрого сохранения и последующего восстановления состояния

Использование стековых команд Стековыми командами пользуются для быстрого сохранения и последующего восстановления
регистров.
Последовательность чтения из стека должна быть обратна последовательности записи !!
Пример:
push bx ; сохранили в стек коды из bx и cx
push cx
. . . . .
pop cx ; прочитали из стека значения обратно в cx и bx
pop bx

Слайд 7

Нужен ли собственный стековый сегмент в программе?

1) Создавать его не обязательно. Операционная

Нужен ли собственный стековый сегмент в программе? 1) Создавать его не обязательно.
система создает общий стек для использования всеми исполняемыми программами.
2) Если вы хотите создать свой стек (пример создания стека на 10 слов):
stg segment stack use16
dw 10 dup (?)
stg ends
. . . . .
cod segment use16
assume cs: cod, ss: stg, . . .
m1: . . .
mov ax, stg
mov ss, ax
. . .
Использование указания stack в директиве segment позволяет не заботиться о занесении в SP адреса «вершины стека». Это сделает ОС при загрузке исполняемого кода в память.

Слайд 8

Процедурная передача управления (процедуры)
Это механизм передачи управления с возвратом в точку кодового

Процедурная передача управления (процедуры) Это механизм передачи управления с возвратом в точку
сегмента, откуда был сделан вызов
Команды процессора:
САLL адрес процедуры - Вызов процедуры ( внутрисегментный или межсегментный CALL)
RET – Возврат из процедуры
Часто повторяющиеся фрагменты кода можно оформить как процедуру для сокращения объема машинного кода (но не времени его исполнения!)

Слайд 9

Механизм выполнения команд CALL и RET


Внутрисегментный CALL (пример: call met1)
Процессор сохраняет в

Механизм выполнения команд CALL и RET Внутрисегментный CALL (пример: call met1) Процессор
стеке текущее значение IP (адрес следующей за CALL команды):
SP← SP -2; SS:SP ← IP
и затем изменяет внутрисегментный адрес в IP, аналогично JMP
Внутрисегментный RET
Процессор считывает в IP сохраненный в стеке адрес :
IP ← SS:SP; SP← SP +2
При межсегментном CALL ( пример: call far ptr cs:met2)
процессор сохраняет в стеке текущие значения CS и IP.
SP ← SP-4; SS:SP← IP ; SS:SP+2 ← CS
При выполнении RET он считывает их в CS и IP из стека

Слайд 10

Описание процедуры для транслятора

Имя процедуры PROC ; директива транслятора
команды процедуры

Описание процедуры для транслятора Имя процедуры PROC ; директива транслятора команды процедуры
RET
Имя процедуры ENDP ; директива транслятора
Процедуры размещают:
в отдельном кодовом сегменте для доступности другим кодам
локальную процедуру - в текущем кодовом сегменте после последней команды
Параметры для процедуры (входные и/или выходные, если они предусмотрены) передают через регистры или память
Адреса памяти в качестве параметров должны задаваться косвенно!

Слайд 11


Пример:
Структура односегментной программы с внутренней локальной процедурой

Пример: Структура односегментной программы с внутренней локальной процедурой

Слайд 12

Пример. Создать универсальную процедуру для обнуления любого массива байтов. Входные параметры: адрес

Пример. Создать универсальную процедуру для обнуления любого массива байтов. Входные параметры: адрес
массива в памяти и его длина. Использовать ее для обнуления своего массива данных.


Структура программы
Сегмент данных Mydat, указатель на сегмент- ds
Кодовый сегменте Mycod, указатель на сегмент- сs
Кодовый сегмент Prcod с процедурой, указатель на сегмент- сs
2. Размещение данных в памяти и регистрах
ds:massive - адрес моего массива данных, 100 байт
3. Параметры процедуры
Входные параметры: DS:SI – адрес массива,
СХ – длина массива (в байтах)
Выходные параметры: нет

Слайд 13



NUL

Алгоритм основной программы: Алгоритм процедуры NUL:
- задание

NUL Алгоритм основной программы: Алгоритм процедуры NUL: - задание входных параметров -
входных параметров - обнуление массива байтов
для процедуры и ее вызов


DS ← указатель на
сегмент данных

CX ← 100

SI ← адрес Massive

Вызов процедуры CS: NUL

завершение

4. Алгоритмы основной программы и процедуры


Имя файла: Стековые-команды.-Процедуры.-(Лекция-14).pptx
Количество просмотров: 36
Количество скачиваний: 0