
- •Введение в архитектуру эвм.
- •3. Регистр — непосредственный операнд(ri). 4. Память — непосредственный операнд(si). 5. Память — память(ss).
- •Базирование адресов.
- •8 Бит 24 бита
- •Структура команд
- •Формат регистр–память (и память-регистр).
- •8 Бит 2 бита 3 бита 3 бита 8 бит 8 бит
- •Значения полей mod и mem в формате регистр-память.
- •Арифметические команды
Структура команд
• Формат регистр–регистр.
КОП |
d |
w |
1 |
1 |
R1 |
R2 |
6 бит 1 бит 1 бит 1 бит 1 бит 3 бита 3 бита
Команды этого формата занимают 2 байта.
d – бит направления, задает направление выполнения команд
R1> := <R1> ⊗ <R2> при d = 0
<R2> := <R2> ⊗ <R1> при d = 1.
w – бит размера аргумента, задаёт размер регистров-операндов, имена которых можно определить по следующей схеме:
R1,2 |
w = 1 |
w = 0 |
000 |
AX |
AL |
001 |
CX |
CL |
010 |
DX |
DL |
011 |
BX |
BL |
100 |
SP |
AH |
101 |
BP |
CH |
110 |
SI |
SI |
111 |
DI |
BH |
Архитектурой не предусмотрены операции формата r8–r16, т.е. операции над регистрами разной длины запрещены. При возникает необходимость преобразования типов из короткого целого в длинное, и из длинного в сверхдлинное.
Беззнаковое число всегда расширяется слева нулями.
Для знакового числа размножается знаковый бит (для знаковых чисел незначащими двоичными цифрами будут 0 для неотрицательных и 1 для отрицательных значений).
Команды преобразования типов:
cbw (convert byte to word) – знаковое расширение AL до AX
cwd (convert word to double) – знаковое расширение AX до пары регистров <DX,AX>, которые в этом случае рассматриваются как один длинный 32 битный регистр.
Преобразование целого значения из более длинного формата в более короткий (усечение) производится путём отбрасывания соответствующего числа левых битов целого числа. Усечённое число получится правильным, если будут отброшены только незначащие биты. Для беззнаковых чисел это всегда нулевые биты. Для знаковых – биты, совпадающие со знаковым битом усечённого числа.
Формат регистр–память (и память-регистр).
КОП |
R1 |
A2 |
Операнд A2 может иметь один из приведённых ниже трёх видов:
1. A2 = A 2. A2 = A[M1] 3. A2 = A[M1][M2], |
где A — смещение (1 или 2 байта); M1 и M2 — регистры-модификаторы. (любой из регистров: BP, BX, SI, DI) |
В случае 1 физический адрес (полный адрес ячейки) вычисляется центральным процессором по формуле:
Aфиз := (B*16 + A)mod 2 20 , где B – значение одного из сегментных регистров.
В случае 2 физический адрес вычисляется по формуле:
Aфиз := (B*16 + (A + <M1>)mod 216)mod 220 , где вместо <M1> подставляется содержимое регистра-модификатора (одного из четырёх указанных).
В случае 3 физический адрес вычисляется по формуле:
Aфиз := (B*16 + (A + <M1> + <M2>)mod 216)mod 220, где M1 - любой из
регистров BX или BP, а M2 – любой из регистров SI или DI.
Использование регистров BX и BP (как и SI и DI) одновременно в качестве модификаторов запрещено.
Внутреннее представление формата команды регистр–память: