|
В начало
Машина пользователя и система команд (Лекция)
ПЛАН ЛЕКЦИИ 8-разрядный микропроцессор Архитектура 16-разрядного микропроцессора 8-разрядный микропроцессор
Программная модель 8-разрядного микропроцессора (МП) i8080 (К580ВМ80) включает в себя (Рис. 0.1) программно-доступные объекты МПС, т.е. те объекты, состояние которых можно проанализировать и/или изменить при помощи команд МП. К таким объектам относятся внутренние регистры МП, ячейки памяти и порты ввода/вывода. Рис. МП i8080 - машина пользователя Микропроцессор включает в себя следующие программно-доступные ¨ 8-разрядные регистры: ¨ A - регистр-аккумулятор; ¨ C, D, E, H, L - регистры общего назначения (РОН); ¨ FLAGS - регистр признаков (флажков); 16-разрядные регистры: ¨ PC - программный счетчик (счетчик команд); ¨ SP - указатель стека; и одноразрядный регистр (триггер) ¨ I - разрешения прерывания. Регистр FLAGS имеет следующий формат:
где ¨ CF - перенос из старшего (7-го) разряда; ¨ PF - паритет (четность числа единиц в результате); ¨ AF - дополнительный перенос (из 3-го разряда); ¨ ZF - нулевой результат; ¨ SF - отрицательный результат (знак). В некоторых командах пары регистров BC, DE, HL могут рассматриваться как единые двухбайтовые регистры. К программно-доступным можно отнести фиктивный однобайтовый регистр M, роль которого выполняет ячейка памяти, адрес которой хранится в регистровой паре HL. С регистром М можно проводить все те же операции, что и с любым РОНом. При анализе системы команд МП i8080 будем классифицировать команды по следующим признакам: 1) по функциям операций: · арифметико-логические и специальные; · пересылки и загрузки; · ввода/вывода; · передачи управления; · системные. (комментарии к классам операций см. ниже) 2) по формату команд: · однобайтовые; · двухбайтовые; · трехбайтовые. Первый байт всех команд включает код операций, а для некоторых команд еще и адрес (адреса) регистров. Второй байт двухбайтовых команд содержит непосредственный операнд одинарной длины или адрес устройства ввода/вывода. Второй и третий байты трехбайтовых команд содержат непосредственный операнд двойной длины или прямой адрес памяти. 3) по способу адресации: · безадресная; · прямая регистровая; · прямая памяти; · косвенно-регистровая; · непосредственная. При безадресном способе адрес операнда в команде подразумевается (принимается “по умолчанию”) и не может быть изменен (чаще всего это аккумулятор) - например, в командах инверсии, сдвигов (NOT, RAR,. ..) или не имеет смысла, например, в командах NOP, HLT. При прямой регистровой адресации в коде команды предусматривается трехбитовое поле (в команде MOV - два поля), содержащее адрес РОН, или двухбитовое поле для адресации регистровой пары. Косвенно-регистровая адресация определяет регистровую пару, в которой хранится двухбайтовый адрес операнда, расположенного в памяти. Косвенная адресация через пару HL позволяет выполнять над адресуемой ячейкой памяти (М) те же действия, что и над любым РОН. Косвенная адресация через пары BC и DE обеспечивает только пересылку данных из аккумулятора в память и из памяти в аккумулятор. Прямая адресация памяти требует трехбайтового формата и обеспечивает пересылку данных между аккумулятором и памятью. Предусмотрена так же пересылка по прямому адресу слов двойной длины между парой HL и памятью, причем в команде (во втором и третьем байте) указывается адрес младшего байта данных, старший байт извлекается из ячейки памяти с адресом, большим на 1. При непосредственной адресации сам операнд располагается во втором байте команды (длина операнда - 8 бит) или во втором и третьем байтах (16 бит). 4) по длине обрабатываемых слов: · операции над словами одинарной длины (8 бит); · операции над словами двойной длины (16 бит). В представлена система команд 8-разрядного микропроцессора К580ВМ80. Арифметические операции в системе команд i8080 представлены арифметическими операциями с фиксированной запятой: сложением и сложением с переносом, вычитанием и вычитанием с заемом, инкрементом и декрементом. Последние две операции могут выполняться над содержимым любого регистра (в том числе М) и над содержимым любой регистровой пары РОН (BC, DE, HL). При выполнении сложения и вычитания первый операнд всегда располагается в аккумуляторе, второй адресуется в регистре или непосредственно, а результат помещается в аккумулятор. В системе команд предусмотрена операция сложения содержимого регистровой пары HL с содержимым любой регистровой пары РОН (в том числе и HL). Результат сложения помещается в HL. Логические операции системы команд - дизъюнкция, конъюнкция и неравнозначность. Один из операндов и результат - в аккумуляторе, второй операнд адресуется в регистре или непосредственно. К специальным операциям могут быть отнесены безадресные аккумуляторные команды инверсии, десятичной коррекции и сдвигов. Команда десятичной коррекции DAA анализирует величину каждой тетрады аккумулятора, начиная с младшей, и значение флагов переноса из тетрад (AF и CF соответственно). Если значение тетрады превышает 9 (1010..1111) или соответствующий флаг равен 1, то к тетраде добавляется константа 6 (0110). При этом значение возникающего при суммировании переноса фиксируется в соответствующем разряде слова признаков FLAGS. В системе команд i8080 имеются 4 команды циклических сдвигов аккумулятора, особенности которых иллюстрируются Рис. 0.2. Команды пересылки и загрузки обеспечивают передачу информации между различными уровнями памяти (ОЗУ - СОЗУ) или между ячейками памяти одного уровня, а так же загрузку регистров или ячеек памяти константами (при использовании непосредственной адресации). Обмен между ячейкой памяти и регистром осуществляется по косвенному адресу памяти и только аккумулятор может обмениваться с памятью по прямому адресу (трехбайтовыми командами). В системе команд i8080 предусмотрены команды пересылки и загрузки как байтового регистра, так и регистровой пары, причем роль аккумулятора двойной длины играет пара HL. Таблица
Условные обозначения
Близкими по смыслу и реализации к командам пересылки и загрузки являются команды ввода/вывода, обеспечивающие обмен между аккумулятором и портом ввода/вывода, адрес которого (8 бит) указывается во втором байте двухбайтовой команды. Рис. Выполнение сдвигов Команды передачи управления изменяют естественный порядок выполнения программы, загружая в счетчик команд PC новый адрес. Эти команды делятся на три группы: переходы, вызовы и возвраты, причем в каждой группе в системе команд МП К580ВМ80 по 9 команд - одна безусловная и восемь условных. В качестве условий передачи управления фигурируют флаги CF, ZF, PF, SF и их инверсии. Если условие выполнено, то в командах переходов осуществляется загрузка программного счетчика PC вторым и третьим байтами команды. При этом старое значение PC теряется. В командах вызовов (подпрограмм) старое значение PC помещается предварительно в верхушку стека, после чего PC загружается вторым и третьим байтами команды. Команды возвратов - однобайтовые, т.к. не содержат адреса памяти. При выполнении условия возврата в программный счетчик переписываются два байта верхушки стека, старое значение PC теряется. При невыполнении условия все команды передачи управления передают управление следующей по порядку команде. Формирование признаков. Команды микропроцессора могут сформировать значение всех или некоторых признаков (флажков) по результатам выполнения команды, установить значение признака независимо от результата операции или сохранить значения признаков без изменений. В Табл. 0.2 приведены действия команд МП К580.. на признаки. Таблица
В таблице приняты следующие обозначения: + признак формируется по результату операции; 0 признак устанавливается в ноль; - признак сохраняется. Особенности
архитектуры других 8-разрядных МП К основным недостаткам рассмотренной выше системы команд МП i8080 можно отнести отсутствие разновидностей относительной адресации и, как следствие - сложности с обработкой нескольких массивов. Микропроцессоры, разработанные несколько позже i8080, включают, как правило, один или несколько индексных регистров. Так, 8-разрядный МП фирмы Motorola MC6800 имеет, помимо PC и SP, 16-разрядный индексный регистр, регистр признаков и два аккумулятора (A и B), но не имеет РОНов. Наиболее мощным из 8-разрядных МП является Z80 фирмы Zilog. Рассмотрим структуру программно-доступных объектов этого МП (Рис. 0.3).
Рис. МП Z80 - машина пользователя Z80 включает в себя все программно-доступные объекты i8080. Дополнительно Z80 имеет два 16-разрядных индексных регистра IX, IY и большое число команд, адресующих операнд через индексный регистр и 8-разрядное смещение (второй байт команды). Дополнительный блок РОН позволяет при переходе к подпрограмме сохранять содержимое регистров не прибегая к длительной процедуре размещения содержимого регистров в стеке. Два дополнительных 8-разрядных специальных регистра позволяют организовывать регенерацию динамической памяти и управлять размещением таблицы векторов прерываний (см. разделы 5 и 7 соответственно). Система команд Z80 включает все 78 команд i8080 и 80 дополнительных команд. Список команд расширен за счет команд, использующих индексную адресацию, команд сдвигов, системных команд и др. Значительно расширен набор команд 16-разрядной арифметики и пересылки. Архитектура 16-разрядного микропроцессора
Переход к 16-разрядным микропроцессорам - i8086 и другие аналогичной вычислительной мощности - ознаменовался качественным скачком всех основных характеристик МП: не просто увеличение разрядности, но значительное изменение архитектуры, системы команд, принципов организации структуры. Кроме показанного на Рис. 0.4, в машину пользователя i8086 включатся память объемом 1М байт и две области портов ввода и вывода по 64К каждая. Рассмотрим "машину пользователя" на базе i8086 (К1810ВМ86):
Рис. МП i8086 - машина пользователя Разработчики i8086 старались сохранить возможность преемственности программного обеспечения i8080, поэтому в составе i8086 можно выделить подмножество регистров i8080 (соответствующие подмножество сохранено и в системе команд). Помимо операций с 16-разрядными регистрами общего назначения (РОН) AX..DX, допускается обращение к каждому байту этих регистров - AL..DL, AH..DH. В некоторых командах РОНы выполняют определенные по умолчанию функции счетчиков, индексных регистров и т.п. (см. Рис. 0.4). 16-разрядные регистры BP, SI, DI используются для образования исполнительных адресов памяти (см. ниже), SP - указатель стека, IP - программный счетчик (СчК), F - регистр флагов. Младший байт F полностью повторяет формат регистра признаков i8080, а старший имеет след. формат:
где: DF определяет направление модификации адресов массивов в командах цепочек (увеличение или уменьшение адреса); IF маскирует внешнее прерывание по входу INT (при IF = 1 прерывание разрешено); TF управляет пошаговым режимом работы микропроцессора. При TF = 1 после выполнения каждой команды автоматически формируется прерывание с вектором 4 (см. раздел 7). Распределение адресного пространства. Адресное пространство МП определяется в i8086 разрядностью шины адреса/данных + адреса и составляет 220 = 1М байт. В этом адресном пространстве МП одновременно доступны четыре сегмента, два из которых (DS и ES) предназначены для размещения данных, CS - сегмент кода (для размещения программы) и SS - сегмент стека. Размеры сегментов определяются разрядностью логических адресов команд, данных и стека. Логические адреса команд и стека (верхушки) хранятся в 16-разрядных регистрах IP и SS соответственно, а логический адрес данных вычисляется в команде (см. ниже) и так же составляет 16 бит. Таким образом, размер каждого сегмента в i8086 составляет 64К байт. Положение сегмента в адресном пространстве (его начальный адрес) определяется содержимым одноименного сегментного регистра. Формирование физического адреса иллюстрируется схемой Рис. 0.5 . Из Рис. 0.5 видно, что граница сегмента в адресном пространстве может быть установлена не произвольно, а таким образом, чтобы начальный адрес сегмента был кратен 16.
Рис. Формирование физического адреса По умолчанию сегментные регистры выбираются для образования физического адреса след. образом: при считывании команды по адресу IP используется CS, при обращении к данным - DS или ES, при обращению к стеку - SS. С помощью специальных приставок к команде (префикса) можно назначить для использования произвольный сегментный регистр (кроме пары CS:IP, которая не подлежит модификации). Границы сегментов могут быть выбраны т.о., что сегменты будут изолированы друг от друга, пересекаться или даже полностью совпадать. Например, если загрузить CS=SS=DS=ES=0, то все сегменты будут совпадать друг с другом и начинаться с нулевого адреса - вариант организации адресного пространства i8080. Способы адресации и методы формирования исполнительного адреса Длина команды i8086 может составлять от 1 до 6 байт. Формат команды представлен на Рис. 0.6.
Рис. Формат команды МП i8086 Большинство команд i8086 являются двухадресными, причем один адрес определяет регистр процессора, а другой - память или регистр. Поля команды имеют следующие назначения: D - определяет направление передачи информации: при D = 1 REG является приемником, иначе - источником; W - определяет длину операндов в команде: при W = 1 длина операндов составляет 16 бит (слово - word), иначе - 8 бит(байт); REG - определяет регистр для первого операнда
Поля R/M и MOD определяют способ формирования адреса второго операнда, который располагается чаще всего в памяти. Ниже приведены способы формирования адресов памяти для двух значений поля MOD.
В Табл. 0.4 d8 и d16 означают соответственно 8- и 16-разрядное смещение (3 и 3+4 байты команды). При операциях с d8 осуществляется его "знаковое расширение" до 16 бит - биты 15..8 принимают значение бита 7 (знака). При значении MOD = 10 используются те же регистры, что при MOD = 01 (см. Табл. 0.4), но вместо d8 используется d16. При MOD = 11 вторым операндом команды является регистр, определяемый полем R/M согласно Табл. 0.3. Таким образом, операнд в памяти может адресоваться прямо (MOD = 00, R/M = 110) или косвенно посредством содержимого базовых (BP, BX) или индексных (SI, DI) регистров, а так же их суммы. Режимы адресации спроектированы с учетом эффективной реализации языков высокого уровня. Например, к простой переменной можно обратиться в режиме прямой адресации, а к элементу массива - в режиме косвенной адресации посредством BX, SI. Режим адресации через BP предназначен для доступа к данным из сегмента стека, что удобно при реализации рекурсивных процедур и компиляторов языков высокого уровня. Система команд i8086Система команд насчитывает 113 базовых команд, объединенных в следующие группы. 1) Команды передачи данных: а) между регистрами и памятью (включая стек), обмен содержимым источника и приемника; б) ввода, вывода, табличного преобразования; в) загрузка исполнительного адреса в РОНы, загрузка 4-байтового адресного объекта в регистры-указатели (начальный адрес сегмента и смещение в сегменте); г) передача содержимого регистра F флагов в память, в стек и из стека. 2) Арифметические команды: + - × / двоичных чисел со знаком и без знаков (произведение и делимое представляются числами двойной длины), коррекция десятичная + - упакованных двоично-десятичных чисел, коррекция десятичная + - × / распакованных двоично-десятичных чисел. 3) Логические команды и сдвиги: инверсия, конъюнкция, дизъюнкция, неравнозначность; TEST - поразрядная конъюнкция операндов с установкой флагов но без занесения результатов; сдвиги на 1 или заданное число разрядов (константа сдвига располагается в CL). 4) Команды передачи управления: переходы, вызовы, возвраты - имеют две разновидности - внутрисегментные ("близкие") и межсегментные ("дальние"). При близких передачах загружается только IP, при дальних - IP и CS. Передачи управления могут быть прямыми (целевой адрес - в команде) или косвенными (целевой адрес вычисляется с использованием стандартных режимов адресации) В 16 командах условных переходов проверяются отношения знаковых и беззнаковых чисел. Имеются 4 команды управления циклами, которые рассчитаны на передачу числа повторений цикла в регистре CX. 5) Команды обработки цепочек данных Команды манипулируют последовательностями байт или слов в памяти. Время обработки цепочек этими командами гораздо меньше, чем соответствующей программной реализацией. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||