Язык ассемблера в радиоэлектронике

February 6, 2012 by admin Комментировать »

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

Двоичные коды, используемые процессором, очень далеки от человеческого языка, и любому программисту трудно и утомительно работать с машинным кодом. Эта проблема решается с помощью языка ассемблера, в котором машинный код преобразуется в буквенные аббревиатуры, выбранные так, чтобы напоминать программисту функцию каждой команды. Например, наша команда «загрузить аккумулятор» (LoaD Accumulator), которая в машинном коде записывается как &А5, преобразуется в LDA, что является разумной аббревиатурой данной функции. Имея в виду, что запись на языке ассемблера осуществляет напоминание, ее называют мнемонической.

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

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

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

Таблица 14.3.

Код операции

Операнд

Комментарий

.ADDER

 

/метка, задающая начало подпрограммы

LDA

BOXONE

/загрузить первое число в аккумулятор из ячейки памяти BOXONE

CLC

 

/сбросить признак переноса в ноль

ADC

BOXTWO

/прибавить второе число из ячейки памяти BOXTWO к содержимому аккумулятора

STA

SUM BOX

/сохранить эту сумму чисел в ячейке памяти SUMBOX

RTS

 

/конец этой части программы

Чтобы запустить программу, написанную на языке ассемблера, необходимо сначала запустить «дешифрующее» программное средство, называемое ассемблером, для преобразования мнемоники и меток в двоичный машинный код и удаления полей комментария. Затем оттранслированная программа в машинном коде запускается обычной инструкцией CALL, в которой теперь удобно сослаться на начальную метку программы, а именно CALL ADDER.

МикроЭВМ ВВС Micro содержит полезный ассемблер как часть встроенной операционной системы. В частности, ассемблер хорошо сопрягается со средствами языка Бейсик, так что части программы, написанные на языке ассемблера, могут быть вставлены в программу, написанную на Бейсике, только они должны быть заключены в пару квадратных скобок: [ ]. Обычно участку программы на языке ассемблера предшествуют одна или две строки на Бейсике. Прежде всего необходимо сообщить программному счетчику, откуда начинать, для чего переменной Р% присваивается номер ячейки памяти; затем мы определяем ячейки памяти для используемых меток. В дальнейшем документирование можно осуществлять также средствами Бейсика, то есть пометкой REM (REMark, замечание). Вот наша программа сложения на языке ассемблера, готовая для непосредственного ввода в микроЭВМ ВВС Micro:

10 MODE 6: REM установка режима работы дисплея

20 Р%=&70: REM установка программного счетчика на ячейку памяти &70

30 BOXONE=&80: BOXTWO=&81: SUMBOX=&82: REM определение ячеек памяти для меток

40 [

50       .ADDER /метка, задающая начало подпрограммы

сг\ , па d/^v/^xtc /загрузить первое число в аккумулятор из ячейки памя-

oU LDA dUAUJNE          П/лл//Л\ТГ

ти BOXONE

70       CLC   /сбросить признак переноса в ноль

80 ADC BOXTWO /прибавить второе число из памяти BOXTWO к содержимому аккумулятора

90 STA SUMBOX /сохранить эту сумму чисел в ячейке памяти SUMBOX

100  RTS           конец части программы на языке ассемблера; возврат в

Бейсик

110 ]

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

7BOXONE = 13

? BOXTWO = 19

Чтобы запустить программу в машинном коде, наберите CALL ADDER и посмотрите результат в SUMBOX, то есть

PRINT 7SUMBOX

На экране появится ответ.

Литература: М.Х.Джонс, Электроника — практический курс Москва: Техносфера, 2006. – 512с. ISBN 5-94836-086-5

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты