ЗАМЕЧАНИЕ
В некоторых архитектурах могут реализовываться и другие более экзотические
способы адресации операндов.
Обычно процессор помимо УУ, АЛУ и СК имеет встроенные так
называемые регистры. Они представляют собой сверхоперативную
память — команды могут обрабатывать данные без необходимости
обращения к ОЗУ ЭВМ, что значительно ускоряет вычисления. Регистры
могут указываться в командах вместо адресов данных в памяти.
В архитектуре x86 имеется несколько регистров, которые можно
использовать произвольным образом (почти), или регистров общего
назначения. Они имеют обозначения AX, BX, CX, DX, SI и DI. Несмотря на
универсальность, в программах регистры зачастую используются в
определенных целях и поэтому имеют дополнительные имена: AX —
аккумулятор, BX — база, CX — счетчик, DX — данные, SI — индекс
источника, DI — индекс результата.
Определив подходы к представлению команд в памяти ЭВМ, поговорим
немного о представлении данных. Компьютер имеет базовый параметр,
называемый разрядностью, определяющий размер машинного слова —
порции данных, обрабатываемой процессором при выполнении одной
команды. Сегодня разрядность у массовых компьютеров — 16, 32, 64
бит — два, четыре или восемь байт соответственно. Тем не менее обычно
минимально адресуемой единицей памяти является байт, и у 16-разрядной
ЭВМ, например, адреса соседних ячеек (слов) различаются на 2. При
представлении дробных чисел в современных ЭВМ обычно производится
нормализация и хранятся мантисса и порядок числа.
Важным является представление знака для чисел. Не вдаваясь в
подробности, отметим, что обычно допустима обработка как беззнаковых
чисел, так и чисел со знаком. При этом, если число рассматривается как
число со знаком, обычно крайний старший разряд слова принимается
носителем знака по следующей схеме: ноль — число положительное,
единица — отрицательное.
Символы и строки хранятся в памяти ЭВМ с использованием той или иной
системы кодирования. Наиболее распространены вариации кода ASCII и
Unicod. В кодировке ASCII (American Standard Code for Information
Interchange —
увы, кодировка американская, и с русскими буквами мы
имеем массу проблем...) для кодирования одного символа используется 1
байт (фактически, изначально 7 бит, именно это позволило при создании
основанных на ней русскоязычных кодировок добавить кириллицу, но для
простоты можно считать, что 8 бит).
Программа на ассемблере может включать несколько секций (некоторые
128
не являются обязательными), или разделов (например, в ассемблерах
MASM и Flat Assembler):
заголовок;
описание интерфейса и подключаемых библиотек;
описание данных (констант и переменных);
собственно команды.
Правила записи заголовка и интерфейса программы могут различаться в
разных версиях программы-переводчика (также называемой ассемблером).
Автор рекомендует для программ на ассемблере x86 использовать
свободно распространяемый Flat Assembler, снабженный довольно
солидным набором библиотек, включающих, в частности, неплохую
поддержку компьютерной графики.
Основная часть программы на языке ассемблера состоит из выражений.
Все выражения могут быть записаны в следующем условном виде:
[
Метка:] [Оператор] [Операнды] [; Комментарий]
Выражения могут быть директивами ассемблера и мнемоническими
обозначениями команд. Различие между ними следующее. Мнемоника
команды ассемблером превращается в машинный код, кототрый затем
записывается в память программы и в ходе ее исполнения обрабатывается
процессором. Директивы называются также псевдокомандами — это некие
предписания ассемблеру, предназначенные для программы-переводчика, а
не процессора. Набор команд специфичен для каждого процессора
(архитектуры). Директивы определяются реализацией программы
ассемблирования.
Сначала рассмотрим запись программы на языке ассемблера с помощью
команд:
A1:
mov
ax,2 ; занесение в регистр AX процессора числа 2
mov
bx,2 ; занесение в регистр BX процессора числа 2
add
bx,ax; сложение содержимого BX и AX, результат → в BX
Надеемся, приведенный фрагмент не вызвал у читателя затруднений . В
данном примере данные заносились и обрабатывались в регистрах общего
назначения процессора. Если данные хранятся в памяти, ячейке обычно
дается мнемоническое имя с помощью соответствующих директив
ассемблера. Рассмотрим следующий пример (ассемблер MASM):
; в разделе описания данных
S1 dw
2 ; занесение в ячейку числа 2 и ее обозначение как S1
S2 dw
3 ; занесение в ячейку числа 3 и ее обозначение как S2
S3 dw
? ; резервирование ячейки памяти с именем S3
P db
? ; резервирование одного байта
129
MAS
dw 1,2,-
4,11,25; начиная с адреса MAS занесены пять чисел
STR
db
'Привет'; начиная с адреса STR идут байты строки символов
; в разделе описания команд они обычно отделены друг от друга
sub
S2,S1; вычитание содержимого ячейки S1 из S2
Достарыңызбен бөлісу: |