Различия между версиями 2 и 3
Версия 2 от 2019-03-01 15:36:48
Размер: 65
Редактор: FrBrGeorge
Комментарий:
Версия 3 от 2019-03-01 16:28:05
Размер: 29876
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:
[[https://moodle.cs.msu.ru/mod/lesson/edit.php?id=1876|Базовая лекция на Moodle]]
Строка 3: Строка 4:
'''TODO''' ||<tablestyle="border: none; border-collapse: collapse;"rowstyle="height: 0px;"style="vertical-align: top; padding: 0px 7px 0px 7px; border: solid #000000 2px;">Регистр ||<style="vertical-align: top; padding: 0px 7px 0px 7px; border: solid #000000 2px;">Программное имя ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 2px; vertical-align: top; padding: 0px 7px 0px 7px;">Регистр ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 2px; vertical-align: top; padding: 0px 7px 0px 7px;">Программное имя ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 2px; vertical-align: top; padding: 0px 7px 0px 7px;">r0 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 2px; vertical-align: top; padding: 0px 7px 0px 7px;">zero ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r16 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s0 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r1 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">at ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r17 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s1 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r2 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">v0 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r18 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s2 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r3 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">v1 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r19 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s3 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r4 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">a0 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r20 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s4 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r5 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">a1 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r21 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s5 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;"> r6 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">a2 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r22 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s6 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r7 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">a3 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r23 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s7 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r8 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t0 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r24 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t8 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r9 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t1 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r25 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t9 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r10 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t2 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r26 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">k0 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r11 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t3 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r27 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">k1 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r12 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t4 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r28 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">gp ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r13 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t5 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r29 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">sp ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r14 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t6 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r30 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s8, fp ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 2px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r15 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 2px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t7 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 2px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r31 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 2px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">ra ||


 * Только два регистра особенные — '''zero''' ('''r0, '''всегда равен 0) и '''ra''' ('''r31''', автоматически заполняется некоторыми командами)
  * Теоретически можно использовать любой, но это ''сильно'' затрудняет написание работающих программ
  * ⇒ возникает понятие ''конвенции'' (договорённости)
 * Регистр '''at (r1)''' используется псевдоинструкциями (например, для адреса при косвенной адресации)
 * Регистры '''a0 - a3 (r4 - r7) '''используются для передачи параметров подпрограммам
  * Очевидно, у подпрограмм может быть более 4 параметров, так что здесь тоже вступают в силу конвенции, и очень разнообразные
 * Регистры '''v0, v1 (r2, r3)''' используются для возврата значений (почему два?)
 * Регистры '''t0 - t9 (r8-r15, r24,r25) '''можно использовать без ограничений
 * Регистры''' s0 - s8 (r16 - r23, r30) '''по договорённости необходимо восстанавливать в исходные значения перед выходом из подпрограммы. При этом даже если они используются вне подпрограммы, код сохранения и восстановления обязан присутствовать.
 * Регистры '''k0, k1 (r26, r27)''' используются для взаимодействия с ядром
 * Регистр '''sp (r29)''' содержит ссылку на вершину ''стека ''(stack pointer)
 * Регистр '''gp (r28)''' хранит адрес области глобальных данных (global pointer). Нужен, например, для хранения «глобальных переменных», доступных в том числе и из подпрограмм (конвенция!), или для передачи данных со стороны операционной системы
 * Регистр '''s8 (r30) '''''в некоторых конвенциях'' организации подпрограмм используется для хранения ссылки на область данных текущей подпрограммы, поэтому он носит ещё одно название — '''fp ''' (frame pointer)

Ещё два регистра — '''HI''' и '''LO''' — используются в командах деления и умножения.

||<tablestyle="border: none; border-collapse: collapse;"rowstyle="height: 0px;"style="vertical-align: top; padding: 0px 7px 0px 7px; border: solid #000000 2px;">Регистр ||<style="vertical-align: top; padding: 0px 7px 0px 7px; border: solid #000000 2px;">Программное имя ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 2px; vertical-align: top; padding: 0px 7px 0px 7px;">Регистр ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 2px; vertical-align: top; padding: 0px 7px 0px 7px;">Программное имя ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 2px; vertical-align: top; padding: 0px 7px 0px 7px;">r0 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 2px; vertical-align: top; padding: 0px 7px 0px 7px;">zero ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r16 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s0 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r1 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">at ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r17 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s1 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r2 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">v0 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r18 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s2 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r3 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">v1 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r19 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s3 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r4 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">a0 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r20 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s4 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r5 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">a1 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r21 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s5 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;"> r6 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">a2 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r22 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s6 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r7 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">a3 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r23 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s7 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r8 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t0 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r24 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t8 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r9 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t1 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r25 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t9 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r10 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t2 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r26 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">k0 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r11 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t3 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r27 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">k1 ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r12 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t4 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r28 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">gp ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r13 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t5 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r29 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">sp ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r14 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t6 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r30 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 1px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">s8, fp ||
||<rowstyle="height: 0px;"style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 2px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r15 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 2px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">t7 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 2px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">r31 ||<style="border-left: solid #000000 2px; border-right: solid #000000 2px; border-bottom: solid #000000 2px; border-top: solid #000000 1px; vertical-align: top; padding: 0px 7px 0px 7px;">ra ||

Регистры и модель памяти

Базовая лекция на Moodle

Регистр

Программное имя

Регистр

Программное имя

r0

zero

r16

s0

r1

at

r17

s1

r2

v0

r18

s2

r3

v1

r19

s3

r4

a0

r20

s4

r5

a1

r21

s5

r6

a2

r22

s6

r7

a3

r23

s7

r8

t0

r24

t8

r9

t1

r25

t9

r10

t2

r26

k0

r11

t3

r27

k1

r12

t4

r28

gp

r13

t5

r29

sp

r14

t6

r30

s8, fp

r15

t7

r31

ra

  • Только два регистра особенные — zero (r0, всегда равен 0) и ra (r31, автоматически заполняется некоторыми командами)

    • Теоретически можно использовать любой, но это сильно затрудняет написание работающих программ

    • ⇒ возникает понятие конвенции (договорённости)

  • Регистр at (r1) используется псевдоинструкциями (например, для адреса при косвенной адресации)

  • Регистры a0 - a3 (r4 - r7) используются для передачи параметров подпрограммам

    • Очевидно, у подпрограмм может быть более 4 параметров, так что здесь тоже вступают в силу конвенции, и очень разнообразные
  • Регистры v0, v1 (r2, r3) используются для возврата значений (почему два?)

  • Регистры t0 - t9 (r8-r15, r24,r25) можно использовать без ограничений

  • Регистры s0 - s8 (r16 - r23, r30) по договорённости необходимо восстанавливать в исходные значения перед выходом из подпрограммы. При этом даже если они используются вне подпрограммы, код сохранения и восстановления обязан присутствовать.

  • Регистры k0, k1 (r26, r27) используются для взаимодействия с ядром

  • Регистр sp (r29) содержит ссылку на вершину стека (stack pointer)

  • Регистр gp (r28) хранит адрес области глобальных данных (global pointer). Нужен, например, для хранения «глобальных переменных», доступных в том числе и из подпрограмм (конвенция!), или для передачи данных со стороны операционной системы

  • Регистр s8 (r30) в некоторых конвенциях организации подпрограмм используется для хранения ссылки на область данных текущей подпрограммы, поэтому он носит ещё одно название — fp (frame pointer)

Ещё два регистра — HI и LO — используются в командах деления и умножения.

Регистр

Программное имя

Регистр

Программное имя

r0

zero

r16

s0

r1

at

r17

s1

r2

v0

r18

s2

r3

v1

r19

s3

r4

a0

r20

s4

r5

a1

r21

s5

r6

a2

r22

s6

r7

a3

r23

s7

r8

t0

r24

t8

r9

t1

r25

t9

r10

t2

r26

k0

r11

t3

r27

k1

r12

t4

r28

gp

r13

t5

r29

sp

r14

t6

r30

s8, fp

r15

t7

r31

ra

LecturesCMC/ArchitectureAssembler2019/03_RegistersMemory (последним исправлял пользователь FrBrGeorge 2019-05-17 15:13:12)