Инструменты пользователя

Инструменты сайта


cpu

Это старая версия документа!


CPU

Процессором PlayStation является MIPS R3000, 32-битный RISC-микропроцессор, реализующий ISA MIPS I.

Регистры

R3000 имеет 32 регистра общего назначения:

  • $0 - r0 - всегда равен нулю
  • $1 - at - временные данные для некоторых псевдоинструкций ассемблера
  • $2..$3 - v0..v1 - возвратные значения процедур
  • $4..$7 - a0..a3 - аргументы процедур
  • $8..$15 - t0..t7 - переменные
  • $16..$23 - s0..s7 - статические переменные процедур
  • $24..$25 - t8..t9 - переменные
  • $26..$27 - k0..k1 - зарезервированы для BIOS
  • $29 - sp - стековый указатель. Содержит первый свободный адрес на стеке
  • $31 - ra - адрес возврата. Переход по этому адресу осуществляет возврат из процедуры.

Особые регистры:

  • hi, lo - результат целочисленного умножения/деления (верхняя и нижнняя части)
  • pc - программный счетчик.

O32 ABI:

  • $2..$3 (v0..v1) - возвратные значения
  • $4..$7 (a0..a3) - аргументы
  • $29 - указатель на стек
  • $31 - адрес возврата.

Если функция использует более 4 32-битных аргументов, 5-й аргумент и далее кладутся на стек.

Инструкции

Арифметика:

  • add $r, $a, $b - сложение. $r = $a + $b
  • addu $r, $a, $b - беззнаковое сложение. $r = $a + $b
  • addi $r, $a, imm - сложение с константой. $r = $a + imm
  • addiu $r, $a, imm - беззнаковое сложение с константой. $r = $a + imm
  • sub $r, $a, $b - вычитание. $r = $a - $b
  • subu $r, $a, $b - беззнаковое вычитание. $r = $a - $b
  • mult $a, $b - умножение. $a * $b
  • multu $a, $b - беззнаковое умножение. $a * $b
  • div $a, $b - деление. $a / $b
  • divu $a, $b - беззнаковое деление. $a / $b

Сравнение:

  • slt $r, $a, $b - проверка условия «меньше». $r = (int)$a < (int)$b
  • slti $r, $a, imm - проверка условия «меньше» с константой. $r = (int)$a < imm
  • sltiu $r, $a, imm - беззнаковая проверка условия «меньше» с константой. $r = $a < imm

Побитовые операции:

  • and $r, $a, $b - побитовое «И». $r = $a & $b
  • andi $r, $a, imm - побитовое «И» с константой. $r = $a & imm
  • or $r, $a, $b - побитовое «ИЛИ». $r = $a | $b
  • ori $r, $a, imm - побитовое «ИЛИ» с константой. $r = $a | imm
  • xor $r, $a, $b - исключающее «ИЛИ». $r = $a ^ $b
  • nor $r, $a, $b - отрицающее «ИЛИ». $r = !($a | $b)
  • sll $r, $a, imm - логический сдвиг влево на константное значение. $r = $a « imm
  • sllv $r, $a, $b - логический сдвиг влево на переменное значение. Значение сдвига маскируется на 5 бит. $r = $a « ($b & 0x1f)
  • slr $r, $a, imm - логический сдвиг вправо на константное значение. Верхние биты результата заполняются нулями. $r = $a » imm
  • srlv $r, $a, $b - логический сдвиг вправо на переменное значение. Верхние биты результата заполняются нулями. Значение сдвига маскируется на 5 бит. $r = $a » ($b & 0x1f)
  • sra $r, $a, imm - арифметический сдвиг вправо на константное значение. Верхние биты результата заполняются битом знака входного значения. $r = (int)$a » imm
  • srav $r, $a, $b - арифметический сдвиг вправо на переменное значение. Верхние биты результата заполняются битом знака входного значения. Значение сдвига маскируется на 5 бит. $r = (int)$a » ($b & 0x1f)

Чтение и запись:

Внимание! Инструкции доступа к оперативной памяти требуют выровненные адреса. Доступ к слову (word) требует выравнивание по 4 байта, доступ к полуслову (half-word) требует выравнивание по 2 байта. Использование невыровненных адресов приведет к исключению шины.

  • lw $r, imm($a) - загружает слово. $r = $a + imm
  • lh $r, imm($a) - загружает полуслово. $r = $a + imm
  • lhu $r, imm($a) - загружает беззнаковое полуслово. $r = $a + imm
  • lb $r, imm($a) - загружает байт. $r = $a + imm
  • lbu $r, imm($a) - загружает беззнаковый байт. $r = $a + imm
  • lwl $r, imm($a) - загружает старшие байты слова по невыровненному адресу
  • lwr $r, imm($a) - загружает младшие байты слова по невыровненному адресу
  • sw $r, imm($a) - сохраняет слово. $a + imm = $r
  • sh $r, imm($a) - сохраняет полуслово. $a + imm = $r
  • sb $r, imm($a) - сохраняет байт. $a + imm = $r
  • lui $r, imm` - загружает константу в старшие 16 бит слова
cpu.1784287617.txt.gz · Последнее изменение: gecko

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki