Машинные коды и ассемблер

Машинные коды и ассемблер

Разумеется, записывать программы в двоичных числах, которые ещё называются машинными кодами, неудобно (хотя когда-то это был единственный способ). Потому придумали более «человеческий» метод, когда инструкции записываются в виде буквенных мнемонических (т. е. запоминающихся путём образования искусственных ассоциаций) сокращений. Например, инструкция сложения выглядит как ADD (от англ. add — «прибавлять»), инструкция вычитания — как SUB (от subtract — «вычитать»), инструкция безусловного перехода — как JMP (от jump — «прыжок», «переход») и т. д. Регистры также получили буквенные обозначения, а вместо адреса инструкции в программе перед нужными командами стали ставить метки — произвольные сочетания символов, обычно складывающиеся в понятное по смыслу слово.
В таких обозначениях простая программа может выглядеть так:
MOV АХ,О Cycle:
ADD АХ,1 CMP АХ, 9 JLE Cycle
Эта программа представляет собой цикл, который выполнится ровно десять раз. До его начала в регистр под названием АХ записывается О (инструкция MOV от слова move, что значит «перемещать»). Затем стоит метка Cycle, помечающая команду сложения регистра АХ с единицей. После этого полученное значение регистра АХ сравнивается (СМР — от слова compare, т. е. «сравнивать») с числом 9. Инструкция JLE (сокращение от Jump if Less or Equal — «перейти, если меньше или равно») заставит опять начать с инструкции прибавления единицы, если в результате сравнения обнаружится, что ещё не достигнуто значение, большее 9- Если такое число достигнуто, то программа закончится. После её выполнения регистр АХ будет содержать число 10.


Сама по себе такая программа может показаться бессмысленной (проще сразу загрузить в АХ число 10), но внутри цикла мы можем, например, выполнить какие-то другие продуктивные действия, которые нам нужно почему-либо сделать ровно десять раз.
Каждая разновидность микропроцессора в силу своего устройства имеет собственную систему таких мнемонических обозначений, хотя во многом они у разных процессоров совпадают, да и принципы построения программ одни и те же. Язык программирования, оговаривающий мнемонические сокращения для инструкций данного процессора и правила их компоновки в законченные программы, получил название языка ассемблера. Под собственно ассемблером (что переводится как «сборщик») подразумевается специальная программа, которая преобразовывает текст на этом языке в набор машинных кодов. Программа-ассемблер также своя для каждой разновидности процессоров. Результат работы ассемблера и представляет всем знакомые исполняемые файлы — собственно программы, которые запускаются на компьютере (или, например, записываются в память микроконтроллеров, управляющих каким-то устройством). Заметим, что готовые библиотеки подпрограмм, от которых на современном этапе никуда не денешься, могут быть включены в исполняемый файл, а могут быть представлены в виде отдельных файлов.


Языки высокого уровня

Но записывать машинные коды в виде понятных инструкций программистам показалось мало — слишком громоздкие получаются программы на языке ассемблера, слишком много времени занимает их написание, слишком трудно их отлаживать, чтобы быть уверенным в том, что там нет серьёзных ошибок. Программы для современных ПК включают десятки, сотни тысяч, а то и миллионы команд. Потому пришлось придумать другие языки, которые упрощают процедуру составления программ, — называются они языками высокого уровня.
Как всякий язык, любой язык программирования имеет семантику (т. е. смысловое содержание операторов) и синтаксис (правила компоновки этих операторов в тексте программы). И семантическое содержание операторов, и правила синтаксиса чётко зафиксированы в описании языка и не допускают разночтений. FORTRAN, Algol и их известные потомки — Basic, С, Pascal идр. — отличаются тем, что в них программист оперирует с процедурами и функциями. И то и другое есть модернизированные подпрограммы, уже известные нам по эпохе машинных кодов. Функции отличаются от процедур тем, что первые обычно вычисляют какие-то значения, а процедуры только «указывают» компьютеру на некую последовательность операций, которую нужно выполнить.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *