Project

General

Profile

Обзор работы с индексными регистрами » History » Version 9

krufter_multiclet, 05/08/2013 12:30 PM

1 1 krufter_multiclet
h1. Обзор работы с индексными регистрами
2 1 krufter_multiclet
3 2 krufter_multiclet
Рассмотрим работу с индексными регистрами мультиклеточного процессора.
4 3 krufter_multiclet
5 3 krufter_multiclet
Индексные регистры используются для косвенной адресации. Логическая структура индексного регистра:
6 4 krufter_multiclet
7 5 krufter_multiclet
| *Номера битов*| 63..48       | 47..32      | 31..0      |
8 5 krufter_multiclet
| *Обозначение* | Индекс(Index)| Маска(Mask) | База(Base) | 
9 6 krufter_multiclet
10 6 krufter_multiclet
Для обращения к какому-либо регистру данного типа используются номера от 32 до 39.
11 6 krufter_multiclet
Имен у данного типа регистров нет. В общем случае (см. исключения в описании конкретной
12 6 krufter_multiclet
команды в разделе «Система команд ассемблера») при использовании регистра данного типа в 
13 6 krufter_multiclet
качестве аргумента операции значение этого аргумента формируется согласно следующему
14 6 krufter_multiclet
алгоритму:
15 7 krufter_multiclet
16 1 krufter_multiclet
1. вычисление исполнительного адреса, согласно следующей формуле:
17 7 krufter_multiclet
_Address_ = _Index_ + _Base_
18 8 krufter_multiclet
19 6 krufter_multiclet
2. обращение к памяти данных по исполнительному адресу для чтения/записи 
20 6 krufter_multiclet
значения аргумента согласно типу используемой команды.
21 9 krufter_multiclet
22 6 krufter_multiclet
Модификация значения индексного регистра осуществляется аппаратно по завершению
23 6 krufter_multiclet
параграфа в том случае, если установлен соответствующий бит регистра MODR маски 
24 1 krufter_multiclet
изменения индексных регистров (см. раздел «Регистры управления»), согласно следующей 
25 6 krufter_multiclet
формуле:
26 7 krufter_multiclet
_Index_ = ((_Index_ | ∼ _Mask_ ) + 1) & _Mask_,
27 6 krufter_multiclet
где | — операция побитового «ИЛИ», & — операция побитового «И», ∼ — операция 
28 6 krufter_multiclet
побитового инвертирования.
29 6 krufter_multiclet
В двух выше приведённых формулах используется целочисленная 32-х разрядная 
30 6 krufter_multiclet
арифметика. Значения старших 16 разрядов (с 16 по 31) полей Индекс (Index) и Маска 
31 6 krufter_multiclet
(Mask)заполняются нулями.