MIPS

来源:互联网 发布:逻辑回归模型 知乎 编辑:程序博客网 时间:2024/05/08 03:10

想知道PS2的工作的原理或想对PS2程序进行调试,就必须要了解PS2的CPU EE所使用的R5900指令集。这里简单列出R5900命令表,原作者:KHDG,这里略有改动。
    
ADD -- Add
含义:两个存储地址数值($s)和并储存到该地址中
$d = $s + $t
后缀表现形式为(以下省略):add $d, $s, $t

ADDI -- Add immediate
含义:一个储存地址数值($s以下省略)加一个即时读取值(imm以下省略)
$t = $s + imm
addi $t, $s, imm

ADDIU -- Add immediate unsigned
含义:一个储存地址数值加一个无符号即时读取值
$t = $s + imm
addiu $t, $s, imm

ADDU -- Add unsigned
含义:两个存储地址数值的和并存到第一个存储地址中
$d = $s + $t
addu $d, $s, $t

AND -- Bitwise and
含义:逻辑与两个存储地址数值的值并存到第一个存储地址中
$d = $s & $t
and $d, $s, $t

ANDI -- Bitwise and immediate
含义:逻辑与一个存储地址数值和一个立即数的值并存到第一个存储地址中
$t = $s & imm
andi $t, $s, imm

BEQ -- Branch on equal
含义:比较两个存储地址数值相等,若相等则偏移地址逻辑左移两位
if $s == $t offset << 2
beq $s, $t, offset

BGEZ -- Branch on greater than or equal to zero
含义:比较如果存储地址数值的值大于或等于零,则偏移地址逻辑左移两位
if $s >= 0 offset << 2
bgez $s, offset

BGEZAL -- Branch on greater than or equal to zero and link
含义:比较如果存储地址数值的值大于或等于零,则把返回的地址存入ar存储地址中
if $s >= 0 offset << 2 $31 = PC + 8 (PC-程序计数器) $31就是ar
bgezal $s, offset

BGTZ -- Branch on greater than zero
含义:比较如果存储地址数值大于零,则偏移地址逻辑左移两位
if $s > 0 offset << 2
bgtz $s, offset

BLEZ -- Branch on less than or equal to zero
含义:比较如果存储地址数值小于或等于零,则偏移地址逻辑左移两位
if $s <= 0 offset << 2
blez $s, offset

BLTZ -- Branch on less than zero
含义:比较如果存储地址数值小于零,则偏移地址逻辑左移两位
if $s < 0 offset << 2
bltz $s, offset

BLTZAL -- Branch on less than zero and link
含义:比较如果存储地址数值小于零,则把返回的地址存入ar存储地址中
if $s < 0 offset << 2 $31 = PC + 8 (PC-程序计数器) $31就是ar
bltzal $s, offset

BNE -- Branch on not equal
含义:比较两个存储地址数值不相等,则偏移地址逻辑左移两位
if $s != $t offset << 2
bne $s, $t, offset

DIV -- Divide
含义:除法运算,商存入LO,余数存入HI
$LO = $s / $t $HI = $s % $t
div $s, $t

DIVU -- Divide unsigned
含义:无符号除法,商存入LO,余数存入HI
$LO = $s / $t $HI = $s % $t
divu $s, $t

J -- Jump
含义:跳到计算所得地址
PC = nPC nPC = (PC & 0xf0000000) target << 2
j target

JAL -- Jump and link
含义:跳到计算所得地址,并存入ar中
$31 = PC + 8(or nPC + 4); PC = nPC; nPC = (PC & 0xf0000000) | (target << 2); 
jal target

JR -- Jump register
含义:跳到存储地址数值中
PC = nPC; nPC = $s; 
jr $s

LB -- Load byte
含义:从叙述地址载入一个字节到存储地址数值中
$t = MEM[$s + offset]
lb $t, offset($s)

LUI -- Load upper immediate
含义:立即数值取左十六位,并存入存储地址($t)。低位补零
$t = (imm << 16);
lui $t, imm

LW -- Load word
含义:从叙述地址载入一个字(从某MEM中,提取offest后面的值+入$s)到存储地址中
$t = MEM[$s + offset]; 
lw $t, offset($s)

MFHI -- Move from HI
含义:把HI存储地址数值的值放到叙述存储地址中
$d = $HI
mfhi $d

MFLO -- Move from LO
含义:把LO存储地址数值的值放到叙述存储地址中
$d = $LO
mflo $d

MULT -- Multiply
含义:两个存储地址数值相乘结果存入LO中
$LO = $s * $t
mult $s, $t

MULTU -- Multiply unsigned
含义:无符号两个存储地址数值相乘结果存入LO中
$LO = $s * $t
multu $s, $t

NOOP -- no operation
含义:不做任何操作

OR -- Bitwise or
含义:逻辑或两个存储地址数值结果存入一个存储地址中
$d = $s | $t
or $d, $s, $t

ORI -- Bitwise or immediate
含义:逻辑或一个存储地址数值和一个立即数的值结果存入一个存储地址中
$t = $s | imm
ori $t, $s, imm

SB -- Store byte
含义:存储一个字节
MEM[$s + offset] = (0xff & $t); 
sb $t, offset($s)

SLL -- Shift left logical 
含义:逻辑左移
$d = $t << h   h:为移动的位数
sll $d, $t, h

SLLV -- Shift left logical variable
含义:指定循环次数的逻辑左移
$d = $t << $s
sllv $d, $t, $s

SLT -- Set on less than (signed)
含义:比较
if $s < $t $d = 1
slt $d, $s, $

SLTI -- Set on less than immediate (signed)
含义:比较,与立即数
if $s < imm $t = 1
slti $t, $s, imm

SLTIU -- Set on less than immediate unsigned
含义:比较,与无符号立即数
if $s < imm $t = 1
sltiu $t, $s, imm

SLTU -- Set on less than unsigned
含义:比较,与无符号数
if $s < $t $d = 1
sltu $d, $s, $t

SRA -- Shift right arithmetic
含义:算术左移
$d = $t >> h
sra $d, $t, h

SRL -- Shift right logical
含义:逻辑右移
$d = $t >> h
srl $d, $t, h

SRLV -- Shift right logical variable
含义:指定循环次数的逻辑右移
$d = $t >> $s
srlv $d, $t, $s

SUB -- Subtract
含义:两个存储地址数值相减结果存入一个存储地址中
$d = $s - $t
sub $d, $s, $t

SUBU -- Subtract unsigned
含义:两个无符号存储地址数值相减结果存入一个存储地址中
$d = $s - $t
subu $d, $s, $t

SW -- Store word
含义:存储一个字
MEM[$s + offset] = $t
sw $t, offset($s)

SYSCALL -- System call(默认为系统储存)
含义:产生一个软中断
syscall

XOR -- Bitwise exclusive or
含义:异或两个存储地址数值结果存入一个存储地址中
$d = $s ^ $t
xor $d, $s, $t

XORI -- Bitwise exclusive or immediate
含义:异或一个存储地址数值和一个立即数的值结果存入一个存储地址中
$t = $s ^ imm
xori $t, $s, imm

原创粉丝点击