Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по архитектуре ЭВМ.doc
Скачиваний:
46
Добавлен:
02.05.2014
Размер:
238.59 Кб
Скачать

7. Структура стека. Команды для работы со стеком. Синтаксис. Примеры.

Стек – это некоторая область ОП, которая использует механизм безадресной записи и выборки элементов данных.

Эти механизмы полагают, что элемент, который записан последним, будет всегда прочитан первым.

Адрес сегмента памяти, в котором находится стек, определяется значением в регистре SS. Размер стека задается первоначальным значением регистра SP.

Пара регистров SS:SP всегда указывает на текущую величину стека.

Для занесения слова в стек используется команда push. При этом сначала смещение в SP уменьшается на 2, а затем проверяется запись слова.

Для извлечения – pop. Сначала производится чтение слова, а затем смещение в SP увеличивается на 2.

Стек растет в направлении к началу памяти и уменьшается в направлении к ее концу.

Пример: push ax

pop bx

Эти 2 команды позволяют переписать слово из регистра ax в регистр bx.

Особенности работы со стеком:

1. Значение можно произвольно изменять в программе, но этого делать не следует.

2. Необходимо обратить внимание на выделение достаточного объема памяти для стека.

Язык Ассемблер допускает упрощение команды для работы со стеком.

push ax |

push bx |

push cx | push ax bx cx

| =

pop ax | pop ax bx cx

pop bx |

pop cx |

pusha – все регистры общего назначения в стек.

popa – считывание данных из стека.

8. Прерывания.

Прерывание – изменение текущей последовательности команд. По происхождению делится на программное, внутреннее и аппаратное. Процессор может выполнять 256 типов прерываний, каждому из которых соответствует свой вектор прерывания – дв. слово, сод-е дальний адрес в ряде регистров CS:IP, выз-й подпр-й. Под векторы прерываний в общ. пр-и адресов памяти зарезервирована область 0-3FFh

Программные прерывания. Вызываются исп-м пр-мы INT XX

Когда вып-ся прерывания, сначала адрес прерываний программы сохраняется в прер. Программе в паре регистров CS:IP. После обработки прерываний считается значение адреса, которое было сохранено ранее и возвр. на место прер. команды.

Внутренние прерывания. Возникают при работе процессора по особым условиям. При переполнении также возможно внутреннее прерывание.

Аппаратные прерывания. Инициируются клавиатурой. К ним можно отнести прерывания мыши.

9. Функции dos: ввод с клавиатуры, печати строки, завершение инициализации.

1) Печать строки 09h ah=09h ds:dx – адрес выводимой строки.

mov ah,09h

mov dx,offset x

int 21h

В ah заносится номер функции DOS, реализующей вывод на экран строки текста. DOS, получив управление с помощью int 21h определяет номер функции именно по содержимому ah, поэтому другим регистром здесь пользоваться нельзя.

Функция DOS 09h извлекает адрес выводимой строки из dx.

2) Завершение инициализации. 4ch

Завершает текущую программу. В процессе завершения освобождает всю выделенную процессу память.

При вызове ah=4ch

al – код возврата

mov ah,4ch

int 21h

end.

3) Ввод с клавиатуры 01h – ввод символа с эхом.

Вводит символ с клавиатуры и отображает его на экран. При отсутствии символа ждет ввода. Допустимо перенаправление ввода на другое устройство.

При вызове ah=01h

mov ah,01h

int 21h

Пример: Программа-диалог, где встречаются все три функции.

.model tiny

.data

txt1 DB ‘This is time am – [y/n]$’

txt2 DB 13,10 ‘Good morning’,13,10,’$’

txt3 DB 13,10 ‘Good afternoon’,13,10,’$’

.code

.startup

mov dx, offset txt1 ‘ вывод строки txt1

mov ah,09h

int 21h

mov ah,01h ‘ ввод с клавиатуры y или n

int 21h

cmp al,’y’

jnz m1

cmp al,’n’

jnz m2

m1: mov dx, offset txt3

jmp m3

m2: mov dx, offset txt2

jmp m3

m3: mov ah,09h ‘ вывод строки txt2 или txt3

jmp m3

mov ah,4ch ‘ завершение инициализации

int 21h

end.