Реклама:

Регистры АХ, ВХ, СХ и DX входят в группу регистров общего назначения. Первый регистр в этой группе, АХ, называется регистром-сумматором. Он применяется для накапливания результатов вычислений и часто выступает в роли приемника результатов выполнения различных команд. Хотя каждый регистр способен решать множество разнообразных задач, результаты выполнения некоторых команд (в частности, команд умножения) отправляются в регистр АХ по умолчанию.

Второй регистр этой группы, ВХ, называется базовым регистром. По назначению он во многом аналогичен регистру АХ, но есть и одно существенное отличие. В ВХ можно записать адрес памяти, а затем выполнить команду, операнд которой располагается по этому адресу памяти. Другими словами, ВХ может содержать указатель на область памяти, а АХ - не может. Чтобы проиллюстрировать это утверждение, сравним две команды. Первая команда:

MOV АХ.ВХ

Эта команда копирует содержимое ВХ в АХ. Вторая команда:

M0V АХ,(ВХ)

Эта команда копирует в АХ содержимое слова памяти, адрес которого содержится в ВХ. В первом примере исходный операнд содержится в регистре ВХ; во втором примере фигурирует указатель на исходный операнд. В обоих примерах, как видите, для команды M0V заданы оба операнда: исходный (источник) и целевой (приемник). При этом целевой операнд указывается перед исходным.

Следующий регистр общего назначения, СХ, называется регистром-счетчиком. Помимо прочего, он применяется для хранения значений счетчиков при выполнении циклов. Во время обработки команды LOOP значение в этом регистре автоматически уменьшается на единицу. Как правило, циклы завершаются в тот момент, когда значение в регистре СХ достигает нуля.

Четвертым регистром в группе регистров общего назначения является регистр данных (DX). Совместно с регистром АХ он задействуется при выполнении команд со словами двойной длины (32-разрядными). В этом случае в DX сохраняются старшие 16 бит, а в АХ - младшие 16 бит. Здесь нужно оговориться, что обычно 32-разрядные целые числа называются длинными. Термин двойные чаще применяется по отношению к 64-разрядным значениям с плавающей точкой, но иногда так называют и 32-разрядные целочисленные значения. В нашем контексте путаницы не возникнет, так как числа с плавающей точкой мы обсуждать не собираемся.

Каждый регистр общего назначения можно рассматривать либо как один 16-разрядный регистр, либо как пару 8-разрядных регистров. Таким образом, в процессоре 8088 предусмотрено восемь 8-разрядных регистров, применяемых при выполнении команд с байтами и символами. Регистры, входящие во все остальные группы, нельзя разделить на две 8-разрядные части. Одни команды задействуют целый регистр (например, АХ), другие - только одну его часть (например, AL или АН). Согласно общему правилу, те команды, которые выполняют арифметические операции, обычно используют целые 16-разрядные регистры, а те, что имеют дело с символами, чаще всего довольствуются 8-разрядными регистрами. Следует иметь в виду, что AL и АН - не что иное, как имена двух половин регистра АХ. При записи в АХ нового 16-разрядного числа в AL и АН размещаются его нижняя и верхняя половины, соответственно. Взаимодействие регистров АХ, АН и AL можно проиллюстрировать следующей командой:

M0V АХ,258

Она загружает в регистр АХ десятичное значение 258. После завершения этой команды в байтовом регистре АН оказывается значение 1, а в байтовом регистре AL - значение 2. Пусть следом за этой командой следует другая:

ADDB AH.AL

В этом случае к значению байтового регистра АН прибавляется значение AL (то есть 2), и результирующее значение становится равным 3. В результате этой операции в регистр АХ записывается новое значение - 770, эквивалентное значению 00000011 00000010 в двоичной системе счисления или значению 0x03 0x02 в шестнадцатеричной системе счисления. Как правило, два регистра по 8 байт взаимозаменяемы. Исключение составляет лишь команда MULB, при выполнении которой один из операндов всегда сохраняется в регистре AL, который вместе с АН является в этом случае приемником. При выполнении команды DIVB в паре регистров АН и AL сохраняется делимое. Нижний байт регистра-счетчика CL применяется для хранения числа циклов при выполнении команд обычного и циклического сдвига.

Во втором примере из раздела "Примеры" (это пример относится к программе Gen Reg.s) представлены некоторые свойства регистров общего назначения.

Цикл процессора || Оглавление || Регистры-указатели