Copy Link
Add to Bookmark
Report

Playstation Instructions

PS_2's profile picture
Published in 
Playstation
 · 13 Jun 2021

 PSX Instructions 

Instruction Description Syntax Result
----------- ----------- ------ ------
ADD Add Word ADD rd, rs, rt rd = rs + rt
ADDI Add Immediate Word ADDI rt, rs, immed rt = rs + immed.
ADDIU Add Immediate Unsigned Word ADDIU rt, rs, immed. rt = rs + immed.
ADDU Add Unsigned Word ADDU rd, rs, rt rd = rs + rt
AND And AND rd, rs, rt rd = rs AND rt
ANDI And Immediate ANDI rt, rs, immed. rt = rs AND immed.
BEQ Branch on Equal BEQ rs, rt, offset if (rs = rt) branch
BEQL Branch on Equal Likely BEQL rs, rt, offset if (rs = rt) branch(likely)
BGEZ Branch on >= 0 BGEZ rs, offset if (rs > 0) branch
BGEZAL Branch >= 0 and Link BGEZAL rs, offset if (rs >= 0) call/ret
BGEZALL Branch >= 0 and Link Likely BGEZALL rs, offset if (rs >= 0) call/ret(likely)
BGEZL Branch on >= 0 Likely BGEZL rs, offset if (rs > 0) branch(likely)
BGTZ Branch > 0 BGTZ rs, offset if (rs > 0) branch
BGTZL Branch > 0 Likely BGTZL rs, offset if (rs > 0) branch(likely)
BLEZ Branch <= 0 BLEZ rs, offset if (rs <= 0) branch
BLEZL Branch <= 0 Likely BLEZL rs, offset if (rs <= 0) branch(likely)
BLTZ Branch < 0 BLTZ rs, offset if (rs < 0) branch
BLTZAL Branch < 0 and Link BLTZAL rs, offset if (rs < 0) call/return
BLTZALL Branch < 0 and Link Likely BLTZALL rs, offset if (rs < 0) call/ret-likely
BLTZL Branch < 0 Likely BLTZL rs, offset if (rs < 0) branch(likely)
BNE Branch != BNE rs, rt, offset if (rs != rt) branch
BNEL Branch != Likely BNEL rs, rt, offset if (rs != rt) branch(likely)
BREAK Breakpoint BREAK breakpoint exception
COPz Coprocessor Operation COP(0/1/2/3) function copressor operation
DADD Doubleword Add DADD rd, rs, rt rd = rs + rt
DADDI Doubleword Add Immediate DADD rd, rs, immed. rd = rs + immed.
DADDIU Doubleword Add Immed Unsigned DADDIU rd, rs, immed. rd = rs + immed.
DADDU Doubleword Add Unsigned DADDU rd, rs, rt rd = rs + rt
DDIV Doubleword Divide DDIV rs, rt LO = rs / rt | HI = rs % rt 1
DDIVU Doubleword Divide Unsigned DDIVU rs, rt LO = rs / rt | HI = rs % rt 1
DIV Divide Word DIV rs, rt LO = rs / rt | HI = rs % rt 1
DIVU Divide Word Unsigned DIVU rs, rt LO = rs / rt | HI = rs % rt 1
DMULT Doubleword Multiply DMULT rs, rt LO = rs * rt | HI = rs * rt 2
DMULTU Doubleword Multiply Unsigned DMULTU rs, rt LO = rs * rt | HI = rs * rt 2
DSLL Doubleword Shift Left Logical DSLL rd, rt, sa rd = rt << sa 3
DSLL32 Doubleword << Logic +32 DSLL32 rd, rt, sa rd = rt << (sa + 32) 3
DSLLV Doubleword << Logic. Variable DSLLV rd, rt, rs rd = rt << rs 3
DSRA Doubleword << Arithmetic DSRA rd, rt, sa rd = rt >> sa 4
DSRA32 Doubleword << Arith +32 DSRA32 rd, rt, sa rd = rt >> (sa + 32) 4
DSRAV Doubleword >> Arith Variable DSRAV rd, rt, rs rd = rt >> rs 4
DSRL Doubleword Shift Right Logic. DSRL rd, rt, sa rd = rt >> sa 3
DSRL32 Doubleword >> Logic+32 DSRL32 rd, rt, sa rd = rt >> (sa + 32) 3
DSRLV Doubleword >> Logic. Variable DSRLV rd, rt, rs rd = rt >> rs 3
DSUB Doubleword Subtract DSUB rd, rs, rt rd = rs - rt
DSUBU Doubleword Subtract Unsigned DSUBU rd, rs, rt rd = rs - rt
J Jump J address jumps within 256MB
JAL Jump and Link JAL address jumps within 256MB, and ret
JALR Jump and Link Register JALR rs (rd = 31) jumps within 256MB, and ret 5
---- JALR rd, rs 5
JR Jump Register JR rs jumps to GPR(rs)
LB Load Byte LB rt, off(base) rt = memory[base+off] 8 bit
LBU Load Byte Unsigned LBU rt, off(base) rt = memory[base+off] 8 bit
LD Load Doubleword LD rt, off(base) rt = memory[base+off] 64 bit
LDCz Load Doubleword to Coprocess LDC(1/2) rt, off(base) rt = memory[base+off] 64 bit
LDL Load Doubleword Left LDL rt, off(base) rt = memory[base+off] 6
LDR Load Doubleword Right LDR rt, off(base) rt = memory[base+off] 6
LH Load Halfword LH rt, off(base) rt = memory[base+off] 16 bit
LHU Load Halfword Unsigned LHU rt, off(base) rt = memory[base+off] 16 bit
LL Load Linked Word LL rt, off(base) rt = memory[base+off]
LLD Load Linked Doubleword LLD rt, off(base) rt = memory[base+off]
LUI Load Upper Immediate LUI rt, immed. rt = immed. << 16
LW Load Word LW rt, offset(base) rt = memory[base+off] 32 bit
LWCz Load Word to Coprocessor LWC(1/2/3)rt, offs(base) rt = memory[base+off] 32 bit
LWL Load Word Left LWL rt, offset(base) rt = memory[base+off] 6
LWR Load Word Right LWR rt, offset(base) rt = memory[base+off] 6
LWU Load Word Unsigned LWU rt, offset(base) rt = memory[base+off] 32 bit
MFHI Move From HI Register MFHI rd rd = HI
MFLO Move From LO Register MFLO rd rd = LO
MOVN Move Conditional on Not Zero MOVN rd, rs, rt if (rt != 0) rd = rs
MOVZ Move Conditional on Zero MOVZ rd, rs, rt if (rt = 0) rd = rs
MTHI Move To HI Register MTHI rd HI = rd
MTLO Move To LO Register MTLO rd LO = rd
MULT Multiply Word MULT rs, rt LO = rs * rt | HI = rs * rt 2
MULTU Multiply Unsigned Word MULTU rs, rt LO = rs * rt | HI = rs * rt 2
NOR Not Or NOR rd, rs, rt rd = rs NOR rt
OR Or OR rd, rs, rt rd = rs OR rt
ORI Or Immediate ORI rd, rs, immed. rd = rs OR immed
PREF Prefetch PREF type, off(base) See prefetch table for type
SB Store Byte SB rt, off(base) memory[base+off] = rt 8 bit
SC Store Conditional Word SC rt, off(base) memory[base+off] = rt 8 bit 7
SCD Store Conditional Doubleword SCD rt, off(base) memory[base+off] = rt 64 bit7
SD Store Doubleword SD rt, off(base) memory[base+off] = rt 64 bit
SDCz Store Doubleword From Copr SDC(1/2) rt, off(base) memory[base+off] = rt 64 bit
SDL Store Doubleword Left SDL rt, off(base) memory[base+off] = rt 64 bit8
SDR Store Doubleword Right SDR rt, off(base) memory[base+off] = rt 64 bit8
SH Store Halfword SH rt, off(base) memory[base+off] = rt 16 bit
SLL Shift Word Left Logical SLL rd, rt, sa rd = rt << sa 3
SLLV Shift Word Left Logic Variab SLLV rd, rt, rs rd = rt << rs 3
SLT Set On Less Than SLT rd, rs, rt rs = (rs < rt)
SLTI Set On Less Than Immediate SLTI rd, rs, immed. rs = (rs < immed)
SLTIU Set On < Immediate Unsigned SLTIU rd, rs, immed. rs = (rs < immed)
SLT Set On Less Than Unsigned SLTU rd, rs, rt rs = (rs < rt)
SRA Shift Word Right Arithmetic SRA rd, rt, sa rd = rt >> sa 4
SRAV Shift Word >> Arith Variable SRAV rd, rt, rs rd = rt >> rs 4
SRL Shift Word Right Logical SRL rd, rt, sa rt = rt >> sa 3
SRLV Shift Word Right Logic Variab SRLV rd, rt, rs rt = rt >> rs 3
SUB Subtract Word SUB rd, rs, rt rd = rs - rt
SUBU Subtract Unsigned Word SUBU rd, rs, rt rd = rs - rt
SW Store Word SW rt, off(base) memory[base+off] = rt 32 bit
SWCz Store Word From Coprocessor SWC(1/2/3)rt, off(base) memory[base+off] = rt 32 bit
SWL Store Word Left SWL rt, off (base) memory[base+off] = rt 32 bit8
SWR Store Word Right SWR rt, off (base) memory[base+off] = rt 32 bit8
SYNC Synchronize Shared Memory SYNC Synchroizes memory
SYSCALL System Call SYSCALL Causes System Call exception
TEQ Trap if Equal TEQ rs, rt if (rs = rt) Trap
TEQI Trap if Equal Immediate TEQI rs, immed. if (rs = immed) Trap
TGE Trap if Greater or Equal TGE rs, rt if (rs >= rt) Trap
TGEI Trap if >= Immediate TGEI rs, immed if (rs >= immed) Trap
TGEIU Trap if >= Immediate Unsigned TGEIU rs, immed if (rs >= immed) Trap
TGEU Trap if >= Unsigned TGEU rs, rt if (rs >= rt) Trap
TLT Trap if Less Than TLT rs, rt if (rs < rt) Trap
TLTI Trap if Less Than Immediate TLTI rs, immed if (rs < immed) Trap
TLTIU Trap if < Immediate Unsigned TLTIU rs, immed if (rs < immed) Trap
TLTU Trap if Less Than Unsigned TLT rs, rt if (rs < rt) Trap
TNE Trap if Not Equal TNE rs, rt if (rs != rt) Trap
TNEI Trap if Not Equal Immediate TNEI rs, immed. if (rs != immed) Trap
XOR Exclusive Or XOR rd, rs, rt rd = rs XOR rt
XORI Exclusive Or Immediate XORI rt, rs, immed rt = rs XOR immed.

Notes:
1. LOW holds the integer value of the divide, HI holds the remainder.
2. LOW holds the low 32 bits of the multiply, HI holds the high 32 bits of the multiply.
3. On logical shifts 0s are inserted in the incoming bits.
4. On arithmetic shifts the sign bit is duplicated in the incoming bits.
5. JALR instructions jumps to GPR(rs), and uses rd to select GPR for return. Defaults to 31.
6. LDL, LDR, LWL, and LWR load parts of a double word from unaligned memory
7. SC, SCD only updates if changes were made?
8. SDL, SDR, SWL, and SWR store parts of a double word to unaligned memory
Prefetch Table

Value Name Description
----- ---- -----------
0 load Data is expected to be loaded but not modified
1 store Data is expected to be stored or modified
2-3 ----- Not defined
4 load_streamed Data is expected to be loaded but not reused, and not modified
5 store_streamed Data is expected to be stored or modified, but not reused
6 load_retained Data is expected to be loaded and reused, but not modified
7 store_retained Data is expected to be stored or modified, and reused
8-31 ----- Not defined

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT