90 likes | 209 Views
Asembler x86-64. Autori : Vukasin Jelic Bojan Nestorovic. UVOD.
E N D
Asembler x86-64 Autori: VukasinJelic BojanNestorovic
UVOD • Kako je mašinski jezik jedinijezikkojiprocesorrazume, svesto je izraženoasemblerskimjezikommorabitiprevedenonajeziknadbinarnomazbukom. Ovoprevodenjeobavljaračunarprekoprogramaprevodiocakoji se nazivaasembler. • Zakoriscenje x86-64 asembleranijepotrebnopoznavanje x86 asemblera, alipoznavanjeistogolaksavarazumevanjei prevodenjekoda. • Sinonim za 64bitno proširenje Intel-ovog i AMD-ovog32bitnog asemblera je x86-64. AMD je predstavioprvuverzijux64 koja se u pocetku zvala x86-64, a kasnije je preimenovana u AMD64. Intel je njihovuimplementacijunazvao IA-32e (eng. Intel Itanium architecture), a kasnije EMT64.
OPIS REGISTARA • RAX (accumulator register) – se koristizaaritmetičkeoperacije, ulazno-izlazneoperacije, pozivanjeprekidaitd. • RBX (base register) – se koristikaopokazivačzapristupmemoriji. • RCX (counter register) – se koristikaobrojačpetlji I zašiftovanje • RDX(data register) – se koristiistokao RAX • RDI(destination register) – se koristizaindeksiranjenizova I pristupmemoriji. • RSI(source index register) – se koristiistokao RDI • RSP(stack pointer) – pokazujenaposlednji element gurnutnastek, kojiinače ide kanižimadresama. Stekkoristimozasmeštanjeadresapotprograma, zaprosledjivanjeparametara u višimjezicimakaostosu C/C++. • RBP(base pointer) – sadrži adresupočetkasteka • RIP(instruction pointer)- pokazujenasledeću instrukcijukojutrebaizvršiti. Može samo da se čita. • RFLAGS – smešta flegovekojekoristimo,zarezultatenekihoperacija I kontroluprocesora.
KONVENCIJA POZIVA • Konvencija YASM asemblera je preuzeta od visegprogramskogjezika • C, kojanamomogucavapozivanjespoljnihfunkcijadenisanihtokom • izvrsavanjakaosto je funkcijaprintf. • Stekrastekanizimadresama, stoznaci da se novi element dodaje • nadno, a starijielementi se nalazenavisimadresama. • Funkcijekojenisu void vracajurezultatprekoregistra RAX. Osim toga, • funkcija resetuje RSP registar i vraca ga na pocetak stek okvira, i izbacuje • staru vrednost RBPa sa steka. • movrax , /return value / • movrsp , rbp • pop rbp • ret
POKRETANJE PROGRAMA • Kompajliranjesmovršilipomoću YASM kompajleraI to nasledeći način: • yasm-f elf64 ime.asm & ld -o imeime.o • Ili ako smo koristili eksterne c funkcije • yasm-f elf64 ime.asm & clang -o imeime.o
TEST PRIMERI Program kojinastandardniizlazispisuje Hello World koristeći sistemskepozive. Program kojinastandardniizlazispisuje Hello World koristeći ekserne C funckije. Program kojinastandardniizlazispisuje Hello World koristeći sistemskepozive, alidužinustringadobijamokoristeći SCASB funckije.
TEST PRIMERI (NASTAVAK) Program kojiračunazbirdvabroja. Program kojiračunavrednostfaktorijalazazadatibroj, rekurzijom. Program kojiračunakolikobitova u brojuimavrednostjedankoristecipomeranjebitova.