КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Выполнение команд и линейный кодВ предыдущем разделе мы рассматривали форматы команд на примере операции С ← [А] + [В]. На рис. 5.3. показан фрагмент программы, выполняющей эту задачу, в том виде, в каком он представлен в памяти компьютера. Мы предполагаем, что компьютер поддерживает только одноадресные команды и что его процессор содержит много регистров. Длина слова составляет 32 разряда, а память адресуется побайтово. Три команды программы расположены в следующих друг за другом словах, начиная с адреса i. Поскольку каждая команда занимает 4 байта, вторая и третья команды начинаются по адресам i + 4 и i + 8. Для того чтобы упростить задачу, мы также предполагаем, что полный адрес целиком задается в команде, занимающей одно слово, хотя при таких размерах адресного пространства и той длине слова, которая поддерживается современными процессорами, подобное, как правило, невозможно. Рассмотрим процесс выполнения этой программы подробно. Процессор содержит регистр, называемый счетчиком команд (Program Counter, PC), в котором хранится адрес следующей команды. Чтобы программа начала выполняться, адрес ее первой команды (в нашем примере i) должен быть помещен в регистр PC. Затем управляющие схемы процессора будут использовать информацию из этого регистра для выполнения последовательно расположенных в памяти команд, по одной за раз, в порядке увеличения их адресов. Этот процесс называется последовательным выполнением программы, а сама программа, представленная в памяти как список команд, называется линейной. В ходе выполнения каждой команды адрес, хранящийся в регистре PC, увеличивается на 4, чтобы этот регистр указывал на следующую команду программы. Таким образом, после выполнения команды Move, расположенной по адресу i + 8, регистр PC будет содержать значение i + 12, указывающее на первую команду следующего фрагмента программы.
Адрес памяти Содержимое памяти i MOV AX,A │ Фрагмент программы, i+4 ADD AX,B │ состоящий из трех i+8 MOV C,AX │ команд … … i+N Число А │ … … │ i+M Число B │ Данные для программы … … │ i+K Число C │ Рис. 5.3. Программа для выполнения операции С ← [А] + [В] Выполнение каждой команды производится в два этапа. На первом этапе, называемом фазой выборки команды, из памяти извлекается команда, хранящаяся по адресу, указанному в регистре PC. Эта команда помещается в регистр команды (Instruction Register, IR). После этого начинается второй этап, называемый фазой выполнения команды. На этом этапе процессор анализирует команду в регистре IR, чтобы узнать, какое действие ему следует выполнить. Затем он производит это действие, для чего обычно требуется выбрать операнды из памяти или из регистров, выполнить арифметическую или логическую операцию и сохранить результаты по указанному адресу. В ходе этой двухфазной процедуры содержимое регистра PC в определенный момент увеличивается таким образом, чтобы он указывал на следующую команду. Когда выполнение команды завершается, регистр PC содержит адрес следующей команды, то есть можно начинать этап выборки новой команды. В большинстве процессоров фаза выполнения делится, в свою очередь, на несколько фаз, соответствующих выборке операндов, выполнению операции и сохранению результатов.
|