1 курс 1 семестр / лекции / Лекция 2 Процессор MIPS
.pdfMIPS использует и побайтовую адресацию памяти.
В этом случае каждый байт памяти имеет уникальный адрес. 32-битное слово состоит из четырёх байтов, адрес каждого слова (англ.: word address) теперь кратен четырём, чтобы иметь возможность адресации его байтов. Адрес слова - это порядковый номер слова, умноженный на четыре.
Примеры кода доступа к памяти.
Команда Регистр |
Адрес |
Смысл команды № слова Данные слова |
Откуда-куда |
|||||
|
|
|
|
|
|
|
|
|
lw |
$s0, |
0($0) |
#read data |
word 0 |
(0xABCDEF78) |
Из пам. в |
$s0 |
|
|
|
|
|
|
|
|
регистр |
|
lw |
$s1, |
8($0) |
#read data |
word 2 |
(0x01EE2842) |
Из пам. в |
$s1 |
|
lw |
|
|
# |
|
|
|
регистр |
|
$s2, |
C($0) |
read data |
word 3 |
(0x40F30788) |
Из пам. в |
$s2 |
||
|
|
|
|
|
|
|
регистр |
4 |
|
|
|
|
|
|
|
Из регистра |
|
sw |
$s3, |
4($0) |
# |
write $s3 |
данные |
word $s3 |
в пам. по |
|
адресу… |
|
|||||||
|
|
|
|
|
|
|
Из регистра |
15 |
sw |
$s4, |
0xF($0) |
#write $s4 |
данные |
word $s4 |
в пам. по |
|
|
адресу… |
|
Арес слова или данных кратен 4, чтобы имелась возможность адресации каждого байта составляющего слова.
MIPS также включает инструкции lb и sb, которые загружают и сохраняют отдельные байты, а не слова. Они похожи на инструкции lw и sw.
Для единообразия представлением команд в машинном языке необходимо, чтобы каждая команда занимала бы ровно одно слово памяти, т.е. 32 бита.
В архитектуре MIPS в качестве компромисса используются три формата инструкций:
типа R – регистровый (англ.: register – рус. регистр); типа I - быстрый (англ.: Immediate – рус. немедленно);
типа J – переход (англ.: Jumр – рус. прыжок, переход ).
Инструкции типа R используют три регистровых операнда.
Инструкции типа I используют два регистровых операнда и
16-битную константу.
Инструкции типа J используют один регистровый операнд в качестве адреса.
- - Формат инструкции типа R – 32b информации
6b |
5b |
|
5b |
5b |
5b |
|
6b |
31 |
26 25 |
21 20 |
16 15 |
11 10 |
6 |
5 |
0 |
Поля, определяющие тип инструкции R:
op (opcode) - операционный код инструкции (6 b- информации); funct - функция (для инструкции funct 6 b – информации);
Поля операндов:
rs, rt – коды полей адресов регистров –источников (англ. register source – источники регистра по 5 b информации);
rd – код поля адреса регистра результата (5 b информации). Поле, shamt, используется только для операций сдвига (англ.: shift amount 6b информации).
Машинный код для инструкции типа R в десятичном и шестнадцатеричном исчислении.
Выводы: 1. Поля величин представлены в десятичном коде; 2. В машинном коде эти поля представлены в двоичном коде;
2. Рассмотрены 2 операции «+» и «-» , у которых одинаковый ОР и разный код функций funct: «+» 32d и «-» 34d
Формат инструкции типа I.
Использует два регистровых операнда и 16-битную константу.
Первые три поля (op, rs) аналогичны таким же полям в инструкциях типа R
Поле imm (immediate) содержит 16-битную константу.
Поля rs и imm всегда используются как операнды-источники. Поле rt содержит номер регистра-назначения, как и в некоторых командах (например, addi и lw), а в других (например, sw) - номер регистра-источника (что бы знать откуда взять данные rt+imm и по какому адресу rs памяти их поместить).
Инструкции типа I содержат 16-битную константу imm, которые однако
участвуют в 32-битных операциях.
ПОЭТОМУ 16-битные константы сначала будут расширены до 32 бит следующим образом: у неотрицательных констант верхние 16 бит дополняются нулями, а у отрицательных констант они будут заполнены единицами с учетом представления числа в дополнительном коде.
Этот приём называется расширением знака: N-битное число расширяется знаком до М-битного числа (М > N) путём копирования знакового (старшего) бита N-битного числа во все старшие биты М-битного числа.
8 |
17 |
16 |
5 |
8 |
19 |
8 |
-12 |
|
|
|
|
35 |
0 |
10 |
32 |
43 |
9 |
17 |
4 |
|
|
|
|
001000 |
10001 |
10000 |
0000 0000 0000 0101 |
001000 |
10011 |
01000 |
111111111111 0100 |
100011 |
00000 |
01010 |
0000 0000 0010 0000 |
101011 |
01001 |
10001 |
0000 0000 0000 0100 |
|
|
|
16 битная константа |
тип I OP Rs |
Rt |
Im |
|
Поля величин в |
десятичном коде |
Машинный код инструкции |
Формат инструкции типа J
Этот формат используется только для инструкций безусловного перехода и ветвления.
В формате команд этого типа определён только один 26-битный операнд в качестве адреса: addr.
6b 26 b адрес перехода
ор adr
3. Расшифровка машинных кодов.
Расшифровка полей каждой 32-битной команды необходима, чтобы понимать язык машины. Для разных команд определены разные форматы (например, команды типа R,I,J) но во всех форматах команды начинаются с 6-битного поля opcode. Если оно равно 0, то это команда типа R, иначе это команда типа I или J.
Имеем машинные коды в шестнадцатиричном исчислении.
0x2237FFF1 0x02F34022
Переведем их на язык ассемблера.
Поля величин в дес. занчении
Направление записи кода по тетрадам |
Пояснения1:0x2237FFF1 |
|
Пояснения 2: 0x02F34022 |
прямой код 0000 0000 0000 1111b=15d |
|
000000b=0d |
10111b=23d 10011b=19d |
дополнительный код |
01000b=8d |
00000b=0d 100010b=34d |
1111 1111 1111 0001b =-15 d |