From b65b5838f7854fccda928421d37138915c84008b Mon Sep 17 00:00:00 2001 From: lohhiiccc Date: Wed, 29 Jul 2026 11:32:19 +0200 Subject: [PATCH] style: format arrays --- README.md | 106 +++++++++++++++++++++++++++--------------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 8d11d34..526d928 100644 --- a/README.md +++ b/README.md @@ -38,27 +38,27 @@ All computation happens inside registers - RAM just holds the data until it’s #### 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. @@ -85,40 +85,40 @@ All computation happens inside registers - RAM just holds the data until it’s ##### 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