Instrukcje assemblera¶
Podstawowe operacje logiczne, arytmetyczne i powiązane¶
Podstawowa składnia asm:
; To jest komentarz
mov eax, 7 ; ustaw eax na 7
mov eax, ebx ; ustaw eax na wartość ebx
mov eax, [8] ; ustaw eax na wartość z pamięci pod adresem z 8
mov eax, [ebx] ; ustaw ebx na wartość z pamięci pod adresem odczytanym z ebx
mov eax, [ebx + ecx*4 + 128] ; ustaw eax na wartość z pamięci pod adresem
; obliczonym z wyrażenia [...] (wyrażenia są bardzo ograniczone)
mov CEL, ŹRÓDŁO- skopiuj wartość ze źródła do celu (mogą być to rejestry, lokalizacje w pamięci lub konkretne wartościadd CEL, ŹRÓDŁO- dodaje źródło do celusub CEL, ŹRÓDŁO- odejmuje źródło od celushl/shr CEL, ŹRÓDŁO- wykonuje przesunięcie bitowe w lewo/prawo na celu o źródło bitówxchg A, B- zamienia A z B (muszą być to rejestry bądź rejestr i miejsce w pamięci)lea CEL, ADRES- ADRES podaje się jak miejsce w pamięci, ale jest ono obliczane i zapisywane do celu tak jak robi tomovmul B- mnoży (unsigned) rax przez B, zapisuje wynik do rdx(wyższe bity) i rax(niższe bity)imul B- tak jak mul, ale wykonuje mnożenie ze znakiem (signed)imul CEL, ŹRÓDŁO- mnoży cel przez źródło, zapisuje wynik do celuimul CEL, A, B- mnoży A przez B i zapisuje do celudiv B- dzieli(unsigned) rdx:rax przez B, zapisuje część całkowitą do rdx, a resztę do eaxidiv B- tak jak div, ale dzieli ze znakiem (signed)neg A- wykonuje negację A, zgodnie z metodą 2’s complement (A <- ~A + 1)cdq- Convert dword to qword - rozszerza znak rax do rdxinc A- zwiększa A o 1dec A- zmniejsza A o 1and/or/xor CEL, ŹRÓDŁO- wykonuje odpowiednią operację logiczną i zapisuje wynik do celunot A- neguje wszystkie bity A
push A- odkłada wartość/rejestr A na stospop A- zdejmuje wartość ze stosu i zapisuje do Apushf- odkłada flagi procesora na stosiepopf- zdejmuje flagi procesora ze stosu
nop- nic nie robi :Dnaz.wa:- etykieta, oznacza adres kolejnej instrukcji; jeżeli zaczyna się kropką, to jest lokalna dla nadrzędnej etykietyjmp ADRES- wykonuje skok do adresu (ustawia rip na adres)call ADRES- odkłada adres następnej instrukcji na stos, a następnie skacze do adresu (jak wywołanie funkcji)ret- zdejmuje adres ze stosu i do niego skacze (jak powrót z funkcji)int BAJT- wywołuje przerwanie programowe o podanym numerze (1-bajtowym)- (tylko 64-bitowe)
syscall- obsługuje syscall zgodnie z interfejsem systemu operacyjnego
test A, B- wykonuje and bitowy na A i B, flaga znaku jest ustawiana na najbardziej znaczący bit, zera jeżeli wynik jest zerem, parzystości, gdy wynik ma parzystą liczbę jedynekcmp A, B- porównuje A z B i ustawia odpowiednie flagije/jz ADRES- skacze gdy ZF=1 (cmp: A==B)jne/jnz ADRES- skacze gdy ZF=0 (cmp: A!=B)jg ADRES- skacze gdy SF=OF;ZF=0 (cmp: A>B)jge ADRES- skacze gdy SF=OF;ZF=1 (cmp: A>=B)ja ADRES- tak jak jg, ale porównanie bez znakujae ADRES- tak jak jge, ale porównanie bez znakujl ADRES- skacze gdy SF!=OF (cmp: A>B)jle ADRES- skacze gdy SF!=OF lub ZF=1 (cmp: A>=B)jb(e) ADRES- są dla jl i jle tak jak ja i jae dla jg i jgejo ADRES- skacze gdy OF=1 (overflow flag)jno ADRES- skacze gdy OF=0 (overflow flag)js ADRES- skacze gdy SF=1 (sign flag)jns ADRES- skacze gdy SF=0 (sign flag)loop ADRES- zmniejsza rcx o 1, skacze jeżeli rcx jest jeszcze większe od 0loop(e/ne/z/nz)- jeżeli warunek jest spełniony to działa tak jak loop, jeżeli nie to jest pomijana