Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ассемблер.doc
Скачиваний:
21
Добавлен:
25.08.2019
Размер:
526.34 Кб
Скачать

3.14. Управляющие рагистры

Для операций управления в процессоре 8088 используются главным образом три 16-битовых регистра. Это указательстека (SP), указатель команды (IP) и регистр флагов. Два регистра-указателя процессор использует для необходимой при выполнении программы адресации в памяти. Регистр флагов содержит коды состояний, которые программа может использовать для управления своим выполнением.

3.14.1. Указатель инструкций (ip)

Указатель команд - это 16-битовый регистр, который содержит смещение очередной команды. Как показано в предыдущем пункте, Процессор использует регистр CS совместно с регистром IP для формирования 20-битового физического адреса. Регистр CS определяет сегмент выполняемой программы, а IP задает смещение. Поскольку в задании адреса очередной команды участвует два регистра, существует несколько способов задать ход выполнения программы. Наиболее обычный из этих способов осуществляется при нормальном выполнении программы. При извлечении процессором команды из памяти и ее выполнении значение регистра IP увеличивается на размер команды в байтах. Теперь пара CS:IP указывает на следующую команду.

Для изменения порядка выполнения команд используются команды перехода. Команда перехода одного вида изменяет только регистр IP и дает переход внутри одного сегмента. Этот тип перехода называется внутри сегментным или близким (NEAR) переходом. Спецификация для него требует лишь новое значение для регистра IP. Регистр CS остается без изменений. Близкий переход может передавать управление только внутри текущего сегмента, поэтому дальность перехода ограничена сверху 64K байт. Для перехода к более отдаленному участку программы требуется переход другого типа.

Переход второго типа называется межсегментным или далеким (FAR) переходом. При этом переходе процессор назначает новые значения как для IP так и для CS. Этот переход позволяет выполнять новую программу расположенную в любом месте адресного пространства 8088. Но для выполнения такого перехода команда должна определить новые значения для обоих регистров - CS и IP. При прямом переходе это требует пяти-байтовой команды : один байт на код операции и по два байта для регистров CS и IP.

3.14.2. Указатель стека

Регистр указателя стека (SP) - это 16-битовый регистр, который определяет текущее смещение вершины стека. Процессор использует указатель стека совместно с регистром сегмента стека для формирования физического адреса. Процессор использует пару регистров SS:SP для всех стековых ссылок, включая PUSH, POP, CALL и RETURN. Пара SS:SP всегда указывает текущую вершину стека. Когда команда помещает в стек слово, регистр SP уменьшается на два. При извлечении из стека слова процессор увеличивает регистр SP на два. Стек растет в направлении меньших адресов памяти.

Все стековые операции используют значения размером в слово. Отдельный байт не может быть ни помещен в стек ни взят из него. Процессор изменяет регистр SP для того чтобы отразить действия над стеком. На регистр SS ни одна из стековых операций не влияет. Программа устанавливает регистр SS независимо от какой либо операции PUSH (поместить в стек) или POP (извлечь), после чего он указывает на сегмент стека. Это означает, что системный стек ограничен в размере 64 килобайтами. Например, если программа устанавливает регистр SS в 1000H, а регистр SP - на 0, то первое, что будет помещено в стек, разместится поадресам 1000:FFFFH и 1000:FFFEH. Последовательно помещаемые в стек данные будут размещатьсяв нем по все более младшим адресам, пока последний объект не будет расположен в 1000:0001H и 1000:0000H. Если программа поместит в стек в этот момент еще что-нибудь, то оно разместитсяв 1000:FFFFH и 1000:FFFEH, то есть в первых байтах используемых стеком. Поскольку стек теперь "замкнулся", ранее помещенные в него данные разрушены.

При нормальном использовании длина стека не достигает 64K. Если программа устанавливает стек в 512 байт, например,то она может инициализироватьпару SS:SP как 1000:2000H. Первая ячейка стека будет 1000:01FFH, а последняя доступная - 1000:0000H. Если программа поместит в стек более 256 слов, уменьшение регистра SP вызовет проход его значения через нуль иприведет к размещению данных сначала сегмента стека. После этого программа будет помещать стековые данные в область, которая в данном случае не предназначалась для стека - начиная с 1000:FFFFH. При этом может произойти одна из двух неприятных вещей. Стек может перекрыть коды или данные программы и разрушить их, либо стековые данные будут направляться в пространство, которое не имеет физической памяти.

Любую из этих вещей очень трудно обнаружить при отладке программы, поэтому единственный выход - оставлять для стека как можно больше места. В случае персонального компьютера IBM, использующего дисковую операционную систему IBM рекомендуется размер стека не меньше 128 байт. Это дает достаточно места для удовлетворения потребностей в стеке различных служебных программ DOS и системы вместе с обычными запросами самой программы.

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