
Сегментные регистры
Четыре сегментных регистра — cs, ds, ss, es — определяют в памяти начала четырех 64 Кбайтовых сегментов. Программа может распределять более четырех сегментов, но при этом для адресации дополнительных сегментов она должна перемещать соответствующие им правильные значения между одним или несколькими сегментными регистрами.
Сегментные регистры являются строго специализированными. Вы не можете выполнять над ними математические вычисления или хранить в них результаты других операций. Регистр сегмента кода cs указывает в памяти на начало машинного кода программы. Регистр сегмента данных ds содержит начальный адрес переменных программы. Регистр сегмента стека ss определяет начало стекового пространства. Дополнительный сегментный регистр es является вспомогательным, но несмотря на то что в большинстве программ в es и ds содержатся одинаковые адреса, он может упрощать некоторые операции, связанные с этими регистрами.
Регистр командного указателя
Специальный регистр командного указателя ip указывает на следующую исполняемую машинную команду относительно определенного в cs сегмента. Вы редко будете прямо обращаться к ip. Вместо этого для изменения адреса следующей исполняемой инструкции вы будете использовать специальные команды, которые меняют значения в ip (и, возможно, в cs), приводя тем самым к изменению порядка исполнения программы. Например, вызов подпрограммы приводит к загрузке ее адреса в ip (или в пару cs:ip).
Флаги
Хотя регистр флагов состоит из 16 бит, из них используются только 9 (см. рис. 4.2), остальные 7 бит программами не используются. Отдельные биты флагов представляются одиночными буквами о, d, i, t, s, z, a, p, с. В некоторых руководствах (включая и это) для них часто применяются обозначения of, df, if и т.п. В табл. 4.1 содержатся полные имена для каждого битового флага.
В основном в битах регистра флагов процессора 8086 отражаются результаты выполнения различных команд и операций. Например, после сложения флаг переноса cf показывает, получился ли в результате перенос. Флаг переполнения указывает, может ли результат сложения чисел со знаком быть правильно представлен с помощью заданного количества битов. Флаги могут также служить для других целей. Например, можно выполнить в регистре сдвиг влево, передав первую значащую цифру для проверки во флаг переноса cf, после чего другие команды могут выполняться в зависимости от установки этого или других битов регистра флагов. Можно так же использовать cf в качестве однобитового устройства, предупреждающего о возникновении ошибок, информируя другие части программы о неполадках. По мере изучения команд языка ассемблера вы также узнаете о той важной роли, которую играют флаги в работе программ.
Таблица 4.1. Флаги 8086
Символ |
Полное имя |
О ИЛИ Of |
Флаг переполнения |
d или df |
Флаг направления |
i или if |
флаг прерывания |
t или tf |
флаг трассировки |
s или sf |
Флаг знака |
z или zf |
Флаг нуля |
а или af |
Вспомогательный флаг |
p или pf |
Флаг четности |
с или cf |
флаг переноса |