Предыдущий раздел | ВЫПОЛНЕНИЕ ПРОГРАММ ПРОЦЕССОРОМ I8086 | Следующая глава |
На рис.11 приведен алгоритм выполнения машинных команд в ЦП. Он представляет собой упрощенный вариант работы реального процессора i8086, в котором некоторые этапы выполняются во времени не последовательно, а параллельно.
Данный алгоритм представляет собой бесконечный цикл, который инициируется сразу же после включения питания. На одной итерации алгоритма ЦП выполняет одну машинную команду. Это выполнение начинается с определения реального адреса команды в ОП. Этот адрес выдается из ЦП на шину адреса. Получив его, ОП помещает следующую команду на шину данных, и ЦП вводит команду в очередь команд. Пока дешифрируется эта команда, определяется ее длина в байтах и производится увеличение содержимого IP на эту длину, в результате чего IP адресует следующую машинную команду. После этого цикл повторяется.
Последовательная выборка команд из памяти и их выполнение продолжаются до тех пор, пока очередной командой, поступившей из ОП на ЦП, не окажется команда перехода.Команды перехода позволяют изменить естественный порядок следования машинных команд. Они делятся на команды безусловного и команды условного перехода.
Команды безусловного перехода обязательно изменяют естественный порядок выполнения команд. Существуют пять машинных команд безусловных переходов. Все они имеют одну и ту же ассемблерную мнемонику jmp и один операнд. Эти команды можно разбить на две группы: команды близких и команды дальних переходов.
Команда близкого перехода выполняет безусловный переход в пределах текущего сегмента кода. Это делается путем замещения содержимого IP (т.е. внутрисегментного адреса следующей по порядку команды) адресом, задаваемым самой командой перехода.
Рис.11. Алгоритм работы ЦП
Команда дальнего перехода выполняет безусловный переход на ячейку ОП, расположенную за пределами текущего сегмента кода. Это делается путем замещения содержимого не только IP, но и CS значениями, содержащимися в самой команде перехода. Следствием этого является замена логического сегмента кода, и поэтому до тех пор, пока на ЦП не поступит следующая команда дальнего перехода, все последующие команды будут выбираться из нового сегмента
Кроме команд jmp безусловный переход выполняют команды call, ret, int, iret. Эти команды мы рассмотрим позже, а пока лишь отметим, что мнемоникам call и ret соответствуют по две машинные команды, одна из которых выполняет близкий, а другая – дальний безусловный переход. Команды int и iret выполняют только дальние переходы.
Команды условных переходов замещают или не замещают содержимое IP в зависимости от результатов предыдущих команд, отраженных в регистре FLAGS. Например, если после команды sub (вычитание) в программе находится команда jz (переход по нулю), то переход осуществляется в том случае, если результат вычитания нулевой, и поэтому ZF (флаг нуля в FLAGS) установлен. Если же ZF=0 (ненулевой результат вычитания) переход не производится. Так как команды условных переходов могут выполнять только очень близкие переходы (не далее 128 байтов), то для реализации больших переходов (в том числе и за пределы сегмента кода), каждый такой оператор дополняется оператором безусловного перехода.
Предыдущий раздел | В начало | Следующая глава |