8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 11 12 13 14 15 16 17 ... 39

( Программа на Бейсике (Программа на языке машинных команд

«Кирпичик» программы -оператор

Запись в удобной для пользователя форме

Длинную последовательность

команд можно записать с помощью одного оператора

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

Оператор

Оператор

Оператор

Оператор

Оператор

Оператор

Операто,

Оператор

Оператор

«Кирпичик» программы -

команда

Указание,

которое ЦПУ

может

выполнить сразу -

Трудно запомнить без

соответствующих навыков

Команда

Команда

Команда

Команда

Команда

Команда

Команда

Команда

Команда

Скорость программирования высокая

Скорость программирования низкая

Рис. 5.2. Структура программы на языке Бейсик и программы на языке машинных команд

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

В качестве языка программирования контроллеров обычно используется язык Си. По сравнению со многими другими распространенными языками программирования язык Си наиболее близок к языку машинных команд.

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

рассчитывали. Правильно составленная программа на языке Си будет также исправно работать с любым другим процессором.

Однако в этой главе, чтобы разобраться в работе процессора, мы рассмотрим другой метод программирования - язык ассемблера, который, как нам кажется, позволяет легко проследить «механизм» выполнения операций микрокомпьютером. В ассемблере машинный код преобразуется в буквенные аббревиатуры, «прозрачно» напоминающие программисту функцию каждой команды. Об этом более подробно будет рассказано в следующем разделе (5.2). В отличие от универсального языка Си язык ассемблера имеет несколько модификаций, соответствующих конкретным типам процессоров. Это означает, что программу, написанную на языке ассемблера для одного процессора, нельзя использовать для процессоров более поздних разработок. Тем не менее мы полагаем, что изучение основ языка ассемблера, написанного для процессора Z80, окажется полезным при освоении других языков программирования, в том числе и при составлении программ на языке Си. В данном случае язык ассемблера ЦПУ Z80 нам нужен не ради изучения самого языка. Главная задача заключается в том, чтобы понять, каким образом процессор, который может «считать только до двух», оперируя «ноликами» и «единичками», быстро и без ошибок выполняет разнообразные достаточно сложные операции.

g 2Структурная единица машинного

О*ТОМ ЧТО ТАКОЕязыка - команда. Существует несколь-

«МНЕМОНИКА»ко сотен команд, причем они незначи-

И КАК ОНА ЗАМЕНЯЕТ тельно различаются в зависимости от МАШИННЫЙ КОДтипа ЦПУ. Каждая команда, как нам

известно, представляет собой комбинацию сигналов «О» и «1». Минимальная длина одной команды - 8 раз-Рядов (1 байт), максимальная - 32 разряда (4 байта). Когда в память Микрокомпьютера заносится команда (Рис. 5.3), то по одному адресу (в одну ячейку памяти) можно поместить число размером не более (и Не менее) чем в один байт. Поэтому при записи «длинных» машинных команд в память ЦПУ их нужно «порезать» на куски «длиной» в один байт и последовательно разместить в ячейках памяти.

Рассмотрим конкретные примеры машинных команд. Напри-Мер, если команду «сложить А и В» представить двоичным числом,


Адрес О О О О Н

О 0 0 5 Н

О 0 1 1 Н О 0 1 2 Н

О О 2 А Н О О 2 В Н О О 2 С Н

Содержимое

Шестнадцатеричные числа

1-байтовая команда

2-байтовая команда

3-байтовая команда

Команды делятся на байты и заносятся в память

Рис. 5.3. Размещение команд в памяти ЦПУ

то получим: «10000000». Команда «переслать А в порт вывода по адресу 1» занимает 2 байта и записывается как: «11010011 00000001». Поскольку запись команд в двоичной системе весьма неудобна (приходится записывать большое количество символов), команды машинного языка обычно представляют шестнадцатеричными числами. Рассмотренные выше команды в шестнадцатеричной форме записи принимают следующий вид: «80Н» и «D301H».

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

Ассемблер - как раз один из тех методов записи команд, который выражает их смысл несколькими символами в форме, удобной для запоминания. Например, команда «ADD А, В» представляет собой сокращенную запись английской фразы «ADD В to А», что означает «прибавить В к А». Соответственно команда «послать содержимое регистра А в порт вывода по адресу 1» в переводе на язык ассемблера записывается примерно так: «Output A to port 1». Только в языке ассемблера она сокращается до выражения «OUT (01Н), А». Все команды языка ассемблера полностью соответствуют машинным командам, в частности команда «ADD А, В» соответствует команде «80Н», a «OUT (01Н), А» - «D301H».

Язык ассемблера построен по так называемому «мнемоническому» принципу. (Слово «мнемоника» в русском языке означает «техника запоминания».) Действительно, сокращения типа «ADD», «OUT» вызывают (у тех, кто немного знаком с английским языком) ассоциации, способствующие запоминанию команд языка программирования. Согласитесь, это гораздо проще, чем запомнить сотню двоичных чисел с разрядностью не менее 8.

«Раскусив» достоинства языка ассемблера, мы сначала составляем программу именно на нем. Затем по таблице соответствия преобразуем команды ассемблера в машинные команды. Такой процесс преобразования называется ручным «ассемблированием». Но лучше поручить процедуру этого преобразования самому компьютеру. Программа преобразования ассемблера в машинный язык называет-

Ассемблер - мнемонический аналог машинного языка

Машинный языкСмысл командыАссемблер

80

(10000000)

D301 (11010011 00000001)

Add В to А

Прибавить В к А

Output A to port 1

Послать содержимое А в порт 1

ADDA, В

OUT (01Н),А

( Числовой код )

Сокращенную запись легче запомнить, чем числовой код.

Одному числу соответствует один символ

(Сокращенная запись)


ся программой «дисассемблирования». Она занимает в памяти ЦПУ всего несколько Кбайт и, следовательно, не слишком «обременяет.» микрокомпьютер. Целесообразно использовать программу дисассемблирования, которая разрабатывается для каждого конкретного типа микропроцессора фирмой-производителем.

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

На Рис. 5.4 показана структура команды языка ассемблера. Единичная команда состоит из мнемонического кода команды, соответствующего глаголу английского языка, и обозначений «операндов» - объектов, над которыми производится операция.

Существует около 70 видов мнемонических кодов команд типа «ADD», «OUT» и т. д. «А, В» или «(01Н), А» - это операнды. Операнд, записанный сразу после кода команды, называется первым операндом; после первого через запятую записывается второй операнд. Однако бывают команды и без операндов. Если при одинаковых мнемонических кодах команд операнды различны, то и соответствующие им машинные команды, естественно, отличаются.

Структура команды языка ассемблера

Команда = глагол + объект

МнемоническийОперанды

код команды

Пример: команда сложения = ADDА, В

Команда вывода = OUT(01Н),А

Мнемонический код команды .........Выражает смысл операции: ADD, OUT.

Сокращение из 2...4 букв («мнемокод»)

Операнды.........Некоторые команды используются без

операндов. Операнды разделяются запятой Используемые символыБуквы английского Цифры 0...9,

алфавита A...Z, запятая, двоеточие, скобки точка с запятой

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

Таким образом, используя 70 различных кодов операций и комбинируя операнды, можно составить порядка 700 команд, соответствующих различным машинным командам.

Если мы хотим научиться общению с иностранцами на английском языке и уметь выражать свои просьбы, намерения, идеи и чувства, мы должны знать значения большого количества слов и выражений. В сравнении с этим задача общения с компьютером куда более простая. Достаточно знать значения и правила употребления всего лишь 70 символических сокращений, чтобы однозначно «объяснить» компьютеру порядок действий при выполнении какой-либо конкретной задачи.

Команды языка ассемблера (будучи «двойниками» машинных команд) разработаны, исходя из устройства и принципа работы ЦПУ микрокомпьютера. Поэтому для понимания смысла команд этого языка важно знать, в каком порядке процессор выполняет каждую из них.

g 2Как мы уже неоднократно говори-

СХЕМА ВЫПОЛНЕНИЯ ли программа - это последователь-КОМАНДЫность команд, которую должен выпол-

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

Основные этапы выполнения команды = операция чтения + операция декодирования + операция выполнения

Выполнение программы - это многократное повторение этих трех основных этапов.

Во второй главе мы получили основные сведения об устройстве ЦПУ (Рис. 2.5), одним из элементов которого является 16-разрядный регистр, называемый счетчиком команд или программным счетчиком (PC). Счетчик команд указывает адрес очередной команды, выполняемой процессором. ЦПУ, установив на шине адреса 16-разрядное числовое значение, указанное счетчиком команд, выполняет операцию считывания информации по этому адресу (точнее, из ячейки памяти, имеющей данный адрес). Затем с помощью дешиф-



0 ... 11 12 13 14 15 16 17 ... 39