style: format arrays

This commit is contained in:
lohhiiccc 2026-07-29 11:32:19 +02:00
parent 2fab257d1f
commit 79c6954559

124
README.md
View file

@ -38,27 +38,27 @@ All computation happens inside registers - RAM just holds the data until its
#### Special registers
| 64-bit | 32-bit | 16-bit | Name | Purpose |
|--------|--------|--------|------|---------|
| `rsp` | `esp` | `sp` | Stack Pointer | Points to the top of the stack |
| `rbp` | `ebp` | `bp` | Base Pointer | Marks the base of the current stack frame |
| `rip` | `eip` | `ip` | Instruction Pointer | Points to the next instruction to execute |
| `rflags` | `eflags` | `flags` | Flags Register | Stores CPU state flags (zero, carry, sign, overflow...) |
| 64-bit | 32-bit | 16-bit | Name | Purpose |
|----------|----------|---------|---------------------|---------------------------------------------------------|
| `rsp` | `esp` | `sp` | Stack Pointer | Points to the top of the stack |
| `rbp` | `ebp` | `bp` | Base Pointer | Marks the base of the current stack frame |
| `rip` | `eip` | `ip` | Instruction Pointer | Points to the next instruction to execute |
| `rflags` | `eflags` | `flags` | Flags Register | Stores CPU state flags (zero, carry, sign, overflow...) |
#### General-purpose registers
| 64-bit | 32-bit | 16-bit | 8-bit high | 8-bit low | Category | Conventional use |
|--------|--------|--------|------------|-----------|----------|-----------------|
| `rax` | `eax` | `ax` | `ah` | `al` | Caller-saved | Return value, accumulator |
| `rbx` | `ebx` | `bx` | `bh` | `bl` | Callee-saved | General purpose |
| `rcx` | `ecx` | `cx` | `ch` | `cl` | Caller-saved | 4th argument |
| `rdx` | `edx` | `dx` | `dh` | `dl` | Caller-saved | 3rd argument |
| `rsi` | `esi` | `si` | - | `sil` | Caller-saved | 2nd argument |
| `rdi` | `edi` | `di` | - | `dil` | Caller-saved | 1st argument |
| `r8` | `r8d` | `r8w` | - | `r8b` | Caller-saved | 5th argument |
| `r9` | `r9d` | `r9w` | - | `r9b` | Caller-saved | 6th argument |
| `r10``r11` | `r10d``r11d` | `r10w``r11w` | - | `r10b``r11b` | Caller-saved | Scratch |
| `r12``r15` | `r12d``r15d` | `r12w``r15w` | - | `r12b``r15b` | Callee-saved | General purpose |
| 64-bit | 32-bit | 16-bit | 8-bit high | 8-bit low | Category | Conventional use |
|-------------|---------------|---------------|------------|---------------|--------------|---------------------------|
| `rax` | `eax` | `ax` | `ah` | `al` | Caller-saved | Return value, accumulator |
| `rbx` | `ebx` | `bx` | `bh` | `bl` | Callee-saved | General purpose |
| `rcx` | `ecx` | `cx` | `ch` | `cl` | Caller-saved | 4th argument |
| `rdx` | `edx` | `dx` | `dh` | `dl` | Caller-saved | 3rd argument |
| `rsi` | `esi` | `si` | - | `sil` | Caller-saved | 2nd argument |
| `rdi` | `edi` | `di` | - | `dil` | Caller-saved | 1st argument |
| `r8` | `r8d` | `r8w` | - | `r8b` | Caller-saved | 5th argument |
| `r9` | `r9d` | `r9w` | - | `r9b` | Caller-saved | 6th argument |
| `r10``r11` | `r10d``r11d` | `r10w``r11w` | - | `r10b``r11b` | Caller-saved | Scratch |
| `r12``r15` | `r12d``r15d` | `r12w``r15w` | - | `r12b``r15b` | Callee-saved | General purpose |
> Writing to a 32-bit register (e.g. `eax`) zeroes the upper 32 bits of its 64-bit counterpart (`rax`).
> Writing to a 16-bit or 8-bit register leaves the upper bits unchanged.
@ -67,58 +67,58 @@ All computation happens inside registers - RAM just holds the data until its
#### Base
| Instruction | Description |
|-------------|-------------|
| `mov dst, src` | Copy src into dst |
| `push src` | Push src onto the stack |
| `pop dst` | Pop top of stack into dst |
| Instruction | Description |
|------------------|----------------------------------------|
| `mov dst, src` | Copy src into dst |
| `push src` | Push src onto the stack |
| `pop dst` | Pop top of stack into dst |
| `lea dst, [src]` | Load effective address of src into dst |
#### Branching
##### Flag-setting
| Instruction | Flags set | Description |
|-------------|-----------|-------------|
| `cmp a, b` | ZF, SF, OF, CF | Computes `a b`, discards result |
| `test a, b` | ZF, SF, PF | Computes `a AND b`, discards result |
| Instruction | Flags set | Description |
|-------------|----------------|-------------------------------------|
| `cmp a, b` | ZF, SF, OF, CF | Computes `a b`, discards result |
| `test a, b` | ZF, SF, PF | Computes `a AND b`, discards result |
##### Conditional jumps
| Instruction | Flags | Condition | Description |
|-------------|-------|-----------|-------------|
| `jmp` | - | always | Unconditional jump |
| `je` / `jz` | ZF | ZF = 1 | Equal / Zero |
| `jne` / `jnz` | ZF | ZF = 0 | Not equal / Not zero |
| `jo` | OF | OF = 1 | Overflow |
| `jno` | OF | OF = 0 | No overflow |
| `js` | SF | SF = 1 | Sign (negative) |
| `jns` | SF | SF = 0 | No sign (positive) |
| `jg` | ZF, SF, OF | ZF=0 ∧ SF=OF | Greater (signed) |
| `jge` | SF, OF | SF = OF | Greater or equal (signed) |
| `jl` | SF, OF | SF ≠ OF | Less (signed) |
| `jle` | ZF, SF, OF | ZF=1 SF≠OF | Less or equal (signed) |
| `ja` | CF, ZF | CF=0 ∧ ZF=0 | Above (unsigned) |
| `jae` | CF | CF = 0 | Above or equal (unsigned) |
| `jb` | CF | CF = 1 | Below (unsigned) |
| `jbe` | CF, ZF | CF=1 ZF=1 | Below or equal (unsigned) |
| Instruction | Flags | Condition | Description |
|---------------|------------|--------------|---------------------------|
| `jmp` | - | always | Unconditional jump |
| `je` / `jz` | ZF | ZF = 1 | Equal / Zero |
| `jne` / `jnz` | ZF | ZF = 0 | Not equal / Not zero |
| `jo` | OF | OF = 1 | Overflow |
| `jno` | OF | OF = 0 | No overflow |
| `js` | SF | SF = 1 | Sign (negative) |
| `jns` | SF | SF = 0 | No sign (positive) |
| `jg` | ZF, SF, OF | ZF=0 ∧ SF=OF | Greater (signed) |
| `jge` | SF, OF | SF = OF | Greater or equal (signed) |
| `jl` | SF, OF | SF ≠ OF | Less (signed) |
| `jle` | ZF, SF, OF | ZF=1 SF≠OF | Less or equal (signed) |
| `ja` | CF, ZF | CF=0 ∧ ZF=0 | Above (unsigned) |
| `jae` | CF | CF = 0 | Above or equal (unsigned) |
| `jb` | CF | CF = 1 | Below (unsigned) |
| `jbe` | CF, ZF | CF=1 ZF=1 | Below or equal (unsigned) |
#### Arithmetic
| Instruction | Description |
|-------------|-------------|
| `add dst, src` | dst = dst + src |
| `sub dst, src` | dst = dst - src |
| `inc dst` | dst = dst + 1 |
| `dec dst` | dst = dst - 1 |
| `imul dst, src` | dst = dst * src (signed) |
| `mul src` | rax * src → rdx:rax (unsigned) |
| `idiv src` | rdx:rax / src → rax (quotient), rdx (remainder) (signed) |
| `div src` | rdx:rax / src → rax (quotient), rdx (remainder) (unsigned) |
| `neg dst` | dst = -dst |
| `and dst, src` | dst = dst AND src |
| `or dst, src` | dst = dst OR src |
| `xor dst, src` | dst = dst XOR src (used to zero a register when dst == src) |
| Instruction | Description |
|-----------------|-------------------------------------------------------------|
| `add dst, src` | dst = dst + src |
| `sub dst, src` | dst = dst - src |
| `inc dst` | dst = dst + 1 |
| `dec dst` | dst = dst - 1 |
| `imul dst, src` | dst = dst * src (signed) |
| `mul src` | rax * src → rdx:rax (unsigned) |
| `idiv src` | rdx:rax / src → rax (quotient), rdx (remainder) (signed) |
| `div src` | rdx:rax / src → rax (quotient), rdx (remainder) (unsigned) |
| `neg dst` | dst = -dst |
| `and dst, src` | dst = dst AND src |
| `or dst, src` | dst = dst OR src |
| `xor dst, src` | dst = dst XOR src (used to zero a register when dst == src) |
### System call
@ -158,10 +158,10 @@ Additional arguments are pushed onto the stack. The return value is stored in `r
**Register preservation:**
| Type | Registers | Who saves | Behavior |
|------|-----------|-----------|----------|
| Caller-saved | `rax`, `rcx`, `rdx`, `rsi`, `rdi`, `r8``r11` | Caller | **Will be overwritten** by the called function - save them before `call` if needed |
| Callee-saved | `rbx`, `rbp`, `r12``r15` | Callee | Must be restored before returning |
| Type | Registers | Who saves | Behavior |
|--------------|-----------------------------------------------|-----------|------------------------------------------------------------------------------------|
| Caller-saved | `rax`, `rcx`, `rdx`, `rsi`, `rdi`, `r8``r11` | Caller | **Will be overwritten** by the called function - save them before `call` if needed |
| Callee-saved | `rbx`, `rbp`, `r12``r15` | Callee | Must be restored before returning |
#### Structure of a function