uvod u GNU asembler, asemblersko programiranje Flashcards
(37 cards)
Direktiva .align expr?
Ova direktiva radi poravnanje , ubacice od 0 do expr bajtova kako bi uradila poravnanje, expr mora biti stepen dvojke
.byte 0x55
.align 4 (dodacemo 3 0x00)
.long 0xAA55EE11
Direktiva .ascii “string” ?
Ubacuje string bez nul karaktera
.ascii “JNZ” (0x41 0x4E 0x5A)
Direktiva .asciz “string”?
Ubacuje string sa null karakterom
.asciz “JNZ” (0x41 0x4E 0x5A 0x00)
Direktiva .byte “izraz”?
Ubacuje najt
Direktiva .data?
Sekcija u kojoj se nalaze promenljivi podaci
Direktiva .text?
Sekcija u kojoj se nalazi izvrsni kod
Direktiva .rodata?
Nalaze se konstance
Direktiva .bss?
Nalaze se neinicijalizovani staticki podaci
Direktiva .end?
Kaze da se ovde zavrsava asemblerski kod, sve posle ove direktive smatramo da ne postoji
Diretiva .equ simbol,izraz?
Dodeljuje vrednosti kao i diretiva .set ili =
.equ var, (5*8)-2
<=>
.set var, 0x2A
<=>
var = 0x2A
Direktiva .global?
Kazuje da je ovaj simbol globalam i da se koristi u drugim modulima
Direktiva .word ili .2byte?
Ubacujemo 16obitnu rec, 2 bajta
Direktiva .include “fajl”?
Ubacuje sadrzaj fajla na mesto ove direktive
Direktiva .skip izraz?
Korismo za deklarisanje neinicijalizovanih promenljivi, tj. kao da vrsimo rezervaciju prostora za nju
buffer: .skip 512 (bafer je velicine 512 bajtova)
Direktiva .long ili .4byte?
Ubacuje 32bitnu rec
Direktiva .quad ili .8byte?
Ubacuje 64obitnu rec
Apsolutne i relativne vrednosti?
-apsolutne vrednosti: ne zavise od svog polozaja u izvrsnom kodu
primer: numericka konstanta
-relativne vrednosti: izvrsavaju se u odnosu na neku adresu, koriste samo + i i koriste se za sracunavanje pomeraja
Pravilo mesanja:
rel + apso = rel
apso + rel = rel
rel - aspo = rel
rel - rel = apso
Stanje arhitekture vidljivo programeru?
-PC = adresa sledece instrukcije
-reg banka = registri
-kodovi uslova =status info o poslednjoj aritmeticko logickoj operaciji
-memorija = kod i podaci (.text, .data, .bss) i stek
Kako bi se ovo napisalo na asembleru:
chart c = ‘0’;
short s = 1;
int i = 2;
long l = 3l;
void *p = &1;
float f =5.0f;
double d = 6.0;
chart str[] = “Niz znakova”;
c: .byte ‘0’
.align 2 (poravnanje kako bi short poceo
s: .word 1 tamo gde treba)
.align 4
i: .long 2
.align 8
l: .quad 3
.align 8
p: .quad 1
.align 4
f: .long 5.0
.align 8
d: .quad 6.0
.align 8
str: .string “Niz znakova”
Komanda za predstavljanje neinicijalizovanih podataka?
primer:
short s;
chart str[10];
asembler: .comm s,2,2 [simbol,broj_bajtova,uravnanje]
chart str,10,8
x86 arhitektuja je tipa little_endian , sta to znaci?
Znaci da na najnizu adresu ide bajt najmanje tezine
Bitni registri za nas su?
rip - koji predstavlja pc kounter
esp - stek pointer
ebp -bejz pointer
eax - akumulator
Transfer podataka, operacija mov?
mov ne moze da radi prebacivanje iz memorije u memoriju, to nije dozvoljena kombinacija
izvoriste: mem, reg, imm
odrediste: mem ,reg
mov odrediste,izvoriste
ako je odrediste memorija mozemo dodati specifikaciju koliki je taj podatak na primer
mov QWORD PTR[rax], -147
Instrukcija za racunanje adresa lea?
lea dest, sors
-samo izracunava adresu podatka, ali mu ne pristupa