Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Hardware Instructions

Data Movement Instructions

MnemonicOperandsDescription
MOVsrc_reg, dest_regCopy value from source to destination register
MOVSsrc_reg, dest_regCopy with sign extension

Examples:

mov rg0, rg1        ; Copy rg0 to rg1
movs rg0, rg1       ; Copy rg0 to rg1 with sign extension

Memory Access Instructions

Load Instructions

MnemonicOperandsDescription
LDBbase_reg, dest_reg [, offset]
label, dest_reg [, offset]
Load byte from memory
LDBSbase_reg, dest_reg [, offset]
label, dest_reg [, offset]
Load byte with sign extension
LDHbase_reg, dest_reg [, offset]
label, dest_reg [, offset]
Load half-word (16-bit)
LDHSbase_reg, dest_reg [, offset]
label, dest_reg [, offset]
Load half-word with sign extension
LDWbase_reg, dest_reg [, offset]
label, dest_reg [, offset]
Load word (32-bit)

Examples:

; Direct register addressing
ldb rg0, rg1        ; Load byte from address in rg0
ldw rg0, rg1, 8     ; Load word from (rg0 + 8)

; Label addressing
ldb buffer, rg2     ; Load byte from label 'buffer'
ldw stack, bpr      ; Load stack address into base pointer

Label Expansions:

; ldb buffer, rg2 expands to:
lli buffer, rg2     ; Load lower 16 bits of buffer address
lui buffer, rg2     ; Load upper 16 bits of buffer address  
ldb rg2, rg2        ; Load byte from address in rg2

; ldw stack, bpr expands to:
lli stack, bpr      ; Load lower 16 bits of stack address
lui stack, bpr      ; Load upper 16 bits of stack address
ldw bpr, bpr        ; Load word from address in bpr

Store Instructions

MnemonicOperandsDescription
STBsrc_reg, base_reg [, offset]
src_reg, label [, offset]
Store byte to memory
STHsrc_reg, base_reg [, offset]
src_reg, label [, offset]
Store half-word to memory
STWsrc_reg, base_reg [, offset]
src_reg, label [, offset]
Store word to memory

Examples:

; Direct register addressing
stb rg0, rg1        ; Store byte from rg0 to address in rg1
stw rg0, rg1, 12    ; Store word to (rg1 + 12)

; Label addressing
stb acc, buffer     ; Store byte from accumulator to 'buffer'
stw rg1, current    ; Store word to 'current' variable

Label Expansions:

; stb acc, buffer expands to:
lli buffer, rgf     ; Load lower 16 bits of buffer address
lui buffer, rgf     ; Load upper 16 bits of buffer address
stb acc, rgf        ; Store byte from acc to address in rgf

; stw rg1, current expands to:
lli current, rgf    ; Load lower 16 bits of current address
lui current, rgf    ; Load upper 16 bits of current address
stw rg1, rgf        ; Store word from rg1 to address in rgf

Immediate Load Instructions

MnemonicOperandsDescription
LLIimm, dest_regLoad 16-bit immediate into lower 16 bits
Clears upper 16 bits!
LUIimm, dest_regLoad 16-bit immediate into upper 16 bits

Usage

ensure that you always run Lli before Lui as Lli clears the upper 16 bits.

Examples:

lli 0x1234, rg0     ; Load 0x1234 into lower 16 bits of rg0
lui 0xABCD, rg0     ; Load 0xABCD into upper 16 bits of rg0

Jump Instructions

MnemonicOperandsDescription
JMPaddr [, offset_reg]
imm, offset_reg
Unconditional jump
JEQaddr [, offset_reg]Jump if equal flag set
JNEaddr [, offset_reg]Jump if not equal flag set
JGTaddr [, offset_reg]Jump if greater than flag set
JGEaddr [, offset_reg]Jump if greater or equal flags set
JLTaddr [, offset_reg]Jump if less than flag set
JLEaddr [, offset_reg]Jump if less or equal flags set

Examples:

jmp start           ; Jump to label 'start'
jmp 4, ret          ; Jump to address (4 + ret register)
jeq end             ; Jump to 'end' if equal flag set
jgt loop            ; Jump to 'loop' if greater than flag set

Arithmetic Instructions

MnemonicOperandsDescription
ADDsrc1_reg, src2_reg, dest_regAddition
SUBsrc1_reg, src2_reg, dest_regSubtraction
IADDsrc_reg, imm [, dest_reg]Immediate addition
ISUBsrc_reg, imm [, dest_reg]Immediate subtraction
INCregIncrement register by 1
DECregDecrement register by 1

Examples:

add rg0, rg1, rg2   ; rg2 = rg0 + rg1
sub rg0, rg1, rg2   ; rg2 = rg0 - rg1
iadd rg0, 10        ; rg0 = rg0 + 10
// or using alternate syntax
addi rg0, 1         ; rg0 = rg0 + 1
inc rg0             ; rg0 = rg0 + 1

Bitwise Operations

MnemonicOperandsDescription
ANDsrc1_reg, src2_reg, dest_regBitwise AND
ORsrc1_reg, src2_reg, dest_regBitwise OR
XORsrc1_reg, src2_reg, dest_regBitwise XOR
NOTsrc_reg, dest_regBitwise NOT
NANDsrc1_reg, src2_reg, dest_regBitwise NAND
NORsrc1_reg, src2_reg, dest_regBitwise NOR
XNORsrc1_reg, src2_reg, dest_regBitwise XNOR

Examples:

and rg0, rg1, rg2   ; rg2 = rg0 & rg1
not rg0, rg1        ; rg1 = ~rg0

Shift Operations

MnemonicOperandsDescription
SHLreg, shift_amountShift left
SHRreg, shift_amountShift right

Examples:

shl rg0, 2          ; Shift rg0 left by 2 bits
shr rg0, 3          ; Shift rg0 right by 3 bits

Comparison and Control

MnemonicOperandsDescription
CMPreg1, reg2Compare registers and set flags

Examples:

cmp rg0, zero       ; Compare rg0 with zero register
cmp rg1, rg2        ; Compare rg1 with rg2

System Instructions

MnemonicOperandsDescription
HLT-Halt processor execution
NOP-No operation
INTinterrupt_codeTrigger interrupt
IRT-Return from interrupt

Examples:

hlt                 ; Stop processor execution
int 0x21            ; Trigger interrupt 0x21