М.Х. Джонс - Электроника практический курс (1055364), страница 83
Текст из файла (страница 83)
В дальнейшем документирование можно осуществлять также средствами Бейсика, то есть пометкой КЕМ (КЕМагк, замечание). Вот наша программа сложения на языке ассемблера, готовая для непосредственного ввода в микроЭВМ ВВС М!его: !О МОРЕ 6: КЕМ установка режима работы дисплея 20 Р%=я70; КЕМ установка программного счетчика на ячейку памяти к70 30 ВОХР)»[Е=Й80: ВОХТ««0=8г81; 81)МВОХ=Й82: КЕМ определение ячеек памяти для меток 40 [ 50 .АРРЕК / метка, задающая начало подпрограммы 60 ЕРА ВОХО)ЧЕ / загрузить первое число в аккумулятор из ячейки памяти ВОХР)ЧЕ 70 С1С / сбросить признак переноса в ноль 80 АРС ВОХТ»«О / прибавить второе число из памяти ВОХТ»УО к содержимому аккумулятора 90 8ТА Я)МВОХ / сохранить эту сумму чисел в ячейке памяти 81)МВОХ !00 КТ8 / конец части программы на языке ассемблера; возврат в Бейсик !!О [ Введя эту программу, наберите К1))»[, чтобы запустить ее обычным способом.
Это приведет, по существу, к тому, что программа будет оттранслирована: на экране появится текст программы в машинном коде, причем коды операций и операнды будут аккуратно выведены в соответствующих столбцах. Теперь мы должны поместить наши числа, которые нужно сложить, в соответствующие ячейки памяти, помня о том, что у нас имеется удобная возможность называть их по именам; например, ?ВОХО[ЧЕ = 13 Программные средсава 455 ?ВОХТУ«О = 19 Чтобы запустить программу в машинном коде, наберите САЬЬ А1313ЕК, и посмотрите результат в ЯЗМВОХ, то есть РКРТ ? ЯЗМВОХ На экране появится ответ. 14.7.6 Языки высокого уровня Мы только что убедились в том, что хотя язык ассемблера много ближе к языку человека, нежели машинный код, он все же скучен и утомителен, когда все сводится к простой арифметической операции.
В частности, он не вполне удобен для приема данных с клавиатуры и вывода их на экран и, на самом деле, слишком подчеркивает сложность этих простых действий, которые нам хотелось бы иметь готовыми. Сегодня при программировании в большинстве случаев пользуются языком высокого уровня, из которых самым распространенным на домашних компьютерах является Бейсик; в профессиональных приложениях популярны другие языки, такие как С и С++. Программисту, пишушему программы на языке высокого уровня, нужны минимальные знания того, как в деталях работает процессор, либо не нужны вовсе; для него все необходимые регистровые операции и обработка признака переноса выполняются автоматически.
Команды имеют вид осмысленных выражений на английском языке или математических операторов, а замечания и комментарии можно включать совершенно свободно, предваряя их пометкой КЕМ. Данные можно легко ввести с клавиатуры, не заботясь о помешении их в определенную ячейку памяти, а результаты вывести на экран дисплея или распечатать. С использованием Бейсика нахождение нашей суммы почти тривиально по своей простоте.
Введите с клавиатуры: РК1НТ ! 3+19 Компьютер откликнется на это, показав ответ: 32 В программу на Бейсике легко добавить в качестве дальнейшего усовершенствования приглашение пользователю ввести его собственные числа, которые надо сложить. Надпись, выводимую на экран оператором РК1НТ, можно в дополнение к ответу украсить указателем «СУММА =». 1О КЕМ ПРОГРАММА СЛОЖЕНИЯ ДВУХ ЧИСЕЛ 20 1НРЫТ «ВВЕДИТЕ ПЕРВОЕ ЧИСЛО»; А 30 1ХРЫТ «ВВЕДИТЕ ВТОРОЕ ЧИСЛО»; В 456 МикроЭВМ и их применения 40 РК1НТ «СУММА =«; А + В 50 ЕЛО Наберите К13гч, и вы увидите, как эта простая программа делает компьютер машинкой для сложения.
Мы видим, что можно не заставлять программиста ломать голову нал ячейками памяти и кодами операций: Бейсик оставляет детали за кулисами и допускает использование обычных алгебраических переменных, таких как А и В. Бейсик, как и другие языки высокого уровня, способен непосредственно воспринимать выражения типа ЯЗМ =А+ В так что выполнение математических операций становится исключительно простым.
В противоположность этому язык ассемблера удобен для быстрых пересылок и сортировки данных, а также для чтения и записи при взаимодействии с портами ввода и вывода, где сушественно использование определенных адресов. Большая часть компьютерных игр и видеоигр написана на языке ассемблера, так как в них в большом объеме происходит перемешивание данных и встречаются лишь простейшие вычисления и логические действия. С другой стороны, вычисление, например, такого выражения, как значительно быстрее запрограммировать на языке высокого уровня, чем на языке ассемблера. Трансляция программы с языка высокого уровня в машинный код, понятный процессору, является, ясное дело, довольно сложным процессом, требующим своей собственной специальной программы.
Интерпретатор может осуществлять этот процесс строка за строкой по мере исполнения программы; с помошью комлиллтора вся программа может быть оттранслирована до ее исполнения. В обшем случае, программа, написанная на языке, предусматривающем использование интерпретатора, например, на Бейсике, выполняется медленнее, чем программа, скомпилированная с такого языка, как С, из-за времени, затрачиваемого на интерпретирование во время исполнения.
Однако переделки быстрее производить в интерпретируемой программе, поскольку не требуется затрат времени на компиляцию программы заново перед ее исполнением. Хотя программа, оттранслированная с языка высокого уровня, может работать сравнительно быстро, все же программа в машинном коде, полученная из эквивалентной программы на языке ассемблера, обычно исполняется еше быстрее, так как для выполнения требуемых операций процессор используется в ней более эффективно. Однако в настояшее время программирование все больше осушествляется на языках высокого уровня из-за ясности выражений и логической структуры.
Эти два обстоятельства способствуют созданию сложных программ, работающих быстрее, а также по- Ввод в микроЭВМ и вывод из нее 457 могают обеспечить их надежность в работе и легкость модификации, если позднее возникает необходимость в изменениях. 14.8 Ввод в микроЭВМ и вывод из иее 14.8.1 Дешифриравание адреса На рис.
14.11 показано, что порты ввода и вывода, удовлетворяющие все потребности системы, располагаются на общих с остальной частью системы шинах адреса и данных. Однако во многих компьютерах отсутствует возможность прямого обмена логическими сигналами, а доступ к системе ограничен и его имеют только клавиатура, принтер и дисководы. В этом параграфе организация ввода/вывода рассматривается шире и результаты этого рассмотрения могут пригодиться при использовании персональных компьютеров семейства ! ВМ.
Одновременно читатель приобретет опыт дешифрирования адреса и применения логических элементов с тремя состояниями на выходе для подключения к шине данных. У некоторых процессоров, таких как !пге! 80486, имеются специальные средства обеспечения ввода н вывода, допускающие совместное использование шины адреса с памятью. Это достигается за счет дополнительного управляющего сигнала в системной шине, называемого залрасам ввада/вывода. Если данный сигнал имеет активное значение (обычно 0 В), то это означает, что шина данных потребовалась устройству ввода или вывода и любая память„доступ к ячейкам которой осуществляется по тем же адресным линиям, временно отключается, чтобы избежать искажения данных обусловленных конфликтам на шине.
Достоинство специально выделенной управляющей линии для ввода/вывода заключается в том, что при этом нет необходимости дешифрировать в порте ввода/вывода полный адрес, выставляемый процессором на шину адреса, длина которого может доходить до 32. Обычно бывает достаточно 16 разрядов, а иногда нет нужды в дешифрировании более 8 разрядов. При альтернативном подходе, который называется вводом/выводом согласно раслределеиию лаияши, линия запроса ввода/вывода не нужна, а просто группа адресов памяти выделяется для ввода/вывода.
Чтобы избежать конфликта на шине, нормально никакие ячейки памяти, как правило, не располагаются по этим адресам. У любого процессора ввод/вывод может быть организован согласно распределению памяти, но процессор 6502 и процессоры серии 68000, фактически, могут пользоваться только этим способом, поскольку у них нет линии запроса ввода/вывода. Адреса, используемые для ввода/вывода, обычно располагаются в карте распределения памяти вблизи одного из ее концов, чтобы избежать конфликта с программой и другими данными.
Отправной точкой при организации порта ввода или вывода является дешифрирование адреса. На рис. 14.13 приведен практический дешифрагпор адреса, который выра- 458 МикроЭВМ и их применения батывает логическую 1 на выходе только тогда, когда на входах с АО по А!5 действует сигнал о«НОЗОО. В двоичной форме выбранный нами адрес имеет вид ОООО 0011 0000 0000, и, потратив немного времени и усилий, нетрудно разобраться в том, как работает этот дешифратор.
15 14 ьз Рнс. 14.13. Лепзифратор адреса юи компьютеров семейства 1ВМ. Высокий уровень нд выходе возникает только в том случае, когда на входах действуют сигналы 0000 0011 0000 0000 (ВгНОЗОО). В некоторых приложениях могут быть нужны более гибкие дешифраторы адреса, которые можно было бы перестраивать на различные значения входных сигналов; для таких случаев полезен универсальный дешифратор, представленный на рис. 14.14. В нем применены схемы сравнения чисел 741585, каждая из которых дает логическую 1 на своем выводе 6, когда 4-разрядное число на входах «А» тождественно совпадает с 4-разрядным числом на входах «В».
Здесь входы «В» соединены с ключами, причем идеальными являются небольшие переключатели с двухрядным расположением выводов или поворотный переключатель на шестнадцать положений. Когда ключ замкнут, то 1-килоомный резистор, соединяюший данный вход с землей, обеспечивает логический 0 на этом входе. Выходы четырех схем сравнения обьединяются логическим элементом И (ИС 741521), на выходе которого и появляется дешифрированный сигнал. С помошью переключателей можно набрать любой требуемый !6-разрядный код адреса, и тогда сигнал на выходе будет иметь высокий уровень только в случае появления на входах АΠ— А15 точно такого же адреса, Как уже упоминалось, ради экономии в числе ИС и в площади, занимаемой дешифратором на печатной плате, принято дешифрировать только часть Ввод в микроЭВМ и вывод из нее 459 ло лн ЛЭЭ 411 ЛЭО 54 с аиы 1.