Адресное пространство и режимы адресации
Адресное пространство микропроцессора – множество адресов оперативной памяти, доступной для программ, выполняемых микропроцессором. Под размером адресного пространства понимают мощность этого множества, т.е. количество программно-доступных адресов основной памяти. Размер адресного пространства определяется максимальной длиной адреса и может выражаться либо в единицах минимальных адресуемых элементов (ячеек) памяти, либо в более крупных единицах (словах). Например, если исполнительный адрес в микро-ЭВМ формируется в виде 16-разрядного слова, то при минимальном адресуемом элементе, равном 1 байт, максимальный размер адресного пространства этой микро-ЭВМ составит 216 = 65535 байт = 64К байт или 32К слов (если в каждом слове содержится 2 байта).
Поскольку МП КР580ВМ80А имеет размер слова, равный минимальному размеру ячейки памяти – 1 байт, а шина адреса микропроцессора состоит из 16 линий, то его адресное пространство составляет 64К байт (или, что то же самое, слов).
В системе команд любого микропроцессора значительное место занимают адресные команды. Команда называется адресной, если один или несколько ее операндов располагаются в оперативной памяти. Такой операнд называется адресным. Для использования адресного операнда необходимо сформировать его исполнительный (физический) адрес. Таким образом, адресная команда требует дополнительных обращений процессора к памяти для каждого из ее адресных операндов, что удлиняет цикл ее выполнения по сравнению с безадресными командами.
Необходимость формирования исполнительного адреса операнда в адресной команде обусловлена несколькими причинами. Одна из них заключается в том, что из-за ограниченной длины команды в ней нельзя записать полный физический адрес операнда, а можно разместить лишь некоторую вспомогательную величину, с помощью которой вычисляется исполнительный адрес по какому-либо правилу. Другая причина заключается в необходимости осуществления различных способов (режимов) адресации операндов – процедур, или логических схем, позволяющих преобразовать адресную информацию об операнде в исполнительный адрес операнда в оперативной памяти.
Для микропроцессора КР580ВМ80А характерны четыре режима адресации памяти:
· прямой;
· непосредственный;
· косвенный режим адресации через пару регистров;
· использование указателя стека.
При режиме прямой адресации памяти длина команды равна 3 байт, причем в первом (левом) байте находится код операции, а в двух следующих байтах – адрес операнда. Микропроцессор КР580ВМ80А имеет ту особенность, что вслед за кодом операции в следующем байте записывается содержимое младшего байта адреса, а за ним – содержимое старшего байта адреса.
При режиме непосредственной адресации памяти длина команды составляет 2 байт, из которых первый байт хранит код операции, а второй – сам операнд. Следовательно для команды с непосредственной адресацией нет нужды отыскивать операнд в памяти, так как он входит в состав команды.
Если в команде используется режим косвенной адресации через пару регистров, то адрес операнда берется из двух регистров общего назначения. Чаще всего для этой цели применяются регистры H (для старшего байта адреса) и L (для младшего байта адреса). Сама команда при этом занимает всего 1 байт. Для ссылки на регистры H и L в команде на языке ассемблера записывается имя M. При режиме адресации памяти через указатель стека адресация выполняется с помощью 16-разрядного регистра SP, содержимое которого, в данном случае, является адресом ячейки памяти, откуда необходимо взять или куда поместить операнд. Команда с таким способом адресации либо помещает данное в стек, либо извлекает его. Данное, подлежащее занесению в стек, извлекается либо из пары 8-разрядных регистров общего назначения, либо из счетчика команд. По адресу, который на единицу меньше исходного значения указателя стека, в стек сначала записывается старший байт данного, а затем младший байт данного по адресу на два меньшему исходного значения указателя стека (рис. 2). Операция извлечения данного из стека осуществляется в обратном порядке по отношению к операции занесения. Предполагается, что программа, использующая стек, в самом начале своей работы выполняет инициализацию стека, т.е. установку исходного значения указателя. Здесь следует отметить следующую особенность рассматриваемого микропроцессора: во время инициализации стека его вершина располагается в верхней части оперативной памяти микро-ЭВМ; при заполнении стека его вершина смещается в направлении меньших адресов памяти, тогда как программа размещается в памяти начиная с младших адресов. Таким образом, области памяти, занятые программной и стеком, растут навстречу друг другу, что необходимо учитывать при разработке программ больших размеров.
Система команд
Система команд МП КР580ВМ80А содержит 78 базовых команд. Всего же, с учетом модификации команд за счет применения различных режимов адресации общее количество команд равно 244.
По функциональному назначению команды можно разделить на следующие группы:
· команды пересылки данных между оперативной памятью и регистрами микропроцессора;
· команды для выполнения арифметических и логических операций;
· команды управления;
· команды связи с подпрограммами;
· команды сдвига данных в регистрах;
· команды ввода/вывода;
· специальные команды.
Коды всех команд микропроцессора представлены в таблице 3. С помощью этой таблицы можно легко и быстро сопоставить мнемонику команды с ее кодом операции. Мнемоника каждой команды располагается на пересечении строк и столбцов таблицы, причем строка определяет в шестнадцатеричном виде старшую часть кода операции, а столбец – младшую.
Команды пересылки данныхможно разделить на две группы: команды однобайтовых пересылок – наиболее многочисленная группа команд. С их помощью осуществляется обмен данными между внутренними регистрами МП, а также между внутренними регистрами и ячейками памяти. Внутренние межрегистровые пересылки осуществляются командами MOV R1, R, где R1иR –любые внутренние 8-разрядные регистры микропроцессора. При выполнении этих команд содержимое регистра R пересылается в регистр R1, причем в регистре R сохраняется прежнее значение данных. Например, после выполнения команды MOV C, A данные из регистра A будут переписаны в регистр C. Содержимое регистра A при этом сохранится.
В качестве операнда этой команды может быть также определена ячейка памяти, адрес которой находится в регистровой паре HL. Например по команде MOV C, M произойдет пересылка данных из ячейки памяти M, адрес которой содержится в регистровой паре HL во внутренний регистр микропроцессора. Содержимое ячейки памяти при этом не изменится. Другой пример: по команде MOV M, E данные из регистра E запишутся в ячейку памяти M, адрес которой содержится в регистровой паре HL, а данные в регистре E останутся неизменными.
Для пересылок данных между аккумулятором и ячейками памяти адрес ячейки может задаваться также содержимым регистровых пар BC или DE. Тогда для записи в память данных из аккумулятора используют однобайтовые команды STAX B или STAX D, а при обратной пересылке – LDAX B или LDAX D. Адрес ячейки памяти для обмена с аккумулятором можно задать также с помощью трехбайтовых команд с непосредственной адресацией. В этом случае для записи данных из аккумулятора в память служит команда STA ADR, для обратной пересылки – LDA ADR.
С помощью двухбайтовой команды MVI R, D8 можно записать операнд D8 (байт) в любой 8-разрядный регистр МП. Запись операнда D8 можно также осуществить в ячейку памяти, адресуемую содержимым регистровой пары HL, командой MVI M, D8. Операндом здесь является второй байт команды.
В группу команд двухбайтовых пересылок входят трехбайтовые команды LXI B, D16, LXI D, D16, LXI H, D16, которые служат для непосредственной записи операнда D16 в регистровые пары BC, DE, HL.
Используя команды SHLD ADR, LHLD ADR, можно организовать пересылки данных между регистровой парой HL и ячейкой памяти, непосредственно адресуемой по содержимому второго и третьего байта команды. Остальные команды этой группы осуществляют пересылки с адресацией по указателю стека SP. С помощью команд PUSH B, PUSH D, PUSH H содержимое регистровых пар BC, DE, HL засылается в стек. По команде PUSH PSW в стек засылаются данные из аккумулятора и регистра признаков. Команды POP B, POP D, POP H служат для пересылки 16-разрядного слова из ячеек памяти, адресуемых указателем стека SP в соответствующую пару регистров. Командой POP PSW данные из стека пересылаются в аккумулятор и регистр признаков F. Таким образом, команда POP PSW может изменить все биты регистра признаков F. Команда SPHL позволяет занести адрес из регистровой пары HL в указатель стека SP.
Команды ввода/вывода Микропроцессор КР580ВМ80А имеет всего две команды для ввода/вывода данных.
С помощью команды ввода IN N можно переписать байт данных в регистр A микропроцессора из одного из 256 портов ввода. Номер порта ввода определяется вторым байтом команды.
Аналогично по команде вывода OUT N байт данных из регистра A микропроцессора буде переписан в любой из 256 портов вывода, адресуемых вторым байтом команды.
Группа команд обмена.В этой группе также всего две команды: XTHG – команда обмена содержимым между регистровыми парами HL и DE и команда XTHL – команда обмена содержимым между регистровой парой HL и SP.
Группа команд арифметических и логических операций с одним операндом.С помощью команды CMC можно изменять значение бита переноса на противоположное, т.е. инвертировать признак переноса. Команда STC позволяет установить значение признака переноса в 1. Значение всех битов регистра A можно инвертировать, применив команду CMA.
Таблица 3