chore: update README

This commit is contained in:
lohhiiccc 2026-06-27 14:39:51 +02:00
parent 3705bdd8b3
commit 2fab257d1f

View file

@ -47,18 +47,18 @@ All computation happens inside registers - RAM just holds the data until its
#### General-purpose registers #### General-purpose registers
| 64-bit | 32-bit | 16-bit | 8-bit high | 8-bit low | Conventional use | | 64-bit | 32-bit | 16-bit | 8-bit high | 8-bit low | Category | Conventional use |
|--------|--------|--------|------------|-----------|-----------------| |--------|--------|--------|------------|-----------|----------|-----------------|
| `rax` | `eax` | `ax` | `ah` | `al` | Return value, accumulator | | `rax` | `eax` | `ax` | `ah` | `al` | Caller-saved | Return value, accumulator |
| `rbx` | `ebx` | `bx` | `bh` | `bl` | Callee-saved | | `rbx` | `ebx` | `bx` | `bh` | `bl` | Callee-saved | General purpose |
| `rcx` | `ecx` | `cx` | `ch` | `cl` | 4th argument | | `rcx` | `ecx` | `cx` | `ch` | `cl` | Caller-saved | 4th argument |
| `rdx` | `edx` | `dx` | `dh` | `dl` | 3rd argument | | `rdx` | `edx` | `dx` | `dh` | `dl` | Caller-saved | 3rd argument |
| `rsi` | `esi` | `si` | - | `sil` | 2nd argument | | `rsi` | `esi` | `si` | - | `sil` | Caller-saved | 2nd argument |
| `rdi` | `edi` | `di` | - | `dil` | 1st argument | | `rdi` | `edi` | `di` | - | `dil` | Caller-saved | 1st argument |
| `r8` | `r8d` | `r8w` | - | `r8b` | 5th argument | | `r8` | `r8d` | `r8w` | - | `r8b` | Caller-saved | 5th argument |
| `r9` | `r9d` | `r9w` | - | `r9b` | 6th argument | | `r9` | `r9d` | `r9w` | - | `r9b` | Caller-saved | 6th argument |
| `r10``r11` | `r10d``r11d` | `r10w``r11w` | - | `r10b``r11b` | Caller-saved (scratch) | | `r10``r11` | `r10d``r11d` | `r10w``r11w` | - | `r10b``r11b` | Caller-saved | Scratch |
| `r12``r15` | `r12d``r15d` | `r12w``r15w` | - | `r12b``r15b` | Callee-saved | | `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 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. > Writing to a 16-bit or 8-bit register leaves the upper bits unchanged.
@ -76,27 +76,32 @@ All computation happens inside registers - RAM just holds the data until its
#### Branching #### Branching
| Instruction | Description | ##### Flag-setting
|-------------|-------------|
| `cmp a, b` | Compare a and b (sets flags, no result stored) | | Instruction | Flags set | Description |
| `test a, b` | Bitwise AND to set flags (no result stored) | |-------------|-----------|-------------|
| `jmp label` | Unconditional jump | | `cmp a, b` | ZF, SF, OF, CF | Computes `a b`, discards result |
| `je label` | Jump if equal (ZF=1) | | `test a, b` | ZF, SF, PF | Computes `a AND b`, discards result |
| `jne label` | Jump if not equal (ZF=0) |
| `jz label` | Jump if zero (ZF=1) | ##### Conditional jumps
| `jnz label` | Jump if not zero (ZF=0) |
| `jo label` | Jump if overflow (OF=1) | | Instruction | Flags | Condition | Description |
| `jno label` | Jump if no overflow (OF=0) | |-------------|-------|-----------|-------------|
| `js label` | Jump if sign / negative (SF=1) | | `jmp` | - | always | Unconditional jump |
| `jns label` | Jump if no sign / positive (SF=0) | | `je` / `jz` | ZF | ZF = 1 | Equal / Zero |
| `jg label` | Jump if greater (signed) | | `jne` / `jnz` | ZF | ZF = 0 | Not equal / Not zero |
| `jge label` | Jump if greater or equal (signed) | | `jo` | OF | OF = 1 | Overflow |
| `jl label` | Jump if less (signed) | | `jno` | OF | OF = 0 | No overflow |
| `jle label` | Jump if less or equal (signed) | | `js` | SF | SF = 1 | Sign (negative) |
| `ja label` | Jump if above (unsigned) | | `jns` | SF | SF = 0 | No sign (positive) |
| `jae label` | Jump if above or equal (unsigned) | | `jg` | ZF, SF, OF | ZF=0 ∧ SF=OF | Greater (signed) |
| `jb label` | Jump if below (unsigned) | | `jge` | SF, OF | SF = OF | Greater or equal (signed) |
| `jbe label` | Jump if below or equal (unsigned) | | `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 #### Arithmetic