03.1 Conspect (ru)

Существует типа вида адресации:

1. Прямая адресация (По номеру регистра)

2. Непосредственная (Число записываем прямо в закодированную инструкцию)

3. Косвенная (В команде указывается номер регистра, а адрес лежит в этом регистре)

В битовом представлении инструкции на первом месте всегда стоит источник. На первом месте стоит источник, потом второй операнд, затем приёмник. В инструкции типа J помимо опода все 26 бит занимает адрес перехода.

1.png

Псевдоинструкции - договорённость для упрощения понимания кода человеком. Например команды перемещения между регистрами нет, а инструкция в ассемблере - есть:

move $t1 $t2 == addu $t1 $zero $t2

li (load immediate) - запись числа в регистр

sll - сдвиг влево

move - перемещение значения из одного регистра в другой

add - сложение

addu - сложение без обращения внимания на переполнение

2.png

Конвенция - договорённость о том как мы используем архитектуру. Например, существуют только “полтора” специальных регистра, все остальные можно использовать, однако было бы хорошо договориться какие регистры можно “портить”, а какие - нет.

Это значит, что если подпрограмма хочет поменять какие-то нужные основной регистры, то она сначала копирует эти значения в другое место, затем выполняет нужные операции и возвращает скопированное значение на место. Так регистры t можно “портить”, а s - нельзя.

3.png

sw - запись из регистра в адрес sw $t1 0x10010000

Машинное слово - это фиксированный размер ячейки памяти.

Mips 32 не может работать более, чем с 32 разрядными числами и 32 разрядными адресами => этот кусок 32 бита и будет являться машинными словами. Есть half word 16 бит и байт = 8 битам.

Mars показывает дамп памяти в виде машинных слов.

Существует договоренность, которая гласит, что если мы используем линейную модель памяти, то код будет находится с адреса 0х0040000, а данные находятся c адреса 0х10010000

В код начиная с адреса 0х0040000 до 0х10000000 мы не можем ничего менять. Начиная с 0х10010000 мы можем вносить любые данные.

0х7fffffff конечная точка, дальше идет ядерная зона.

С 0х80000000 это память доступна только если мы работаем в ней в режиме ядра.

Разделить программу на данные и код:

Код обозначается как директива .text, а данные директивой .data. Директива отличается от инструкции тем, что она не соответствует никакой команде. Директива ассемблера это команда самому ассемблеру.

Косвенный режим индексации: мы входим в память за содержимым по адресу, который хранится в регистре $t1

4.png

HSE/ArchitectureASM/03_RegistersMemory/Conspect (последним исправлял пользователь FrBrGeorge 2020-06-24 19:57:55)