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
- $28 - gp - глобальный указатель
- $29 - sp - стековый указатель. Содержит первый свободный адрес на стеке
- $30 - fp/s8 - указатель на фрейм
- $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
cpu.1784286614.txt.gz · Последнее изменение: — gecko
