03.1 Conspect (ru)
Существует типа вида адресации:
1. Прямая адресация (По номеру регистра)
2. Непосредственная (Число записываем прямо в закодированную инструкцию)
3. Косвенная (В команде указывается номер регистра, а адрес лежит в этом регистре)
В битовом представлении инструкции на первом месте всегда стоит источник. На первом месте стоит источник, потом второй операнд, затем приёмник. В инструкции типа J помимо опода все 26 бит занимает адрес перехода.
Псевдоинструкции - договорённость для упрощения понимания кода человеком. Например команды перемещения между регистрами нет, а инструкция в ассемблере - есть:
move $t1 $t2 == addu $t1 $zero $t2
li (load immediate) - запись числа в регистр
sll - сдвиг влево
move - перемещение значения из одного регистра в другой
add - сложение
addu - сложение без обращения внимания на переполнение
Конвенция - договорённость о том как мы используем архитектуру. Например, существуют только “полтора” специальных регистра, все остальные можно использовать, однако было бы хорошо договориться какие регистры можно “портить”, а какие - нет.
Это значит, что если подпрограмма хочет поменять какие-то нужные основной регистры, то она сначала копирует эти значения в другое место, затем выполняет нужные операции и возвращает скопированное значение на место. Так регистры t можно “портить”, а s - нельзя.
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