ПРЕДСТАВЛЕНИЕ ДАННЫХ. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ




ГЛАВА 1. ОСОБЕННОСТИ ПК. ВВЕДЕНИЕ В MASM.

ОПЕРАТИВНАЯ ПАМЯТЬ. РЕГИСТРЫ.

Оперативная память

Объем оперативной памяти ПК - 2^20 байтов (1 Мб). Байты нумеруются начиная с 0, номер байта называется его адресом. Для ссылок на байты памяти используются 20-разрядные адреса: от 00000 до FFFFF (в 16-рич­ной системе).

Байт содержит 8 разрядов (битов), каждый из которых может прини­мать значение 1 или 0. Разряды нумеруются справа налево от 0 до 7:

-----------------

| | | | | | | | |

-----------------

7 6 5 4 3 2 1 0

Байт - это наименьшая адресуемая ячейка памяти. В ПК используются и более крупные ячейки - слова и двойные слова. Слово - это два сосед­них байта, размер слова - 16 битов (они нумеруются справа налево от 0 до 15). Адресом слова считается адрес его первого байта (с меньшим ад­ресом); этот адрес может быть четным и нечетным. Двойное слово - это любые четыре соседних байта (два соседних слова), размер такой ячейки - 32 бита; адресом двойного слова считается адрес его первого байта.

Байты используются для хранения небольших целых чисел и символов,

слова - для хранения целых чисел и адресов, двойные слова - для хране­ния "длинных" целых чисел и т.н. адресных пар (сегмент:смещение).

Регистры

Помимо ячеек оперативной памяти для хранения данных (правда, крат­ковременного) можно использовать и регистры - ячейки, входящие в сос­тав процессора и доступные из машинной программы. Доступ к регистрам осуществляется значительно быстрее, чем к ячейкам памяти, поэтому ис­пользование регистров заметно уменьшает время выполнения программ.

Все регистры имеют размер слова (16 битов), за каждым из них зак­реплено определенное имя (AX, SP и т.п.). По назначению и способу использования регистры можно разбить на следующие группы:

- регистры общего назначения (AX, BX, CX, DX, BP, SI, DI, SP);

- сегментные регистры (CS, DS, SS, ES);

- счетчик команд (IP);

- регистр флагов (Flags).

(Расшифровка этих названий: A - accumulator, аккумулятор; B - base, база; C - counter, счетчик; D - data, данные; BP - base pointer, ука­затель базы; SI - source index, индекс источника; DI - destination index, индекс приемника; SP - stack pointer, указатель стека; CS -

code segment, сегмент команд; DS - data segment, сегмент данных; SS ­stack segment, сегмент стека; ES - extra segment, дополнительный сег­мент; IP - instruction pointer, счетчик команд.)

Регистры общего назначения можно использовать во всех арифметичес­ких и логических командах. В то же время каждый их них имеет опреде­ленную специализацию (некоторые команды "работают" только с определен­ными регистрами). Например, команды умножения и деления требуют, чтобы один из операндов находился в регистре AX или в регистрах AX и DX (в зависимости от размера операнда), а команды управления циклом исполь­зуют регистр CX в качестве счетчика цикла. Регистры BX и BP очень час­то используются как базовые регистры, а SI и DI - как индексные. Ре­гистр SP обычно указывает на вершину стека, аппаратно поддерживаемого в ПК.

Регистры AX, BX, CX и DX конструктивно устроены так, что возможен независимый доступ к их старшей и младшей половинам; можно сказать, что каждый из этих регистров состоит из двух байтовых регистров, обо­значаемых AH, AL, BH и т.д. (H - high, старший; L - low, младший):

----------- ----------- ----------- -----------

AX | AH | AL | BX | BH | BL | CX | CH | CL | DX | DH | DL |

----------- ----------- ----------- ----------­-

15 8 7 0

Таким образом, с каждым из этих регистров можно работать как с единым целым, а можно работать и с его "половинками". Например, можно запи­сать слово в AX, а затем считать только часть слова из регистра AH или заменить только часть в регистре AL и т.д. Такое устройство регистров позволяет использовать их для работы и с числами, и с символами.

Все остальные регистры не делятся на "половинки", поэтому считать или записать их содержимое (16 битов) можно только целиком.

Сегментные регистры CS, DS, SS и ES не могут быть операндами ника­ких команд, кроме команд пересылки и стековых команд. Эти регистры ис­пользуются только для сегментирования адресов (см. 1.4).

Счетчик команд IP всегда содержит адрес (смещение от начала про­граммы) той команды, которая должна быть выполнена следующей (начало программы хранится в регистре CS). Содержимое регистра IP можно изме­нить только командами перехода.

Флаги

И, наконец, в ПК имеется особый регистр флагов. Флаг - это бит, принимающий значение 1 ("флаг установлен"), если выполнено некоторое условие, и значение 0 ("флаг сброшен") в противном случае. В ПК ис-

пользуется 9 флагов, каждому из них присвоено определенное имя (ZF, CF и т.д.). Все они собраны в регистре флагов (каждый флаг - это один из разрядов регистра, часть его разрядов не используется):

-------------------------------------------------

Flags | x| x| x| x|OF|DF|IF|TF|SF|ZF| x|AF| x|PF| x|CF|

-------------------------------------------------

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Некоторые флаги принято называть флагами условий; они автоматичес­ки меняются при выполнении команд и фиксируют те или иные свойства их результата (например, равен ли он нулю). Другие флаги называются фла­гами состояний; они меняются из программы и оказывают влияние на даль­нейшее поведение процессора (например, блокируют прерывания).

Флаги условий:

CF (carry flag) - флаг переноса. Принимает значение 1, если при сложении целых чисел появилась единица переноса, не "влезающая" в раз­рядную сетку, или если при вычитании чисел без знака первое из них бы­ло меньше второго. В командах сдвига в CF заносится бит, вышедший за разрядную сетку. CF фиксирует также особенности команды умножения.

OF (overflow flag) - флаг переполнения. Устанавливается в 1, если при сложении или вычитании целых чисел со знаком получился результат, по модулю превосходящий допустимую величину (произошло переполнение мантиссы и она "залезла" в знаковый разряд).

ZF (zero flag) - флаг нуля. Устанавливается в 1, если результат команды оказался равным 0.

SF (sign flag) - флаг знака. Устанавливается в 1, если в операции над знаковыми числами получился отрицательный результат.

PF (parity flag) - флаг четности. Равен 1, если результат очеред­ной команды содержит четное количество двоичных единиц. Учитывается обычно только при операциях ввода-вывода.

AF (auxiliary carry flag) - флаг дополнительного переноса. Фикси­рует особенности выполнения операций над двоично-десятичными числами.

Флаги состояний:

DF (direction flag) - флаг направления. Устанавливает направление просмотра строк в строковых командах: при DF=0 строки просматриваются "вперед" (от начала к концу), при DF=1 - в обратном направлении.

IF (interrupt flag) - флаг прерываний. При IF=0 процессор переста­ет реагировать на поступающие к нему прерывания, при IF=1 блокировка прерываний снимается.

TF (trap flag) - флаг трассировки. При TF=1 после выполнения каж­дой команды процессор делает прерывание (с номером 1), чем можно вос­пользоваться при отладке программы для ее трассировки.

ПРЕДСТАВЛЕНИЕ ДАННЫХ. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ

Здесь рассматривается машинное представление целых чисел, строк и адресов. Представление двоично-десятичных чисел, используемых доста­точно редко, не рассматривается. Что касается вещественных чисел, то в ПК нет команд вещественной арифметики (операции над этими числами реа­лизуются программным путем или выполняются сопроцессором) и потому нет стандартного представления вещественных чисел. Кроме того, рассматри­ваются некоторые особенности выполнения арифметических операций.

Шестнадцатиричные числа записываются с буквой h на конце, двоичные

числа - с буквой b (так принято в MASM).



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: