Project

General

Profile

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

krufter_multiclet, 05/08/2013 01:02 PM

1 1 krufter_multiclet
h1. Обзор работы с индексными регистрами
2 1 krufter_multiclet
3 3 krufter_multiclet
Индексные регистры используются для косвенной адресации. Логическая структура индексного регистра:
4 4 krufter_multiclet
5 5 krufter_multiclet
| *Номера битов*| 63..48       | 47..32      | 31..0      |
6 5 krufter_multiclet
| *Обозначение* | Индекс(Index)| Маска(Mask) | База(Base) | 
7 6 krufter_multiclet
8 6 krufter_multiclet
Для обращения к какому-либо регистру данного типа используются номера от 32 до 39.
9 6 krufter_multiclet
Имен у данного типа регистров нет. В общем случае (см. исключения в описании конкретной
10 6 krufter_multiclet
команды в разделе «Система команд ассемблера») при использовании регистра данного типа в 
11 6 krufter_multiclet
качестве аргумента операции значение этого аргумента формируется согласно следующему
12 6 krufter_multiclet
алгоритму:
13 7 krufter_multiclet
14 1 krufter_multiclet
1. вычисление исполнительного адреса, согласно следующей формуле:
15 7 krufter_multiclet
_Address_ = _Index_ + _Base_
16 8 krufter_multiclet
17 6 krufter_multiclet
2. обращение к памяти данных по исполнительному адресу для чтения/записи 
18 6 krufter_multiclet
значения аргумента согласно типу используемой команды.
19 9 krufter_multiclet
20 6 krufter_multiclet
Модификация значения индексного регистра осуществляется аппаратно по завершению
21 6 krufter_multiclet
параграфа в том случае, если установлен соответствующий бит регистра MODR маски 
22 1 krufter_multiclet
изменения индексных регистров (см. раздел «Регистры управления»), согласно следующей 
23 6 krufter_multiclet
формуле:
24 7 krufter_multiclet
_Index_ = ((_Index_ | ∼ _Mask_ ) + 1) & _Mask_,
25 6 krufter_multiclet
где | — операция побитового «ИЛИ», & — операция побитового «И», ∼ — операция 
26 6 krufter_multiclet
побитового инвертирования.
27 6 krufter_multiclet
В двух выше приведённых формулах используется целочисленная 32-х разрядная 
28 1 krufter_multiclet
арифметика. Значения старших 16 разрядов (с 16 по 31) полей Индекс (Index) и Маска 
29 1 krufter_multiclet
(Mask)заполняются нулями.
30 10 krufter_multiclet
31 16 krufter_multiclet
Рассмотрим подробнее работу с индексными регистрами мультиклеточного процессора.
32 11 krufter_multiclet
33 15 krufter_multiclet
h3. 1) Отличие индексных регистров от РОНов
34 11 krufter_multiclet
35 11 krufter_multiclet
В командах ассемблера, при использовании РОНов(регистров общего назначения) в качестве аргумента,
36 11 krufter_multiclet
происходит работа с текущим значением РОНа. Например:
37 11 krufter_multiclet
38 11 krufter_multiclet
<pre>
39 11 krufter_multiclet
pre:
40 11 krufter_multiclet
    getl 5
41 11 krufter_multiclet
    setl #1, @1
42 12 krufter_multiclet
    jmp paragraph1
43 11 krufter_multiclet
complete
44 11 krufter_multiclet
45 11 krufter_multiclet
paragraph1:
46 11 krufter_multiclet
    addl #1, 5
47 11 krufter_multiclet
    setl #1, @1
48 11 krufter_multiclet
    jmp paragraph2
49 11 krufter_multiclet
complete
50 11 krufter_multiclet
</pre>
51 13 krufter_multiclet
52 13 krufter_multiclet
В параграфе "pre" мы положили в первый РОН значение "5". В параграфе "paragraph1" командой "addl" 
53 13 krufter_multiclet
выполнится сложение, результат которого запишется в первый РОН. 
54 14 krufter_multiclet
55 14 krufter_multiclet
В командах ассемблера, при использовании индексных регистров качестве аргумента,
56 14 krufter_multiclet
происходит работа со значением, размещённым в памяти по адресу который формирует индексный регистр.
57 14 krufter_multiclet
Адрес, формируемый индексным регистром равен сумме _Индекса_ и _Базы_ регистра (_Address_ = _Index_ + _Base_).