124
Core 2 Duo (
многоядерный)
2006
|
Pentium G
2011
Другим важным обстоятельством является то, что огромный массив
существующих программ был разработан именно для x86, так что, весьма
вероятно, читателю придется разбираться именно с подобными
программами.
ЗАМЕЧАНИЕ
Данная глава ни в коем случае не является учебником по программированию
на языке ассемблера — весьма нетривиальной технической дисциплине,
имеющей массу нюансов. Она дает лишь весьма поверхностное общее
впечатление, позволяющее в некоторой степени понять особенности
программирования на ассемблере и способное стать отправной точкой для его
последующего изучения по
специализированной литературе, например [13].
Для дальнейшего изложения нам потребуются краткие дополнительные
сведения об архитектуре ЭВМ — в частности, о представлении команд.
Для представления команды в памяти ЭВМ необходимо закодировать
двоичным кодом само действие и операнды — то, над чем производится
действие.
Поле команды состоит из двух частей — операционной и адресной. В
операционной части записывается
код операции (КОП). Этот код
определяет действие, которое команда должна выполнить над данными
(обычно арифметическое или логическое).
Адресная часть команды
содержит адреса ячеек памяти — операндов, обрабатываемых в операции.
Количество приводимых в команде адресов может быть различным.
Основными вариантами архитектур ЭВМ являются: трехадресная;
двухадресная; одноадресная.
КОП А1 А2 А3
КОП А1 А2
КОП А
Рис. 17
125
Большинство
операций,
реализуемых
арифметико-логическими
устройствами современных процессоров, — двухместные (бинарные), это
означает, что в результате обработки двух операндов получается один
результат. Рассмотрим пример вычисления выражения z=x+y.
В трехадресной архитектуре — самой полной — часть двоичного кода
команды отводится под представление операции. Например, 000110 —
сложение (в архитектуре PDP-11). Кроме этого, в ней присутствуют три
адреса: адрес первого операнда x — А1, адрес второго y — A2, и адрес, в
который нужно поместить результат, z — A3. Трехадресная архитектура
является наиболее гибкой, но и наиболее затратной с точки зрения объема
памяти, необходимого для представления каждой команды. Если адресное
пространство соответствует микропроцессорам 8086, под каждый из
адресов потребуется 20 бит. Соответственно, каждая команда должна быть
длиннее 60 бит, что не очень хорошо с точки зрения упаковки больших
программ.
Большинство современных ЭВМ, в том числе микропроцессоры семейств
x86, —
двухадресные. В них в команде присутствуют два адреса, один из
которых используется как для взятия операнда, так и для помещения по
этому же адресу полученного результата. Примером может служить
x=x+y
. Данный подход позволяет без существенной потери гибкости
сэкономить заметное количество памяти.
На одноадресной архитектуре были построены первые микропроцессоры.
В ней присутствует
аккумулятор — специальный выделенный регистр в
процессоре, в который по умолчанию попадают результаты всех операций.
Из него же по умолчанию берется один из операндов. Соответственно, в
команде достаточно указать адрес всего одного операнда.
Самый экстремальный случай — безадресная архитектура. В ней команда
содержит лишь КОП. Операнды по умолчанию берутся из заранее
известного места — чаще всего из стека (два числа на вершине стека) (см.
Достарыңызбен бөлісу: