Формат данных и структура команд языка ассемблер Тема 2.5 Основы программирования процессора С увеличением длины программы все труднее становится запомнить коды различных операций. Некоторую помощь в этом отношении оказывают мнемонические обозначения. Язык символического кодирования команд называется ассемблером. Язык ассемблер – это язык, в котором каждое высказывание соответствует ровно одной машинной команде. Ассемблированием называется преобразование программы с языка ассемблера, т. е. подготовка программы на машинном языке путем замены символических имен операций на машинные коды, а символических адресов – на абсолютные или относительные номера, а также включение библиотечных программ и генерация последовательностей символических команд путем указания конкретных параметров в микрокомандах. Данная программа обычно размещается в ПЗУ или вводится в ОЗУ с некоторого внешнего носителя. Язык ассемблер имеет несколько особенностей, отличающих его от языков высокого уровня: 1. Это взаимно однозначное соответствие между высказываниями языка ассемблера и машинными командами. 2. Программист на языке ассемблера имеет доступ ко всем объектам и командам, присутствующим на целевой машине. Представление об основах программирования на машинно-ориентированных языках полезно для: - лучшего понимания архитектуры ПК и более грамотного использования компьютеров; - для разработки более рациональных структур алгоритмов программ решения прикладных задач; - возможности просмотра и корректировки исполняемых программ с расширением .exe и .com, компилированных с любых языков высокого уровня, в случае утраты исходных программ (вызвав указанные программы в отладчик программы DEBUG и декомпилировав их отображение на языке ассемблера); - составления программ решения наиболее ответственных задач (программа, составленная на машинно-ориентированном языке, обычно эффективнее – короче и быстрее процентов на 30-60 программ, полученных в результате трансляции с языков высокого уровня) - для реализации процедур, включаемых в основную программу в виде отдельных фрагментов в том случае, если они не могут быть реализованы ни на используемом языке высокого уровня, ни с использованием служебных процедур ОС. Программа на языке ассемблера может работать только на ЭВМ одного семейства, а программа, написанная на языке высокого уровня, потенциально может работать на разных машинах. Алфавит языка ассемблера составляют символы ASCII. Числа только целые. Различают: - двоичные числа, заканчиваются буквой В; - десятичные числа, заканчиваются буквой D; - шестнадцатеричные числа, заканчиваются буквой Н. Оперативная память, регистры, представление данных Для определённой серии МП используется индивидуальный язык составления программ – язык ассемблер. Язык ассемблер занимает промежуточное положение между машинными кодами и языками высокого уровня. Программировать на этом языке проще. Программа на языке ассемблер более рационально использует возможности конкретной машины (точнее МП), чем программа на языке высокого уровня (который более прост для программиста, чем ассемблер). Основные принципы программирования на машинно-ориентированных языках рассмотрим на примере языка ассемблер для МП КР580ВМ80. Для программирования на языке используется общая методика. Конкретные же технические приемы записи программ связаны с особенностями архитектуры и системы команд целевого МП. Программная модель микропроцессорной системы на основе МП КР580ВМ80 Программная модель МПС в соответствии с рисунком 1 МП Порты Память B | C | | 05H | | 07FF | Управляющая программа (монитор) | ПЗУ | D | E | 06H | H | L | 07H | Демонстрационные программы | А | FL | | | | 0AFF | Область адресов для записи исследуемых программ | ОЗУ | SP | PC | | | | 0B00 0BB0 | Для записи данных исследуемых программ Cтек | FL Рисунок 1 С точки зрения программиста МП КР580ВМ80 имеет следующие программно-доступные регистры. А– 8-битовый регистр аккумулятор. Является главным регистром МП. Любая операция, выполняемая в АЛУ, предполагает размещение одного из операндов, подлежащих обработке, в аккумуляторе. Результат операции в АЛУ тоже обычно хранится в А. B, C, D, E, H, L – 8-битовые регистры общего назначения (РОН). Внутренняя память МП. Предназначены для хранения обрабатываемой информации, а также результатов операции. При обработке 16-разрядных слов из регистров образуют пары BC, DE, HL, причем сдвоенный регистр называется первой буквой – B, D, H. В регистровой паре старшим является первый регистр. Особым свойством обладают регистры H, L, используемые как для хранения данных, так и для хранения 16-разрядных адресов ячеек ОЗУ. FL– регистр флагов (регистр признаков) 8-битовый регистр, в котором сохраняются пять признаков результата выполнения арифметических и логических операций в МП. Формат FL в соответствии с рисунком Разряд С ( CY - carry) - перенос, устанавливается в 1, если был перенос из старшего разряда байта при выполнении арифметических операций. Разряд Р (parity) – четность, устанавливается в 1, если число единиц в разрядах результата четно. Разряд АС – дополнительный перенос, предназначен для хранения значения переноса из младшей тетрады результата. Разряд Z (нуль) – устанавливается в 1, если результат операции равен 0. Разряд S (знак) – устанавливается в 1, если результат отрицательный, и в 0, если результат положительный. SP–- указатель стека, 16-разрядный регистр, предназначен для хранения адреса ячейки памяти, куда был записан последний введенный в стек байт. РС – программный счетчик (счетчик команд), 16-разрядный регистр, предназначен для хранения адреса следующей выполняемой команды. Содержимое счетчика команд автоматически увеличивается на 1 сразу же после выборки очередного байта команды. В начальной области памяти адреса 0000Н – 07FF располагается управляющая программа и демонстрационные программы. Это область ПЗУ. 0800 – 0АFF - область адресов для записи исследуемых программ. (ОЗУ). 0В00 – 0ВВ0 - область адресов для записи данных. (ОЗУ). 0ВВ0 – начальный адрес стека. (ОЗУ). Стек – специально организованная область ОЗУ, предназначенная для временного хранения данных или адресов. Число, записанное в стек последним, извлекается из него первым. Указатель стека хранит адрес последней ячейки стека, в которой записана информация. При вызове подпрограммы в стеке автоматически сохраняется адрес возврата в основную программу. Как правило, в начале каждой подпрограммы сохраняются в стеке содержимое всех задействованных при ее выполнении регистров, а в конце подпрограммы восстанавливают их из стека. Формат данных и структура команд языка ассемблер Память МП КР580ВМ80 представляет собой массив 8-ьитных слов, называемых байтами, Каждый байт имеет свой 16-разрядный адрес, определяющий его положение в последовательности ячеек памяти. МП может адресовать 65536 байт памяти, которая может содержать как в ПЗУ, так и в ОЗУ. Формат данных Данные хранятся в памяти в виде 8-битных слов: D7 D6 D5 D4 D3 D2 D1 D0 Младшим битом является бит 0, старшим – бит 7. Команда характеризуется форматом, т. е. числом отведенных для нее разрядов, которые разделены побайтно на определенные функциональные поля. Формат команд Команды МП КР580ВМ80 имеют одно, двух или трехбайтный формат. Многобайтные команды должны быть размещены в соседних ЯП. Формат команды зависит от особенностей выполняемой операции. Первый байт команды содержит код операции, записанный в мнемоническом виде. Он определяет формат команды и те действия, которые должны быть выполнены МП над данными в процессе ее выполнения, и способ адресации, а также может содержать информацию о нахождении данных. Во втором и третьем байтах могут находиться данные, над которыми производятся операции, или адреса, указывающие местонахождение данных. Данные, над которыми производятся действия, называются операндами. Формат однобайтовой команды в соответствии с рисунком 2 7 0 Рисунок 2 Формат двухбайтовой команды в соответствии с рисунком 3 Код операции | Операнд (адрес) | 7 0 15 8 Рисунок 3 Формат трехбайтовой команды в соответствии с рисунком 4 Код операции | Адрес (операнд). Младший байт адреса | Адрес (операнд). Старший байт адреса | 7 0 15 8 23 16 Рисунок 4 В командах на языке ассемблера код операции имеет сокращённую форму записи английских слов – мнемоническое обозначение. Мнемоника (от греческого mnemonic – искусство запоминания) позволяет легче запомнить команды по их функциональному назначению. Перед исполнением исходная программа переводится с помощью программы трансляции, называемой ассемблером, на язык кодовых комбинаций – машинный язык, в таком виде размещается в памяти МП и далее используется при выполнении команды. Методы адресации Все коды операндов (входные и выходные) должны где-то располагаться. Они могут находиться во внутренних регистрах МП (наиболее удобный и быстрый вариант). Они могут располагаться в системной памяти (самый распространенный вариант). Наконец, они могут находиться в устройствах ввода-вывода (наиболее редкий случай). Определение места положения операндов производится кодом команды. Существуют разные методы, с помощью которых код команды может определить, откуда брать входной операнд и куда помещать выходной операнд. Эти методы называются методами адресации. Для МП КР580ВМ80 существуют следующие методы адресации: - непосредственная; - прямая; - регистровая; - косвенная; - стековая. Непосредственная адресация предполагает, что операнд (входной) находится в памяти непосредственно за кодом команды. Операнд обычно представляет собой константу, которую надо куда-то переслать, к чему-то прибавить и т. д. данные содержатся во втором или во втором и третьем байтах команды, причем младший байт данных находится во втором байте команды, а старший – в третьем байте команды. Прямая (она же абсолютная) адресация предполагает, что операнд (входной или выходной) находится в памяти по адресу, код которого находится внутри программы сразу же за кодом команды. Используется в трехбайтовых командах. Регистроваяадресация предполагает, что операнд (входной или выходной) находится во внутреннем регистре МП. Используется в однобайтовых командах Косвенная(неявная)адресация предполагает, что во внутреннем регистре МП находится не сам операнд, а его адрес в памяти. Стековая адресация предполагает, что команда не содержит адрес. Адресация к ячейкам памяти по содержимому 16-разрядного регистра SP (указателя стека). Система команд Система команд МП – это полный перечень элементарных действий, которые способен производить МП. Управляемый этими командами МП выполняет простые действия, такие как элементарные арифметические и логические операции, пересылку данных, сравнение двух величин и др. Число команд МП КР580ВМ80 - 78 (с учетом модификаций 244). Различают следующие группы команд: - передачи данных; - арифметические; - логические; - команды перехода; - команды ввода-вывода, управления и работы со стеком. Символы и сокращения, применяемые при описании команд и составлении программ Символ | Сокращение | ADDR | 16-битовый адрес | DATA | 8-битовые данные | DATA 16 | 16-битовые данные | PORT | 8-битовый адрес УВВ (устройства ввода-вывода) | BYTE 2 | Второй байт команды | BYTE 3 | Третий байт команды | R, R1, R2 | Один из регистров: A, B, C, D, E, H, L | RP | Одна из регистровых пар: В - задает пару ВС; D - задает пару DE; H – задает пару HL | RH | Первый регистр пары | RL | Второй регистр пары | Λ | Логическое умножение | V | Логическое сложение |  | Сложение по модулю два | М | Ячейка памяти, адрес которой задаёт содержимое регистровой пары HL, т. е. М = (HL) | |