Moorov zakon: podvojitev št. tranzistorjev na čipih vsaki 2 leti
Arhitektura
Pomnilnik in registri
32b registri do 4GB pomnilnika (“protected mode” omejitev preseže)
- osnovna naslovljiva enota: 1B
- beseda (WORD): 2B
- dvojna beseda (DWORD): 4B
- podaljšana beseda (QWORD): 8B
Razširjanje starih registrov v nove in nove
Načini naslavljanja
- Registrsko: prenos operandov med registri (npr.
mov eax,ebx) - Takojšnje (npr.
mov eax,20) - Neposredno: iz pomnilnika preko podanega naslova (npr.
mov ebx,[1000]) - Neposredno z odmikom (npr.
mov ebx,[tabela+5]) - Registrsko posredno: dostop do pomnilnika preko naslova iz registra (npr.
mov ebx,[ebx+5])
Formati ukazov

Prefix: način delovanja ukaza (npr. F2: REP ukaz ponovi ECX-krat)
Opcode: možno več opcode-ov za isti ukaz - opcije (npr. ADD: 000000ds d=direction (pomnilnik, register), s=size(8b, 16/32b))
Mod R/M:
- Mod: način naslavljanja
- Reg: katere registre bomo uporabili
- R/M: način uporabe registrov
SIB: UN = odmik + scale*index + base
Odmik: odmik
Immediate: operand
Najpomembnejši ukazi
- mov (Move): prenos vrednosti (npr.
mov eak,nasloveax=(naslov)) - lea (Load Effective Address): prenos naslova (npr.
lea eax,nasloveax=naslov) - add / sub (Integer Addition / Subtraction) (npr.
add eax,nasloveax=eax+(naslov)) - inc / dec (Increment / Decrement)
- imul (Integer Multiplication) (npr.
imul eax,nasloveax=eax*(dword)(naslov)) - idiv (Integer Division): 64b deljenec, sestavljen zgoraj 32b iz
edxin spodaj 32b izeex; kvocient se zapiše veax, ostanek pa vedx(npr.idiv ebxedx:eex / ebx = eax:edx) - and / or / xor / not / shl / shr (npr.
shl-shift left hitrejše kot množenje z 2)
Sklad
Shranjevanje 32b vrednosti lokalnih spremenljivkih in rezultatov
ESP kaže na vrh sklada - zadnje odloženi element
Ukaza:
PUSH <reg32/mem/const32>ESP -= 4, operand odloži na ESPPOP <reg32/mem>vrednost na ESP shrani v operand, ESP += 4
Podprogrami - calling convention
- Stanje sklada tik pred klicem funkcije:

JUMP ime_podprogramapush ebp,mov ebp,esp,sub esp,20

- Pridobivanje:
- i-te lokalne spremenljivke:
mov eax,[ebp-4*(i+1)] - i-tega parametra:
mov eax,[ebp+8+i*4]
- i-te lokalne spremenljivke:
- Rezultat podprograma shranimo v
eax push esp,ebp,pop ebpESP vrnemo na EBP in pop na povratni naslov
Zastavice
Opisujejo stanje procesorja, nastavljajo se kot posledica operacij ali ročno, shranjene v registru FLAGS=EFLAGS:RFLAGS
Kontrolne zastavice
DF (Direction Flag): vpliva na smer “auto-increment” operacij (npr. kopiranje big ali little endian)
DF=0od spodnjega proti zgornjemu /DF=1od zgornjega proti spodnjemu
Statusne zastavice
ZF (Zero Flag): zadnji rezultat = 0 ZF=1
SF (Sign Flag): zadnji rezultat < 0 SF=1
PF (Parity Flag): spodnjih 8b rezultsts ima sodo enic PF=1
CF (Carry Flag) / OF (Overflow Flag): napačen rezultat prejšnje nepredznačene / predznačene aritmetične operacije
Direktive za deklaracijo in inicializacijo
DB (Declare Byte) / DW (Declare Word) / DD (Declare Double)
a db 64char a = 64b dw ?short bc dd 1,2,3int c[] = {1,2,3}d dd 100 dup(0)int d[100]+ inicializacija na 0str db 'hello',0char str[] = "Hello"([H,e,l,l,o, \0])
Sistemski klici
Kličemo prekinitev int 0x80: številka sistemskega kilca v eax, parametri v ostalih registrih

Sintaksa Intel vs AT&T
- Posebni znaki pred operandi (
push 4pushl $4) - Vrstni red operandov (
add eax,4addl $4,%eax) - Dodatni znak na koncu ukaza pove velikost operanda (
mov al,byte ptr foomovb foo,%al) - Dolgi skoki (
call/jmp far section:offsetlcall/jump $section,$offset)