lucia-lasm 2.0.0

LASM - Lucia Assembly Language
Documentation
# LASM - Lucia Assembly Language Documentation


This is the documentation for LASM language.

## Registers


- **General Purpose**: `r0` - `r15` (64-bit)
- **Stack Pointer**: `rsp`
- **Base Pointer**: `rbp`

---

## Instructions


### Data Movement


- `mov <src>, <dst>` — Move value from source to destination  
- `ldr <reg>, [<reg>]` — Load from memory address in register  
- `str <reg>, [<reg>]` — Store to memory address in register  
- `load "var", <reg>` — Load Rust variable into register  
- `push <reg>, "var"` — Store register value to Rust variable  

### Arithmetic


- `add <dst>, <src>` — Add  
- `sub <dst>, <src>` — Subtract  
- `mul <dst>, <src>` — Multiply  
- `div <dst>, <src>` — Divide  
- `mod <dst>, <src>` — Modulo  

### Floating Point Arithmetic


- `fadd <dst>, <src>` — Add floats  
- `fsub <dst>, <src>` — Subtract floats  
- `fmul <dst>, <src>` — Multiply floats  
- `fdiv <dst>, <src>` — Divide floats  
- `fmod <dst>, <src>` — Modulo floats  

### Logic


- `and <dst>, <src>` — Bitwise AND  
- `or <dst>, <src>` — Bitwise OR  
- `xor <dst>, <src>` — Bitwise XOR  
- `not <dst>` — Bitwise NOT  
- `shl <dst>, <src>` — Shift left  
- `shr <dst>, <src>` — Shift right  

### Control Flow


- `cmp <left>, <right>` — Compare values  
- `beq <label>` — Branch if equal  
- `bne <label>` — Branch if not equal  
- `blt <label>` — Branch if less than  
- `bgt <label>` — Branch if greater than  
- `ble <label>` — Branch if less or equal  
- `bge <label>` — Branch if greater or equal  
- `jmp <label>` — Unconditional jump  
- `call <label>` — Call subroutine  
- `ret` — Return from subroutine  

### Stack Operations


- `pushr <reg>` — Push register onto stack  
- `popr <reg>` — Pop from stack into register  

---

## Operands


- **Immediate values**: Numbers (e.g., `42`) or strings (e.g., `"hello"`)  
- **Registers**: `r0` - `r15`  
- **Labels**: For jumps and calls  

---

## Syscalls


### I/O


- `syscall write` — Write to fd (`r0` = fd, `r1` = buffer, `r2` = count)  
- `syscall read` — Read from fd  
- `syscall print_int` — Print integer (`r0`)  
- `syscall print_float` — Print float (`r0` as bits)  
- `syscall print_str` — Print null-terminated string (`r0`)  
- `syscall flush` — Flush output (`r0` = fd)  

### Memory


- `syscall malloc` — Allocate memory (`r0` = size, returns ptr in `r0`)  
- `syscall free` — Free memory (`r0` = ptr)  
- `syscall memcpy` — Copy memory (`r0` = dst, `r1` = src, `r2` = len)  
- `syscall memset` — Set memory (`r0` = dst, `r1` = val, `r2` = len)  

### Strings


- `syscall strcmp` — Compare strings (`r0` = str1, `r1` = str2)  
- `syscall strcpy` — Copy string (`r0` = dst, `r1` = src)  
- `syscall strlen` — Get string length (`r0` = str)  
- `syscall starts_with` — Check prefix (`r0` = str, `r1` = prefix)  
- `syscall streq` — Check equality (`r0` = str1, `r1` = str2)  
- `syscall ends_with` — Check suffix (`r0` = str, `r1` = suffix)  
- `syscall trim` / `trim_start` / `trim_end` — Trim whitespace  
- `syscall isws` — Check if string is all whitespace  

### Conversion


- `syscall atoi` — String → integer  
- `syscall atof` — String → float  
- `syscall itoa` — Integer → string  
- `syscall ftoa` — Float → string  
- `syscall itof` — Integer → float  
- `syscall ftoi` — Float → integer  

### Time & Random


- `syscall time` — Current time (ns, returns in `r0`)  
- `syscall fmt_time` — Format time (`r0` = total_nanos, `r1` = format, `r2` = buffer)  
- `syscall rand` — Generate random float (`r0` = seed)  

### Utilities


- `syscall sleep` — Sleep (`r0` = ms)  
- `syscall system` — Execute command (`r0` = command string)  

### System


- `syscall exit` — Exit program (`r0` = status)  

---

## Syntax Details


- **Comments**: Start with `;`  
- **Labels**: End with `:`  
- **Strings**: Double quotes, null-terminated automatically  
- **Numbers**: Decimal integers, can be used as immediates  
- **Case Sensitive**: Keywords and registers  

---

## Examples


### Hello World


```asm
mov "Hello, World!\n", r1
mov 1, r0
mov 14, r2
syscall write

mov 0, r0
syscall exit
````

### Calculator


```asm
mov 10, r0
mov 20, r1
add r0, r1

syscall print_int
mov "\n", r1
mov 1, r0
mov 1, r2
syscall write

mov 0, r0
syscall exit
```