Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Система команд. Все команды по функциональному признаку разделены на группы: перемещение данных; обработка данных; управление программой; ввод – вывод и специальные






 

Все команды по функциональному признаку разделены на группы: перемещение данных; обработка данных; управление программой; ввод – вывод и специальные команды.

Описывая систему команд с использованием мнемоники, необходимо учитывать возможности конкретного языка для образования допустимых сокращений. Конечно, тем, кто впервые сталкивается с микропроцессорами и их программированием, хочется, чтобы все мнемонические сокращения были сделаны на основе их родного языка, а не какого-нибудь иностранного. Но, например, как сократить команды ВВОД и ВЫВОД (аналогично ВХОД и ВЫХОД)? По-английски они будут записаны IN-OUT, т.е. сразу достаточно краткими, и различаются на столько, что могут быть сокращены до одной буквы (I/O). В русском варианте сокращение, к сожалению, совершенно невозможно.

Слову ВЫВОД (ВЫХОД) особенно не повезло, так как в командах арифметических действий и управления программой встречаются сокращения, отличающиеся только одной буквой, например, ВЫЧесть, ВЫПолнить, ВЫЗвать и др. Разница в одной букве для трех- или четырехбуквенных сокращений очень часто приводит к досадным ошибкам и труднообнаруживаемым опечаткам. В этом заключается одна из причин того, почему программисты часто предпочитают использовать в качестве мнемокодов сокращения английских терминов, хотя в начальный период их трудно запомнить.

Но основная причина широкого использования английского языка для мнемонических сокращений машинных команд связана с наличием готового математического обеспечения конкретного микропроцессора, а также возможностью использования математического обеспечения, подготовленного для других систем, в частности мини-ЭВМ.

Проблема применения мнемокодов на английском язык решается проще, чем это кажется с первого взгляда. Для создания программы иностранный язык изучать не надо, достаточно знать лишь несколько терминов одинаково часто встречающихся в командах большинства микропроцессоров и микро-ЭВМ. Описывая в дальнейшем систему команд, будем придерживаться следующего порядка.

Как правило, для восьмиразрядного микропроцессора КР.580ИK80A адреса и коды команд принято давать в шестнадцатеричной системе кодирования; в частности, именно в таком виде выдается листинг (распечатка) программы после машинной трансляции.

 

 

В микропроцессоре КР.580ИК80А команды межрегистровых передач являются двухадресными: в них приходится адресовать регистр - источник и регистр – получатель информации.

Регистровая адресация. По однобайтной команде (перемещение данных из одного регистра в другой). В зоне операнда должны быть указаны два адреса: на первом месте - куда помещается информация, т.е. адрес получателя (приемника); на втором месте - откуда берутся данные, т.е. адрес источника, например MOV R2, R1, где R означает регистры A, B, C, D, E, H, L, M. Можно сказать, что в команде указывается место назначения, в которое должны прибыть перемещаемые данные в результате операции.

При операции перемещения данных содержимое источника сохраняется неизменным, а начальное содержимое приемника заменяется результатом операции.

В мнемонике команды указываются условные обозначения РОН, в которых находятся приемник и источник, между собой эти обозначения обязательно разделяются запятой. Например, MOV С, В означает «перенести содержимое регистра В в регистр С»; содержимое регистра В остается без изменения. При трансляции команды в объектный код, условные обозначения регистров заменяются их двоичными номерами. Все регистры общего назначения, память и аккумулятор имеют постоянные номера.

Команда перемещения данных является самой «богатой» по числу различных вариантов. Если перебрать в зоне операнда все возможные комбинации регистров, то в перечне машинных команд будет занято 64 позиции. Правда, хотя все их можно применять, часть их окажется по существу бесполезной. Например, команда MOV А, А предписывает переслать содержимое аккумулятора обратно в аккумулятор.

Косвенно-регистровая адресация. Если данные переме-щаются в регистр из основной памяти или, наоборот, переносятся в память из регистра, то используется косвенно-регистровая адресация.

Например, MOV М, В означает поместить содержимое регистра В в ячейку памяти, адрес которой находится в регистрах Н и L. В восьмеричном коде эта операция представляется как 160, а в машинном - 01110000 (70 HEX). Команда MOV В, М аналогична предыдущей, но перемещение информации происходит в противоположном направлении: из памяти (по адресу в регистрах Н и L) в регистр – приемник В.

Непосредственная адресация. Команды перемещения данных могут иметь непосредственное представление операнда и косвенную адресацию.

Непосредственная адресация по-английски будет читаться как Immediate Addressing, поэтому в мнемонике команд она указывается буквой I, стоящей на последнем месте. Например, MVIA, 02 означает поместить число 02 в регистр А. Эти команды имеют двухбайтный формат, в результате их выполнения содержимое второго слова команды помещается в регистр, номер которого указан в поле операнда первого слова команды.

Очевидно, что при использовании любых команд перемещения все необходимые данные должны быть предварительно помещены в соответствующие регистры. Для этого применяются относящиеся к этой же группе команды передачи содержимого ячейки памяти во внутренние регистры. Обычно такие операции выполняются по командам загрузки. Противоположные действия, т.е. передачу содержимого внутреннего регистра в память, называют командами запоминания, или сохранения данных.

Команды загрузки аккумулятора и запоминания данных. По трехбайтной команде LDA в аккумулятор загружается содержимое ячейки памяти, адресуемой вторым и третьим байтами команды, а по команде запоминания STA -обратная противоположная передача. Все команды могут быть выполнены с прямой, непосредственной и косвенной адресацией.

При прямой адресации команды имеют трехбайтный формат и предписывают в случае запоминания поместить содержимое аккумулятора в ячейку памяти, адрес которой указан вторым и третьим байтами, например, SDA 0502 означает поместить содержимое регистра А в ячейку памяти 0502 (запомнить), а при загрузке, наоборот, поместить в аккумулятор данные из ячейки памяти, адресуемой аналогично: например, LDA 0700 означает поместить содержимое ячейки памяти в регистр А (загрузить).

При непосредственном представлении возможна только загрузка данных.

команды косвенной адресации имеют однобайтный формат LDAXRp, STAXR, разрядный адрес Rp указывается парой регистров. Это может быть не только пара Н и L, но В и С либо D и Е. При загрузке адресация выполняется аналогично, но данные записываются в аккумулятор. по-английски cовместное исполь-зование двух регистров будет читаться как Extended Addressing, поэтому в мнемонические сокращения этих команд добавляется символ Х. Например LDAX H означает поместить в регистр А данные из ячейки памяти, адрес которой содержится в регистровой паре HL(загрузить), а STAX Н, наоборот, данные из регистра А поместить в ячейку памяти (запомнить) по адресу который содержится в регистровой паре HL.

Команды загрузки указателей памяти и запоминания данных. Для загрузки начальных значений во внутренние указатели памяти (инициализации) применяют трехбайтную команду с непосредственным представлением операнда LXIrp, где Rр означает регистровые пары ВС, DE, HL или указатель стека SP-Stack Pointer. Например, LХL H 0900 означает поместить в регистр L число 00, а в регистр Н – число 09, следовательно, в регистровую пару загрузить указатель на ячейку памяти 0900.

Для загрузки основного указателя памяти-регистров Н и L- из двух смежных ячеек памяти применяется команда LHLD - Load HL Direct. Запоминание содержимого регистровой пары Н и L в двух следующих друг за другом ячейках памяти осуществляется по команде SHLD - Store HL Direct. Обе эти команды трехбайтные, во втором и третьем байтах указывается полный 16-разрядный адрес ячейки, из которой загружается или в которую заносится содержимое регистра L (младшего байта). Адрес содержимого регистра Н (старшего байта) получают путем прибавления 1 к значению второго и третьего байтов команды.

Команды межрегистрового обмена. Особенностями микропроцессора КР.580ИK80A являются однобайтные команды передачи 16-битных операндов. Имеется специальная команда XCHG (сокращение английского слова Exshange), производящая обмен содержимым регистров DE и HL:

 

(H) ↔ (D), (L) ↔ (E).

 

В ряде случаев очень удобной оказывается специальная однобайтная команда XTHL (exchange HL):

(L) ↔ ([ SP ]), (H) ↔ ([ SP + 1 ]),

она выполняет обмен содержимым регистров HL и двух верхних ячеек стека, т. е. последних, загруженных в стек данных. Содержимое указателя стека при выполнении команды XTHL не изменяется. Кстати сказать, команда XTHL - самая длинная в системе команд микропроцессора КР.580ИK80A, для ее выполнения требуется 18 машинных тактов.

Содержание регистровой пары HL передается в указатель стека командой SPHL или в программный счетчик командой PCHL. Здесь, как и ранее, на первом месте стоит получатель информации (приемник), а на втором - источник данных.

Команды операций со стеком. Для установки указателя стека на начальное значение используют упомянутую ранее команду LXI SP. Благодаря такой установке в качестве стека может быть применена любая область оперативной памяти микропроцессорной системы.

Основными командами работы со стеком являются PUSH - занести (буквально «втолкнуть») в стек и POP (Pull up) - извлечь (вытянуть) из стека. Эти команды всегда оперируют с регистровыми парами, указанными в поле операнда команды. При выполнении команды PUSH в ячейку памяти с адресом (SP)-1 записывается содержимое восьми старших разрядов, а в ячейку с адресом (SP)-2 - восьми младших разрядов регистровой пары. Содержимое указателя стека уменьшится на 2, так как стек «растет вверх», в область меньших адресов. Когда выполняется команда POP Rр, содержимое верхушки стека передается в младшие разряды регистровой пары, а содержимое следующей ячейки стека - в старшие разряды той же регистровой пары.

Для правильной работы стека команды PUSH и POP обязательно должны быть парными. Соблюдение этого принципа ложиться полностью на программиста, так как процедуры загрузки в стек и извлечение из стека выполняются микропроцессором не автоматически, а только по командам в программе.

 

 

Команды обработки данных

Во всех командах, связанных с преобразованием (арифметическим и логическим) данных, в качестве подразумеваемого и потому неадресуемого операнда используется содержимое важнейшего внутреннего регистра микропроцессора-аккумулятора (А - регистра). Результат операции обычно также загружается в аккумулятор. Таким образом, аккумулятор является узловой точкой всех преобразований данных и основным рабочим регистром микропроцессора. Он выполнен как регистр-фиксатор (защелка), вход которого связан с выходом АЛУ, а выход подключается к одному из входов АЛУ.

Арифметические операции. Основная арифметическая операция - это сложение двоичных чисел. Кроме основной операции, имеется ряд команд, позволяющих выполнять вычисления с повышенной точностью. При этом, выполняя сложение, надо учитывать бит переноса, полученный в младших разрядах, а при выполнении вычитания-заём (borrow), сделанный в старших разрядах. Наличие переноса или заема указывается третьей буквой мнемонического сокращения (табл. 2.1).

Команды сложения с переносом ADC R и вычитания с заемом SBB R применяются в тех случаях, когда базовой длины слова микропроцессора недостаточно и приходится вводить многоразрядные числа с последовательной обработкой отдельных байтов. В памяти такие числа хранятся в смежных ячейках и адресуются по младшему байту.

Все команды арифметических операций, включая ADC R и SBB R, выполняются между данными в аккумуляторе и содержимым регистра или ячейки памяти, указанными в операндной зоне команды. Например, ADD r означает (А)+(r) → (A), содержимое А сложить с содержимым R, результат поместить в А.

Логические операции. Основные функции и их мнемонические сокращения приведены в табл. 2.1. Логические операции являются поразрядными, т.е. выполняются независимо друг от друга для всех восьми бит операндов. Первый неадресуемый операнд находится в аккумуляторе, там же остается результат операции. По результату операции модифицируются все триггеры состояния (флаги) кроме триггера переноса, который никогда не может быть установлен в единицу, поэтому принудительно сбрасывается.

 

Таблица 2.1. Команды арифметических и логических операций

 

Функция Перевод Мнемоника
Сложить Add ADD R
Сложить с учетом переноса Add+Carry ADC R
Вычесть Subtract SUB R
Вычесть с учетом займа Subtract-Borrow SBB R
Логическое И AND ANA R
Исключающее.xf.ott ИЛИ Exclusive OR XRA R
Логическое ИЛИ OR ORA R
Сравнить Compare CMP R

 

При выполнении команды ANA C (А) Λ (C) → А производиться поразрядная конъюнкция операндов (логическое ИЛИ): над содержимым регистра А и регистра С.

Данная команда часто применяется для проверки значения определенного слова в аккумуляторе с помощью другого слова - маски. Если, например, необходимо проверить состояние второго бита, то маска должна иметь вид 00000100. После выполнения команды ANA R по триггеру состояния Z можно судить о состоянии этого бита. Кроме того, с помощью команды ANA R, используя слово-маску, можно сбрасывать в 0 определенные биты слова в аккумуляторе, оставляя другие неизмененными.

Команда ORA r (A) V (r) → A, осуществляет поразрядную дизъюнкцию операндов (логическое ИЛИ) над содержимым регистра А и регистра R.

Эта команда применяется для установки определенных бит слова в аккумуляторе с помощью слова-маски. Она применяется также для сбрасывания одного слова из полей других слов. Например,

 

0 0 0 0 X3 X2 X1 X0

V

Y7 Y6 Y5 Y4 0 0 0 0

Y7 Y6 Y5 Y4 X3 X2 X1 X0

 

Такая операция часто называется «упаковкой» данных.

Команда исключающее ИЛИ (XRA R) (A) V (r) → A, производит поразрядное двоичное сложение операндов. Она применяется для инвертирования определенных битов с помощью слова-маски на основе тождества 1V X=X. Другое применение команды XRA R связано с проверкой слова на абсолютное равенство. В единственном случае, при совпадении операндов поразрядно , результат операции содержит нули во всех разрядах (X + Х=0), о чем свидетельствует значение триггера состояния Z = 1.

Команда сравнения СМР r производит вычитание значения адресуемого операнда из содержимого аккумулятора и модифицирует по результату значения всех триггеров состояния, но при этом не изменяет содержимого аккумулятора. Наличие в системе команд такого неразрушаемого сравнения упрощает, например, поиск в массиве заданного слова. Значение отыскиваемого слова загружается в аккумулятор, базовый адрес массива загружается в регистры HL, а затем с помощью команды СМР М элементы массива сравниваются со словом–эталоном. Факт равенства фиксируется по значению триггера Z = 1.

К логическим операциям можно отнести также однобайтные команды инвертирования (в английском буквально «дополнения») аккумулятора Complement Accumulator (СМА), иначе, (А)→ А, установки в 1 триггера переноса Set Carry (STC), или CY→ 1, и инвертирования (дополнения) триггера переноса Complement Carry (CMC): (CY)→ CY

Команды с непосредственным представлением операнда. с непосредственным представлением операнда, могут быть как арифметические, так и логические команды, все они имеют двухбайтный формат: вторым байтом является сам операнд. В мнемонике команд добавляется буква I (табл.2.2).

 

Таблица 2.2. Команды с непосредственным

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.