4. Машинные команды и программы
В этом разделе рассматривается процесс выполнения программы компьютером с точки зрения машинных команд. Вы уже кратко познакомились с общей концепцией хранения в памяти команд программы и обрабатываемых ею данных. Теперь речь пойдет о пересылке последовательности команд программы из памяти в процессор и их выполнении. Вы познакомитесь со способами адресации, используемыми для доступа к операндам в памяти и регистрах процессора.
Обо всем этом мы поговорим на уровне базовых концепций. Будет приведено общее описание машинных команд и методов адресации операндов, типичных для коммерческих процессоров. Рассматриваемых в этой главе команд вполне достаточно для создания полноценных реальных программ, выполняющих простые задачи. Для написания таких программ используется не машинный язык, а язык ассемблера, в котором команды и информация об адресах операндов представляются посредством символических имен. Полный набор команд, которые может выполнять данный процессор, часто называют архитектурой системы команд процессора (Instruction Set Architecture, ISA) или просто системой команд. Система команд определяет не только сами команды, но еще и методы адресации, используемые для доступа к операндам в памяти и регистрах процессора. Для того чтобы рассмотреть базовые концепции, представленные в этой главе, не обязательно изучать всю систему команд компьютера, поэтому здесь приведены лишь наиболее часто используемые. Для иллюстрации излагаемых положений дается много примеров.
Позже мы рассмотрим системы команд процессора компании Intel. Примеры программ из этой главы, написанные на универсальном языке ассемблера (условном языке, содержащем типичные команды ассемблера, но не являющимся набором команд какого-нибудь конкретного процессора).
Подавляющее большинство программ пишется на языках высокого уровня, таких как С, C++, Java и FORTRAN. Для этой книги мы выбрали язык ассемблера, который наилучшим образом позволяет показать, как работает компьютер. Компьютер сможет выполнить программу, написанную на языке высокого уровня, лишь при условии, что эта программа сначала будет переведена на машинный язык. Языки высокого уровня очень далеки от машинного языка, и их команды часто транслируются в длинные последовательности машинных команд. Иное дело язык ассемблера. Фактически это просто читабельная форма машинного языка. Так что, изучая его, вы изучаете команды машинного языка, непосредственно выполняемые процессором. Взаимосвязь между языками высокого уровня и машинным языком обязательно должна учитываться при разработке компьютера. И мы с вами еще не раз вернемся к этому вопросу.
Все компьютеры работают с числами. У них имеются команды для осуществления базовых арифметических операций с данными. Кроме того, при выполнении машинных команд программы выполняется ряд арифметических операций, генерирующих числовые адреса для доступа к хранящимся в памяти операндам. Для того чтобы понять, как решаются эти задачи, студент должен знать, как числа представлены в компьютере и каким образом они складываются и вычитаются. Именно с этого вопроса мы и начнем изложение материала данной главы. Подробное описание логических схем, реализующих компьютерную арифметику, можно узнать в литературе [2] по этому курсу.
Компьютеры работают не только с числовыми данными, но и с символами и даже со строками символов, то есть наряду с числовой информацией оперируют и текстовой. Поэтому наряду с числами и операциями над ними будет рассмотрено машинное представление символов.