Обзор работы с индексными регистрами » History » Version 17
Version 16 (krufter_multiclet, 05/08/2013 01:02 PM) → Version 17/48 (krufter_multiclet, 05/08/2013 01:07 PM)
h1. Обзор работы с индексными регистрами
Индексные регистры используются для косвенной адресации. Логическая структура индексного регистра:
| *Номера битов*| 63..48 | 47..32 | 31..0 |
| *Обозначение* | Индекс(Index)| Маска(Mask) | База(Base) |
Для обращения к какому-либо регистру данного типа используются номера от 32 до 39.
Имен у данного типа регистров нет. В общем случае (см. исключения в описании конкретной
команды в разделе «Система команд ассемблера») при использовании регистра данного типа в
качестве аргумента операции значение этого аргумента формируется согласно следующему
алгоритму:
1. вычисление исполнительного адреса, согласно следующей формуле:
_Address_ = _Index_ + _Base_
2. обращение к памяти данных по исполнительному адресу для чтения/записи
значения аргумента согласно типу используемой команды.
Модификация значения индексного регистра осуществляется аппаратно по завершению
параграфа в том случае, если установлен соответствующий бит регистра MODR маски
изменения индексных регистров (см. раздел «Регистры управления»), согласно следующей
формуле:
_Index_ = ((_Index_ | ∼ _Mask_ ) + 1) & _Mask_,
где | — операция побитового «ИЛИ», & — операция побитового «И», ∼ — операция
побитового инвертирования.
В двух выше приведённых формулах используется целочисленная 32-х разрядная
арифметика. Значения старших 16 разрядов (с 16 по 31) полей Индекс (Index) и Маска
(Mask)заполняются нулями.
Рассмотрим подробнее работу с индексными регистрами мультиклеточного процессора.
h3. 1) Отличие индексных регистров от РОНов
В командах ассемблера, при использовании РОНов(регистров общего назначения) в качестве аргумента,
происходит работа с текущим значением РОНа. Например:
<pre>
pre:
getl 5
setl #1, @1
jmp paragraph1
complete
paragraph1:
addl #1, 5
setl #1, @1
jmp paragraph2
complete
</pre>
В параграфе "pre" мы положили в первый РОН значение "5". В параграфе "paragraph1" командой "addl"
выполнится сложение, результат которого(5+5=10) которого запишется в первый РОН.
В командах ассемблера, при использовании индексных регистров качестве аргумента,
происходит работа со значением, размещённым в памяти по адресу который формирует индексный регистр.
Адрес, формируемый индексным регистром равен сумме _Индекса_ и _Базы_ регистра (_Address_ = _Index_ + _Base_).
Рассмотрим пример:
<pre>
pre:
getl 5
setl #32, @1
getl 6
wrl @1, @3
jmp paragraph1
complete
paragraph1:
addl #32, 5
setl #1, @1
jmp paragraph2
complete
</pre>
Индексные регистры используются для косвенной адресации. Логическая структура индексного регистра:
| *Номера битов*| 63..48 | 47..32 | 31..0 |
| *Обозначение* | Индекс(Index)| Маска(Mask) | База(Base) |
Для обращения к какому-либо регистру данного типа используются номера от 32 до 39.
Имен у данного типа регистров нет. В общем случае (см. исключения в описании конкретной
команды в разделе «Система команд ассемблера») при использовании регистра данного типа в
качестве аргумента операции значение этого аргумента формируется согласно следующему
алгоритму:
1. вычисление исполнительного адреса, согласно следующей формуле:
_Address_ = _Index_ + _Base_
2. обращение к памяти данных по исполнительному адресу для чтения/записи
значения аргумента согласно типу используемой команды.
Модификация значения индексного регистра осуществляется аппаратно по завершению
параграфа в том случае, если установлен соответствующий бит регистра MODR маски
изменения индексных регистров (см. раздел «Регистры управления»), согласно следующей
формуле:
_Index_ = ((_Index_ | ∼ _Mask_ ) + 1) & _Mask_,
где | — операция побитового «ИЛИ», & — операция побитового «И», ∼ — операция
побитового инвертирования.
В двух выше приведённых формулах используется целочисленная 32-х разрядная
арифметика. Значения старших 16 разрядов (с 16 по 31) полей Индекс (Index) и Маска
(Mask)заполняются нулями.
Рассмотрим подробнее работу с индексными регистрами мультиклеточного процессора.
h3. 1) Отличие индексных регистров от РОНов
В командах ассемблера, при использовании РОНов(регистров общего назначения) в качестве аргумента,
происходит работа с текущим значением РОНа. Например:
<pre>
pre:
getl 5
setl #1, @1
jmp paragraph1
complete
paragraph1:
addl #1, 5
setl #1, @1
jmp paragraph2
complete
</pre>
В параграфе "pre" мы положили в первый РОН значение "5". В параграфе "paragraph1" командой "addl"
выполнится сложение, результат которого(5+5=10) которого запишется в первый РОН.
В командах ассемблера, при использовании индексных регистров качестве аргумента,
происходит работа со значением, размещённым в памяти по адресу который формирует индексный регистр.
Адрес, формируемый индексным регистром равен сумме _Индекса_ и _Базы_ регистра (_Address_ = _Index_ + _Base_).
Рассмотрим пример:
<pre>
pre:
getl 5
setl #32, @1
getl 6
wrl @1, @3
jmp paragraph1
complete
paragraph1:
addl #32, 5
setl #1, @1
jmp paragraph2
complete
</pre>