Update assembler/usage
+20
-20
@@ -49,7 +49,7 @@ This document provides a comprehensive reference for the DSA (Damn Simple Archit
|
|||||||
| **MOVS** | `src_reg, dest_reg` | Copy with sign extension |
|
| **MOVS** | `src_reg, dest_reg` | Copy with sign extension |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
mov rg0, rg1 ; Copy rg0 to rg1
|
mov rg0, rg1 ; Copy rg0 to rg1
|
||||||
movs rg0, rg1 ; Copy rg0 to rg1 with sign extension
|
movs rg0, rg1 ; Copy rg0 to rg1 with sign extension
|
||||||
```
|
```
|
||||||
@@ -66,7 +66,7 @@ movs rg0, rg1 ; Copy rg0 to rg1 with sign extension
|
|||||||
| **LDW** | `base_reg, dest_reg [, offset]`<br>`label, dest_reg [, offset]` | Load word (32-bit) |
|
| **LDW** | `base_reg, dest_reg [, offset]`<br>`label, dest_reg [, offset]` | Load word (32-bit) |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
; Direct register addressing
|
; Direct register addressing
|
||||||
ldb rg0, rg1 ; Load byte from address in rg0
|
ldb rg0, rg1 ; Load byte from address in rg0
|
||||||
ldw rg0, rg1, 8 ; Load word from (rg0 + 8)
|
ldw rg0, rg1, 8 ; Load word from (rg0 + 8)
|
||||||
@@ -76,7 +76,7 @@ ldb buffer, rg2 ; Load byte from label 'buffer'
|
|||||||
ldw stack, bpr ; Load stack address into base pointer
|
ldw stack, bpr ; Load stack address into base pointer
|
||||||
```
|
```
|
||||||
**Label Expansions:**
|
**Label Expansions:**
|
||||||
```dsa
|
```asm
|
||||||
; ldb buffer, rg2 expands to:
|
; ldb buffer, rg2 expands to:
|
||||||
lli buffer, rg2 ; Load lower 16 bits of buffer address
|
lli buffer, rg2 ; Load lower 16 bits of buffer address
|
||||||
lui buffer, rg2 ; Load upper 16 bits of buffer address
|
lui buffer, rg2 ; Load upper 16 bits of buffer address
|
||||||
@@ -96,7 +96,7 @@ ldw bpr, bpr ; Load word from address in bpr
|
|||||||
| **STW** | `src_reg, base_reg [, offset]`<br>`src_reg, label [, offset]` | Store word to memory |
|
| **STW** | `src_reg, base_reg [, offset]`<br>`src_reg, label [, offset]` | Store word to memory |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
; Direct register addressing
|
; Direct register addressing
|
||||||
stb rg0, rg1 ; Store byte from rg0 to address in rg1
|
stb rg0, rg1 ; Store byte from rg0 to address in rg1
|
||||||
stw rg0, rg1, 12 ; Store word to (rg1 + 12)
|
stw rg0, rg1, 12 ; Store word to (rg1 + 12)
|
||||||
@@ -106,7 +106,7 @@ stb acc, buffer ; Store byte from accumulator to 'buffer'
|
|||||||
stw rg1, current ; Store word to 'current' variable
|
stw rg1, current ; Store word to 'current' variable
|
||||||
```
|
```
|
||||||
**Label Expansions:**
|
**Label Expansions:**
|
||||||
```dsa
|
```asm
|
||||||
; stb acc, buffer expands to:
|
; stb acc, buffer expands to:
|
||||||
lli buffer, rgf ; Load lower 16 bits of buffer address
|
lli buffer, rgf ; Load lower 16 bits of buffer address
|
||||||
lui buffer, rgf ; Load upper 16 bits of buffer address
|
lui buffer, rgf ; Load upper 16 bits of buffer address
|
||||||
@@ -129,7 +129,7 @@ stw rg1, rgf ; Store word from rg1 to address in rgf
|
|||||||
ensure that you always run **Lli** before **Lui** as **Lli** clears the upper 16 bits.
|
ensure that you always run **Lli** before **Lui** as **Lli** clears the upper 16 bits.
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
lli 0x1234, rg0 ; Load 0x1234 into lower 16 bits of rg0
|
lli 0x1234, rg0 ; Load 0x1234 into lower 16 bits of rg0
|
||||||
lui 0xABCD, rg0 ; Load 0xABCD into upper 16 bits of rg0
|
lui 0xABCD, rg0 ; Load 0xABCD into upper 16 bits of rg0
|
||||||
```
|
```
|
||||||
@@ -146,7 +146,7 @@ lui 0xABCD, rg0 ; Load 0xABCD into upper 16 bits of rg0
|
|||||||
| **JLE** | `addr [, offset_reg]` | Jump if less or equal flags set |
|
| **JLE** | `addr [, offset_reg]` | Jump if less or equal flags set |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
jmp start ; Jump to label 'start'
|
jmp start ; Jump to label 'start'
|
||||||
jmp 4, ret ; Jump to address (4 + ret register)
|
jmp 4, ret ; Jump to address (4 + ret register)
|
||||||
jeq end ; Jump to 'end' if equal flag set
|
jeq end ; Jump to 'end' if equal flag set
|
||||||
@@ -185,7 +185,7 @@ inc rg0 ; rg0 = rg0 + 1
|
|||||||
| **XNOR** | `src1_reg, src2_reg, dest_reg` | Bitwise XNOR |
|
| **XNOR** | `src1_reg, src2_reg, dest_reg` | Bitwise XNOR |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
and rg0, rg1, rg2 ; rg2 = rg0 & rg1
|
and rg0, rg1, rg2 ; rg2 = rg0 & rg1
|
||||||
not rg0, rg1 ; rg1 = ~rg0
|
not rg0, rg1 ; rg1 = ~rg0
|
||||||
```
|
```
|
||||||
@@ -197,7 +197,7 @@ not rg0, rg1 ; rg1 = ~rg0
|
|||||||
| **SHR** | `reg, shift_amount` | Shift right |
|
| **SHR** | `reg, shift_amount` | Shift right |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
shl rg0, 2 ; Shift rg0 left by 2 bits
|
shl rg0, 2 ; Shift rg0 left by 2 bits
|
||||||
shr rg0, 3 ; Shift rg0 right by 3 bits
|
shr rg0, 3 ; Shift rg0 right by 3 bits
|
||||||
```
|
```
|
||||||
@@ -208,7 +208,7 @@ shr rg0, 3 ; Shift rg0 right by 3 bits
|
|||||||
| **CMP** | `reg1, reg2` | Compare registers and set flags |
|
| **CMP** | `reg1, reg2` | Compare registers and set flags |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
cmp rg0, zero ; Compare rg0 with zero register
|
cmp rg0, zero ; Compare rg0 with zero register
|
||||||
cmp rg1, rg2 ; Compare rg1 with rg2
|
cmp rg1, rg2 ; Compare rg1 with rg2
|
||||||
```
|
```
|
||||||
@@ -222,7 +222,7 @@ cmp rg1, rg2 ; Compare rg1 with rg2
|
|||||||
| **IRT** | - | Return from interrupt |
|
| **IRT** | - | Return from interrupt |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
hlt ; Stop processor execution
|
hlt ; Stop processor execution
|
||||||
int 0x21 ; Trigger interrupt 0x21
|
int 0x21 ; Trigger interrupt 0x21
|
||||||
```
|
```
|
||||||
@@ -237,7 +237,7 @@ int 0x21 ; Trigger interrupt 0x21
|
|||||||
| **DW** | `name: value1 [, value2, ...]` | Define words |
|
| **DW** | `name: value1 [, value2, ...]` | Define words |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
db message: "Hello World", 0
|
db message: "Hello World", 0
|
||||||
dh numbers: 1000, 2000, 3000
|
dh numbers: 1000, 2000, 3000
|
||||||
dw stack: 0x10000
|
dw stack: 0x10000
|
||||||
@@ -251,7 +251,7 @@ dw stack: 0x10000
|
|||||||
| **RESW** | `name: size` | Reserve words |
|
| **RESW** | `name: size` | Reserve words |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
resb buffer: 256 ; Reserve 256 bytes
|
resb buffer: 256 ; Reserve 256 bytes
|
||||||
resh array: 100 ; Reserve space for 100 half-words
|
resh array: 100 ; Reserve space for 100 half-words
|
||||||
resw heap: 1024 ; Reserve space for 1024 words
|
resw heap: 1024 ; Reserve space for 1024 words
|
||||||
@@ -264,7 +264,7 @@ resw heap: 1024 ; Reserve space for 1024 words
|
|||||||
| **POP** | `reg` | Pop stack value into register |
|
| **POP** | `reg` | Pop stack value into register |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
push rg0 ; Push rg0 value onto stack
|
push rg0 ; Push rg0 value onto stack
|
||||||
pop ret ; Pop return address
|
pop ret ; Pop return address
|
||||||
```
|
```
|
||||||
@@ -275,7 +275,7 @@ pop ret ; Pop return address
|
|||||||
| **LWI** | `name, reg` | Load address into register |
|
| **LWI** | `name, reg` | Load address into register |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
lwi string, rg1 ; Load address of 'string' into rg1
|
lwi string, rg1 ; Load address of 'string' into rg1
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -287,7 +287,7 @@ lwi string, rg1 ; Load address of 'string' into rg1
|
|||||||
| **RETURN** | - | Return from a function to the caller |
|
| **RETURN** | - | Return from a function to the caller |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
call print::print ; Call the print function from the print namespace
|
call print::print ; Call the print function from the print namespace
|
||||||
return ; Return from the current function
|
return ; Return from the current function
|
||||||
```
|
```
|
||||||
@@ -299,7 +299,7 @@ return ; Return from the current function
|
|||||||
| **INCLUDE** | `module_name "path"` | Include module |
|
| **INCLUDE** | `module_name "path"` | Include module |
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
```dsa
|
```asm
|
||||||
include print "print.dsa"
|
include print "print.dsa"
|
||||||
include fib "fib.dsa"
|
include fib "fib.dsa"
|
||||||
```
|
```
|
||||||
@@ -307,7 +307,7 @@ include fib "fib.dsa"
|
|||||||
|
|
||||||
### Multiplication Library (multiply.dsa)
|
### Multiplication Library (multiply.dsa)
|
||||||
|
|
||||||
```dsa
|
```asm
|
||||||
// multiply.dsa
|
// multiply.dsa
|
||||||
// usage:
|
// usage:
|
||||||
//
|
//
|
||||||
@@ -345,7 +345,7 @@ end:
|
|||||||
|
|
||||||
### Print Library (print.dsa)
|
### Print Library (print.dsa)
|
||||||
|
|
||||||
```dsa
|
```asm
|
||||||
// print.dsa
|
// print.dsa
|
||||||
// usage:
|
// usage:
|
||||||
//
|
//
|
||||||
@@ -402,7 +402,7 @@ reset:
|
|||||||
|
|
||||||
### Example Program (main.dsa)
|
### Example Program (main.dsa)
|
||||||
|
|
||||||
```dsa
|
```asm
|
||||||
include print "./print.dsa"
|
include print "./print.dsa"
|
||||||
|
|
||||||
dw stack: 0x10000
|
dw stack: 0x10000
|
||||||
|
|||||||
Reference in New Issue
Block a user