| Pseudoinstructions: Data transfer (register) | ||||||||||||
| Instruction | Real instructions | Semantics | ||||||||||
| Copy contents of register s to register t | ||||||||||||
| mov $rt, $rs | addi $rt, $rs, 0 | R[t] = R[s] | ||||||||||
| Load immediate into register s | ||||||||||||
| li $rs, immed | R[s] = immed | |||||||||||
| The way this is translated depends on whether immed is 16 bits or 32 bits: | ||||||||||||
| li $rs, small | ori $rs, $0, small | R[s] = small | ||||||||||
| li $rs, -small | addiu $rs, $0, -small | R[s] = -small | ||||||||||
| li $rs, big | lui $rs, upper(big) | R[s] = big | ||||||||||
| ori $rs, $rs, lower(big) | ||||||||||||
| small: 16-bit value | ||||||||||||
| big: 32-bit value | ||||||||||||
| Note: upper(big) and lower(big) are not real instruction syntax | ||||||||||||
| The assembler must figure out how to get the upper 16 bits of a 32-bit value: | ||||||||||||
| upper (big) = big31-16 | lower (big) = big15-0 | |||||||||||
| Load address into register s | ||||||||||||
| la $rs, addr | lui $rs, upper(addr) | R[s] = addr | ||||||||||
| ori $rs, $rs, lower(addr) | ||||||||||||