Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Командные языки. Понятие о машинном языке ассемблер

 

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

 

Рис. 4.5. Структура команды на языке Ассемблер

Состав команд микропроцессора (МП). МП может выполнять определенный набор команд, состав которых закладывается при его разработке. Например, МП фирмы INTEL выполняет 238 команд, типовой МП выполняет только 67 из них. Отдельные МП отличаются набором команд, их кодами, но принцип выполнения родственных команд не меняется.

Типовой МП содержит в основном шестнадцатиразрядные регистры, доступные программисту. Но два из этих регистров поделены каждый пополам. Их принято обозначать буквами А, В, Н и L. Обычно восьмиразрядный регистр А используется как регистр-аккумулятор, регистр В - как регистр состояния. Крайний левый бит регистра В используется в качестве индикатора переноса (если при выполнении операции возникает перенос в старший разряд, то в этом бите окажется записана единица, если переноса нет, то ноль). Правый крайний бит служит соответственно - индикатором нуля. Остальные биты регистра-индикатора в типовом микропроцессоре не используются.

Регистры Н и L - универсальные регистры адреса/данных. Они могут использоваться как раздельно для хранения любой информации, так и в форме пары регистров HL. В последнем случае они используются для хранения адресов.

Шестнадцатиразрядный счетчик команд используется для определения следующей команды добавлением к номеру предыдущей команды единицы. Указатель стека содержит адрес вершины стека, сам же стек находится в ОЗУ (стековой памяти).

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

При непосредственной адресации второй операнд находится непосредственно в команде, в которой он участвует.

При регистровой адресации второй операнд находится в регистре, на который есть указание в команде

При косвенной адресации в строго определенных регистрах (обычно это регистры Н и L) находится адрес ячейки памяти, в которой расположен второй операнд.

Команды могут содержать адреса одного, двух или всех трех операндов. В зависимости от количества адресов операндов в команде различают одно-, двух - и трехадресные команды. Трехадресная команда содержит адреса всех операндов, участвующих в операции. Двухадресная команда содержит только адреса исходных операндов, результат выполнения операции размещается в заранее оговоренном месте (аккумуляторе), которым обычно бывает адрес первого исходного операнда. В одноадресной команде приводится только адрес второго операнда, первый исходный операнд уже находится либо по известному (заранее оговоренному) адресу, либо в операционном поле (обычно в аккумуляторе), а результат выполнения операции размещается, как и в случае двухадресной команды, в аккумуляторе.

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

На рис. 4.6-а приведено содержимое ячеек памяти, являющееся фрагментом программы на машинном языке. Программа начинается с адреса 2000 и кода операции 0011 1110 и заканчивается адресом 2004.

а) б)

 

 

Рис. 4.6. Фрагмент программы на машинном языке

Программу в таком виде понять без специальной подготовки невозможно. В ней каждая операция представлена своим кодом в двоичной системе счисления, который достаточно сложен для восприятия, запоминания и использования. Более удобно применять не двоичный код операций, а записывать двоичные числа, используя их шестнадцатеричные аналоги. Для удобства записи программы данных в двоичном коде каждую тетраду заменяют шестнадцатеричной цифрой. Программа становится проще для восприятия, но для понимания человеком она сложна (рис. 4.6-б).

Более приемлема форма, когда каждое действие (операция) расшифровывается словами, например:

1) загрузить двоичное число в аккумуляторе;

2) инвертировать каждый бит числа в аккумуляторе;

3) поместить результат из аккумулятора в ячейку с адресом.

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

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

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

Например, на языке ассемблера мнемоника СМА означает команду «инвертировать содержимое аккумулятора». В ходе выполнения команды происходит ее преобразование (транслирование) на язык машинных кодов специальной программой (транслятором) или оператором (рис. 4.7). Коды букв мнемоники команды инвертирования содержимого аккумулятора, транслятор преобразует в код машинной команды.

 

 

Рис. 4.7. Транслирование программы на язык машинных кодов

Буквой Н в машинном коде принято обозначать тот факт, что символ выражается четырьмя двоичными цифрами в шестнадцатеричной системе счисления, например, 2FH или 2F16.

Программа на языке ассемблера содержит 4 поля:

1) поле метки используется при организации переходов в программе. Это поле используется не всегда и в программе может оказаться незаполненным;

2) поле мнемоники содержит мнемонику выполняемой операции;

3) поле операторов содержит информацию о регистрах, данных и адресах, объединенных в выполняемые операции;

4) поле комментариев позволяет понять логику программы.

Используя только поля мнемоники и операндов, ассемблер может сформировать код команды на машинном языке. Для организации выполнения программы используются первые 3 поля. Поле комментариев ассемблером не учитывается и является вспомогательным для оператора, чтобы облегчить ему отслеживание выполнения программы и ее корректирование. Образец программы на языке ассемблера приведен в табл.4.1.

Таблица 4.1

Метка Мнемоника Операнд Комментарии
  MUI A, B416 Загрузить в аккумулятор (A) данные B416, следующие непосредственно в команде (за КОПом)
  CMA   Инвертировать содержимое аккумулятора (А)
  SIA 210016 Разместить содержимое аккумулятора (А) по адресу 210016
  HLT   Остановить микропроцессор

 

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

Таблица 4.2

Адрес 16-код Содержимое 16-код Метка Мнемо-ника Операнд Комментарии
  3E   MUI A, B416 Загрузить в аккумулятор (A) данные B416, следующие непосредственно в команде (за КОПом)
  B4        
  2F   CMA   Инвертировать содержимое аккумулятора
      SIA 210016 Разместить содержимое аккумулятора (А) по адресу 210016
           
           
      HLT   Остановить микропроцессор

 

Код операции MUI размещается в одной ячейке памяти (200016), операнд, используемый при загрузке, - в следующей за ней (200116). Буквой А обозначен аккумулятор, куда производится загрузка. Команда СМА содержит только КОП и размещается в одной ячейке памяти (200216). Команда SIA - КОП (200316), но для записи адреса ячейки памяти, куда следует разместить содержимое аккумулятора (210016 - адрес представлен в шестнадцатеричной системе счисления, каждая цифра которого представляется четырьмя двоичными цифрами), требуется 2 ячейки памяти (200416 и 200516), причем в первой из них хранится младший байт (00), а во второй - старший байт (21) адреса.

Программу, состоящую из символических команд (как показано в таблице 4.1), часто называют исходной программой, а программу, переведенную на язык машинных кодов (таблица 4.2), - объектной программой.

Все команды микропроцессора можно разделить на семь категорий: арифметические, логические, команды передачи данных, ветвления, вызова подпрограмм, возврата из подпрограмм и прочие.

Арифметические операции. В арифметических операциях обычно участвуют два операнда, поэтому в команде они должны быть определены. Первый операнд находится в аккумуляторе и его адрес указывать не требуется. При определении второго операнда могут использоваться разные способы определения его адреса [54].

Рассмотрим команды сложения. Все команды сложения сведены в таблице 4.3. Две первые буквы мнемоники кода операции сложения AD. Коды операций записываются двумя шестнадцатеричными цифрами, на что указывает буква Н кода операции.

Таблица 4.3

Операция Адресация Мнемо-ника КОП Бай- ты Формат команд Символика
Сложить A с данными Непосредственная ADI C6H   КОП данные (А)¬(А)+(байт 2)
Сложить L с A Регистровая ADDL 85H   КОП (А)¬(А)+(L)
Сложить H с A Регистровая ADDH 84H   КОП (А)¬(А)+(H)
Сложить LOC (HL) с A Косвенная регистровая ADDM 86H   КОП (А)¬(А)+((H) (L))
Вычесть данные с А Непосредственная SUI D6H   КОП данные (А)¬(А) - (байт 2)
Вычесть L из A Регистровая SUBL 95H   КОП (А)¬(А) - (L)
Вычесть H из A Регистровая SUBH 94H   КОП (А)¬(А) - (H)
Вычесть LOC (HL) из A Косвенная регистровая SUBM 96H   КОП (А)¬(А) - ((H) (L))
Инкремент А Регистровая INRA 3CH   КОП (А)¬(А)+1
Инкремент HL Регистровая INXH 23H   КОП (А)¬(А)+1
Декремент А Регистровая DCRA 3DH   КОП (А)¬(А)-1
Декремент HL Регистровая DCXH 2BH   КОП (HL)¬(HL)-1
Сравнить A с данными Непосредственная CPI FEH   КОП данные (А)¬(байт 2)
Сравнить A с L Регистровая CMPL BDH   КОП   (А)¬(L)
Сравнить A с H Регистровая CMPH     КОП   (А)¬(H)
Сравнить A с LOC (HL) Косвенная регистровая CMPM     КОП   (А)¬((H)(L))

 

При непосредственной адресации складывается содержимое аккумулятора А с данными, содержащимися в команде. Мнемоника команды ADI, команда размещается в двух байтах: в одном байте записывается КОП (в данном случае С616), во втором - данные. Результат выполнения операции будет размещен в аккумуляторе, что символически можно изобразить

(А) ¬ (А) + (байт 2).

Эту запись следует понимать так: сложить операнды, первый из которых находится в аккумуляторе (А), второй - во втором байте команды (байт 2) и результат поместить в аккумулятор (А).

При регистровой адресации первый операнд находится в аккумуляторе, второй - в одном из регистров - Н или L, на что указывает последняя буква мнемоники команды: если второй операнд находится в регистре L, то мнемоника команды ADDL (см. рис. 4.8), если в регистре Н, то мнемоника ADDH.

Соответственно символическая запись команды имеет вид

(А) ¬ (А) + (L) или (А) ¬ (А) + (Н)

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

(A) ¬ (A) + ((H)(L))

при обозначении второго операнда в скобках записаны не только регистры Н и L, но и их объединение, что означает: при определении второго операнда следует использовать содержимое регистров как адрес, по которому в памяти размещается информация о втором операнде.

Рис. 4.8. Операция сложения с регистровой адресацией

 

Логические операции. Это операции «И» (конъюнкция), «ИЛИ» (дизъюнкция), «ИЛИ исключающие» (сумма по модулю 2), «НЕ» (инверсия), сдвиг влево или вправо. В логических операциях также могут использоваться любые из рассмотренных типов адресации. Выполнение логических операций ведет к смене содержимого аккумулятора в соответствии с результатом ее выполнения. Команды логических операций приведены в таблице 4.4.

Таблица 4.4

Операция Адресация Мнемо-ника КОП Бай- ты Формат команд Символика
A И данные Непосредственная ANI E6H   КОП данные (А)¬(А)*(байт 2)
A И L Регистровая ANAL A5H   КОП (А)¬(А)*(L)
A И H с А Регистровая ANAH A4H   КОП (А)¬(А)*(H)
A И LOC (HL) Косвенная регистровая ANAM A4H   КОП (А)¬(А)*((H) (L))
A ИЛИ данные Непосредственная ORI F6H   КОП данные (А)¬(А)*(байт 2)
A ИЛИ L Регистровая ORAL B5H   КОП (А)¬(А)*(L)
A ИЛИ H с А Регистровая ORAH B4H   КОП (А)¬(А)*(H)
A ИЛИ LOC (HL) Косвенная регистровая ORAM B6H   КОП   (А)¬(А)*((H) (L))
A (ИЛИ исключающее) данные Непосредственная XRI EEH   КОП данные (А)¬(А)+(байт 2)
A (ИЛИ исключающее) A Регистровая XRAA AFH   КОП   (А)¬(А)+(A)
A (ИЛИ исключающее) L Регистровая XRAL ADH   КОП   (А)¬(А)+(L)
A (ИЛИ исключающее) H Регистровая XRAH ACH   КОП (А)¬(А)+(H)
A (ИЛИ исключающее) LOC (HL) Косвенная регистровая XRAM AEH   КОП (А)¬(А)+((H) (L))
Инвертировать А Неявная CMA 3CH   КОП (А)¬(А)
Сдвиг А вправо Неявная RAR 3DH   КОП  
Сдвиг А влево Неявная RAL 2BH   КОП  

 

Команды передачи данных. Эти команды организуют передачу данных из регистра в регистр (см. рис. 4.9), размещение их в памяти, размещение извлеченных из памяти данных в регистрах и в устройствах ввода-вывода (таблица 4.5).

 

 

Рис. 4.9. Пересылка данных из регистра L в аккумулятор А

 

Таблица 4.5

Операция Адресация Мнемо-ника КОП Бай- ты Формат команд Символика
Передать L в A Регистровая MOV A, L 7DH   КОП (А)¬(L)
Передать H в A Регистровая MOV A, H 7DH   КОП (А)¬(H)
Передать A в L Регистровая MOV L, A 6FH   КОП (L)¬(A)
Передать A в H Регистровая MOV M, A 57H   КОП (H)¬(A)
Загрузить А данными Непосредственная MVIA 3EH   КОП данные (А)¬байт 2 команды
Загрузить L данными Непосредственная MVIL 2EH   КОП данные (L)¬байт 2 команды
Загрузить H данными Непосредственная MVIH 36H   КОП данные (H)¬байт 2 команды
Загрузить LOC (HL) в A Косвенная регистровая MOV A, M 7EH   КОП   (А)¬((H)(L))
Загрузить HL данными представлен-ными команде Непосредственная LXIH 21H   КОП мл. байт ст. байт   (L)¬байт 2 (H) ¬байт 3 команды

 

<== предыдущая лекция | следующая лекция ==>
Организация памяти ЭВМ | Этапы разработки программы на языке ассемблера
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 1741; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.035 сек.