Tabel Register x86

Kompilasi oleh : Reza Ervani bin Asmanu

Pengetahuan tentang Register adalah hal yang wajib bagi seorang Low-Level Programmer. Berikut ini kami sajkan tabel register untuk arsitektur x86 secara lengkap sebagai cheat sheet bagi mereka yang sedang belajar programming di level sistem

📚 TABEL REGISTER x86 16-bit LENGKAP (Real Mode)

NoRegisterSizeSub-registerCategoryPurposeBisa Diubah?
1AX16-bitAH (8-bit high)
AL (8-bit low)
GeneralAccumulator (Aritmatika utama)
2BX16-bitBH (8-bit high)
BL (8-bit low)
GeneralBase (Pointer ke data/memory)
3CX16-bitCH (8-bit high)
CL (8-bit low)
GeneralCounter (Loop, shift count)
4DX16-bitDH (8-bit high)
DL (8-bit low)
GeneralData (I/O, multiply/divide)
5SI16-bitPointerSource Index
6DI16-bitPointerDestination Index
7BP16-bitPointerBase Pointer (stack frame)
8SP16-bitPointerStack Pointer
9CS16-bitSegmentCode Segment❌ (hanya via far jump)
10DS16-bitSegmentData Segment
11ES16-bitSegmentExtra Segment
12SS16-bitSegmentStack Segment
13IP16-bitSpecialInstruction Pointer❌ (hanya via control flow)
14FLAGS16-bitSpecialStatus Flags❌ (hanya via operations)

🎯 TOTAL COUNT:

  • 14 Register Utama (16-bit)
  • +8 Sub-register 8-bit (AH/AL, BH/BL, CH/CL, DH/DL)
  • = 22 “nama” yang bisa Anda akses dalam kode

🔍 DETAIL SUB-REGISTER:

1. AX dan kawan-kawan:

              HIGH BYTE      LOW BYTE
AX (16-bit): [ AH | AL ]
BX (16-bit): [ BH | BL ]
CX (16-bit): [ CH | CL ]
DX (16-bit): [ DH | DL ]

2. Cara kerjanya:

mov ax, 0x1234  ; Set AX = 0x1234
                ; Otomatis: AH = 0x12, AL = 0x34

mov al, 0x56    ; Ubah AL saja → AX = 0x1256
mov ah, 0x78    ; Ubah AH saja → AX = 0x7856

3. Sub-register tidak independen!

mov ax, 0x1234      ; AX = 0x1234, AH=0x12, AL=0x34
mov al, 0xFF        ; AX sekarang = 0x12FF
                    ; AH tetap 0x12, AL jadi 0xFF

; JADI: Mengubah AL/AH mengubah AX, dan sebaliknya!

📊 TABEL FLAGS REGISTER (16-bit) DETAIL:

BitNamaArti jika = 1Penting untuk
0CFCarry FlagArithmetic overflow/borrow
1(reserved)
2PFParity FlagHasil punya bit 1 genap
3(reserved)
4AFAuxiliary CarryBCD arithmetic
5(reserved)
6ZFZero FlagHasil = 0
7SFSign FlagHasil negatif (bit tertinggi = 1)
8TFTrap FlagSingle-step mode (debugging)
9IFInterrupt FlagInterrupt enabled
10DFDirection FlagString ops: 0=inc, 1=dec
11OFOverflow FlagSigned arithmetic overflow
12-15(reserved)

🎮 CONTOH PENGGUNAAN SEMUA REGISTER:

[org 0x7c00]

start:
    ; 1. General Registers (AX/BX/CX/DX)
    mov ax, 0x1234          ; AX = 0x1234
    mov bh, 0xAB            ; BH = 0xAB → BX = ??AB (BL tidak disentuh)
    mov cl, 10              ; CL = 10 (counter untuk loop)
    mov dl, 0x80            ; DL = 0x80 (drive number untuk disk)

    ; 2. Sub-register untuk BIOS
    mov ah, 0x0E            ; AH = BIOS function
    mov al, 'A'             ; AL = karakter

    ; 3. Pointer Registers
    mov si, pesan           ; SI = source pointer
    mov di, 0x1000          ; DI = destination pointer
    mov bp, sp              ; BP = frame pointer
    ; SP diatur otomatis

    ; 4. Segment Registers
    xor ax, ax
    mov ds, ax              ; DS = 0
    mov es, ax              ; ES = 0
    mov ss, ax              ; SS = 0
    mov sp, 0x7C00          ; SP = stack pointer

    ; 5. CS:IP sudah diatur BIOS
    ; CS = 0x0000 (atau 0x07C0), IP = 0x7C00 (atau 0x0000)

    ; 6. Flags diatur oleh operasi
    cmp ax, bx              ; Set ZF, CF, SF, OF, etc
    je equal                ; Jump jika ZF = 1

    ; String operation dengan DI/SI
    movsb                   ; [ES:DI] = [DS:SI], SI++, DI++

equal:
    hlt

pesan db 'Hello', 0

times 510-($-$$) db 0
dw 0xAA55

⚠️ CATATAN PENTING:

1. Sub-register hanya untuk AX/BX/CX/DX

mov si, data      ; ✅
; mov sh, 0x12    ; ❌ TIDAK ADA! SI tidak punya sub-register
; mov sl, 0x34    ; ❌ TIDAK ADA!

2. 32-bit mode punya EAX/EBX/ECX/EDX

Di Protected Mode 32-bit:

  • EAX = 32-bit (extended AX)
  • AX = lower 16-bit of EAX
  • AH/AL = tetap sama

3. Special behavior:

; CL khusus untuk shift/rotate count
mov cl, 3
shl ax, cl        ; Shift AX left 3 bits

; DX khusus untuk I/O ports
mov dx, 0x3F8     ; COM1 port
in al, dx         ; Read from port

✨ TABEL SUPER LENGKAP (VISUAL):

REGISTER HIERARCHY:

16-bit REAL MODE:
┌─────────────────────────────────────────────────────┐
│ AX BX CX DX │
│ [AH][AL] [BH][BL] [CH][CL] [DH][DL] │
│ 8 8 8 8 8 8 8 8 bits │
├─────────────────────────────────────────────────────┤
│ SI DI BP SP │
│ (no sub) (no sub) (no sub) (no sub) │
├─────────────────────────────────────────────────────┤
│ CS DS ES SS │
│ (segment) (segment) (segment) (segment) │
├─────────────────────────────────────────────────────┤
│ IP FLAGS │
│ (instr ptr) (status) │
└─────────────────────────────────────────────────────┘

32-bit PROTECTED MODE (nanti):
EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP, EFLAGS

Jadi tabel sebelumnya kurang lengkap karena tidak menyertakan AH/AL dkk. Sekarang sudah lengkap! 🎯

Kesimpulan: x86 punya 14 register utama + 8 sub-register 8-bit = total 22 “nama” yang bisa Anda gunakan dalam kode assembly!