ПОИСК Статьи Чертежи Таблицы Уровни программирования из "Отладка микропроцессорных систем " Выпускаются некоторые микросхемы, например секционные микропроцессоры, в которых микрокодирование (или микропрограммирование) доступно пользователю. Основными причинами такого подхода являются либо желание эмулировать существующую машину путем микропрограммирования ее системы команд, либо необходимость реализации системы команд, которой нет в существующих машинах. Являясь внутренним языком ЦП, микрокод прозрачен для пользователя, который оперирует командами, соответствующими макроуровню машинного кода. [c.32] В общем, когда пользователь не преследует цель создания своей оригинальной системы команд, низшим уровнем программирования для него остается машинный код. Программирование на машинном коде оказывается утомительным занятием и сопровождается большой вероятностью появления ошибок, так как каждую команду нужно вводить в машину в виде последовательности чисел, а ошибочный код операции ведет к нежелательным последствиям. Если неправильно введено значение данных, то возникает так называемый сбой с получением неверного результата. Сама машина не выходит из строя, но результаты оказываются совершенно неожиданными. [c.32] Ассемблерные программы имеют однозначное соответствие с командами машинного кода и столь же эффективны. Язык АССЕМБЛЕР обеспечивает и другие удобства программирования, например, использование в текстах программ меток для адресов и символических имен для значений переменных вместо их действительных значений. Начальный адрес программы определяется только в процессе ассемблирования, поэтому в одном прогоне программа запускается с одного адреса, но если этот же программный сегмент позднее применяется в другой программе, то его начальный адрес можно изменить. В связи этим ассемблерная программа называется ПЕРЕМЕСТИМОЙ, так как в процессе ассемблирования, превращающего ее в эквивалентный машинный код, программу можно разместить, начиная с любого требуемого адреса. [c.33] Компьютер может выполнять только команды машинного языка, поэтому программу на языке высокого уровня требуется преобразовать (транслировать) в эквивалентные последовательности команд машинного кода. Трансляция оказывается не особенно эффективной процедурой по длине получающейся программы на машинном языке, которую почти всегда можно написать более компактной и быстрой, пользуясь машинным кодом. Однако этот недостаток более чем компенсируется меньшими затратами времени на программирование с привлечением языка высокого уровня. [c.34] Бивалентную последовательность команд машинного кода, а затем исполняет эти команды. Закончив с одной строкой, интерпретатор переходит к следующей, транслирует и выполняет ее. В компьютере не существует машинного кода для всей законченной программы, поэтому при новом выполнении той же самой программы интерпретатор должен вновь транслировать ее строка за строкой. Интерпретаторы особенно неэффективны, когда повторяющаяся последовательность операций выпоянч-ется в нескольких местах программы. В идеальном случае такую последовательность следует вычленить из основного тела программы и оформить в виде подпрограммы, которая вызывается по мере необходимости. Вместе с тем программа-интерпретатор и интерпретируемая прикладная программа занимают малый объем памяти системы. Интерпретаторы оказываются также относительно медленными, так как каждую строку программы необходимо транслировать отдельно. [c.35] Компилятор сразу транслирует всю программу в эквивалентный машинный код, запоминает его и затем выполняет. Следовательно, компилятор нужен только для преобразования прогцаммы в машинный код, а при его выполнении не требуется. Процесс компилирования является относительно продолжительным, он занимает несколько минут для трансляции даже простых коротких программ требует множества длинных и сложных программ, которые в памяти компьютера одновременно не могут быть размещены. Поэтому для хранения компилятора нужна внешняя память, например накопитель на гибком диске, и компилятор загружается в память компьютера частями, каждая из которых выполняет свои конкретные операции. Достоинство компилированного варианта программы заключается в том, что она существует как полная программа в машинном коде и выполняется быстрее, чем с использованием интерпретатора. Некоторые компиляторы отыскивают в программе общие блоки и оформляют их в виде подпрограмм, что помогает значительно сократить длину прикладной программы. [c.35] Вернуться к основной статье