2022-12-31 12:56:17 +01:00
|
|
|
# Fox32 instructions
|
|
|
|
|
2023-01-01 03:25:31 +01:00
|
|
|
This file describes every fox32 instruction in detail. For a general
|
2023-02-05 13:44:53 +01:00
|
|
|
description of the fox32 CPU and instruction encoding details, see [cpu.md](./cpu.md).
|
|
|
|
|
|
|
|
|
|
|
|
## Arithmetic instructions
|
|
|
|
|
|
|
|
### ADD: add
|
|
|
|
### SUB: subtract
|
|
|
|
### INC: increment (add 1)
|
|
|
|
### DEC: decrement (subtract 1)
|
|
|
|
### CMP: compare
|
|
|
|
### AND: bitwise AND
|
|
|
|
### OR: bitwise OR
|
|
|
|
### NOT: bitwise NOT
|
|
|
|
### XOR: bitwise XOR
|
|
|
|
### BSE: bit set
|
|
|
|
### BCL: bit clear
|
|
|
|
### BTS: test if bit set
|
|
|
|
### SLA: shift left
|
|
|
|
### SRA: shift right arithmetic (with sign extension)
|
|
|
|
### SRL: shift right logical (with zero extension)
|
|
|
|
### ROL: rotate left
|
|
|
|
### ROR: rotate right
|
|
|
|
### MUL: multiply (unsigned)
|
|
|
|
### IMUL: multiply (signed)
|
|
|
|
### DIV: divide (unsigned)
|
|
|
|
### IDIV: divide (signed)
|
|
|
|
### REM: calculate remainder of division (unsigned)
|
|
|
|
### IREM: remainder (signed)
|
|
|
|
### NOP: no operation
|
|
|
|
### MOV: move value
|
|
|
|
### MOVZ: move value and clear upper bits in target register
|
|
|
|
### RTA: calculate address relative to instruction pointer
|
|
|
|
|
|
|
|
## Stack instructions
|
|
|
|
|
|
|
|
### PUSH: push value to stack
|
|
|
|
### POP: pop value from stack
|
|
|
|
|
|
|
|
## Control flow instructions
|
|
|
|
|
|
|
|
### JMP: absolute jump
|
|
|
|
### RJMP: relative jump
|
|
|
|
### LOOP: absolute loop
|
|
|
|
### RLOOP: relative loop
|
|
|
|
### CALL: absolute call
|
|
|
|
### RCALL: relative call
|
|
|
|
### RET: return from function
|
|
|
|
### RETI: return from interrupt
|
|
|
|
### ISE: set interrupt enable flag
|
|
|
|
### ICL: clear interrupt enable flag
|
|
|
|
### BRK: debug breakpoint
|
|
|
|
### INT: raise interrupt
|
|
|
|
### HALT: halt CPU
|
|
|
|
|
|
|
|
## MMU instructions
|
|
|
|
|
|
|
|
### MSE: set MMU enable flag
|
|
|
|
### MCL: clear MMU enable flag
|
|
|
|
### FLP: flush page from TLB
|
|
|
|
### TLB: flush TLB and set page directory pointer
|
|
|
|
|
|
|
|
## I/O instructions
|
|
|
|
|
|
|
|
### IN: get input from I/O bus
|
|
|
|
### OUT: output on I/O bus
|