Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Переходы
В большинстве современных компьютеров реализован принцип последовательного выполнения команд. Это значит, что после выполнения текущей команды счётчик адреса будет указывать на следующую (ближайшую с большим адресом) команду в оперативной памяти.[15] Изменить последовательное выполнение команд можно с помощью переходов, при этом следующая команда может быть расположена в другом месте оперативной памяти. Ясно, что без переходов компьютеры функционировать не могут: скорость центрального процессора так велика, что он очень быстро может по одному разу выполнить все команда в оперативной памяти. Понимание переходов очень важно при изучении архитектуры ЭВМ, они позволяют уяснить логику работы центрального процессора. Все переходы можно разделить на два вида. · Переходы, вызванные выполнением центральным процессором специальных команд переходов. · Переходы, которые автоматически выполняет центральный процессор при наступлении определённых событий в центральной части компьютера или в его периферийных устройствах (устройствах ввода/вывода). Начнём последовательное рассмотрение переходов для компьютеров нашей архитектуры. Напомним, что физический адрес начала следующей выполняемой команды зависит от значений двух регистров: сегментного регистра CS и счётчика адреса IP и вычисляется по формуле: Aфиз: = (CS*16 + IP)mod 220 Следовательно, для осуществления перехода необходимо в один или оба эти регистра занести новые значения. Отсюда будем выводить первую классификацию переходов: будем называть переход близким переходом, если при этом меняется только значение регистра IP, если же при переходе меняются значения обоих регистров, то такой переход будем называть дальним (межсегментным) переходом. [16] Следующей основой для классификации переходов будет служить способ изменения значения регистра. При относительном переходе происходит знаковое сложение содержимого регистра с некоторой константой, например, IP: = (IP + Const)mod 216 При абсолютном переходе происходит просто присваивание соответствующему регистру нового значения, например, CS: = Const Опять же из соображений ценности практического использования в программировании, для сегментного регистра CS реализован только абсолютный переход, в то время как для счётчика адреса IP возможен как абсолютный, так и относительный переходы. Далее будем классифицировать относительные переходы по величине той константы, которая прибавляется к значению счётчика адреса IP: при коротком переходе величина этой знаковой константы (напомним, что мы обозначаем её i8) не превышает по размеру одного байта (т.е. лежит в диапазоне от –128 до +127): IP: = (IP + i8)mod 216, а при длинном переходе эта константа имеет размер слова (двух байт): IP: = (IP + i16)mod 216 Кроме того, величина, используемая при абсолютном переходе для задания нового значения какого-либо из этих регистров, может быть прямой и косвенной. Прямая величина является просто числом (в нашей терминологии это непосредственный адрес), а косвенная – является адресом некоторой области памяти, откуда и будет извлекаться необходимое число, например, IP: = [m16] Здесь на регистр IP заносится число, содержащееся в двух байтах памяти по адресу m16, т.е. это близкий длинный абсолютный косвенный переход. Таким образом, каждый переход можно классифицировать по его свойствам: близкий – дальний, относительный – абсолютный, короткий – длинный, прямой – косвенный. Разумеется, не все из этих переходов реализуются в компьютере, так, мы уже знаем, что короткими или длинными бывают только относительные переходы, а относительные переходы бывают только прямыми.
|