U trendu

Delphi – Korišćenje asemblera u objektnom Pascal-u (II deo)

CPU poseduje mogućnost manipulacije vrednostima iz registara, tako da bismo dodali 10 na vrednost registra eax, trebalo bi napisati sledeći heksadecimalni operativni kod:


05/0a/00/00/00

Ovo je tzv. mašinski kod, kod koga za svaku ugrađenu funkciju u CPU-u imamo određeni broj (šifru za poziv). Kao što vidite, pisanje programa u mašinskom kodu je jako naporno (dosadno), a otklanjanje bug-ova je još teže. Asemblerski jezik nam dopušta snagu mašinskog jezika na lakši način, a sam posao prevođenja (konvertovanja) u mašinski kod upravo vrši asembler. U Delphi je ugrađen Borland-ov Turbo Assembler i ponekad je pravo zadovoljstvo koristiti ga. Ako se sada ponovo vratimo na dodavanje 10 registru eax, odgovarajuća asemblerska instrukcija bi izgledala ovako:


add eax,10 {a := a + 10}

Slično ovome, oduzimanje vrednosti ebx od eax bi bilo:


sub eax,ebx {a := a – b }

Da bismo privremeno sačuvali dobijenu vrednost, premestićemo je u drugi registar,


mov eax,ecx {a := c }

ili, još bolje, sačuvaćemo datu vrednost u nekoj od memorijskih adresa:


mov [1235],eax {smestanje vrednosti registra eax na adresu 1235}

Naravno, moguće je kretanje vrednosti i u obrnutom smeru:


mov eax,[1235]

Kada vršite transfer u memorijski prostor, na umu uvek treba da vam bude veličina vrednosti koja se prebacuje. U našem primeru, imali smo instrukciju mov [1235], eax koja rezultira ne samo zauzećem memorijske adrese 1235, nego i 1236, 1237 i 1238, pošto premeštate 32-bitnu vrednost, tj. vrednost od 4 bajta. Memorijski prostor uvek adresiramo u bajtovima.

Pratite Krstaricu i preko mobilne aplikacije za Android i iPhone.