1k likes | 1.34k Views
Uvod u asemblerski jezik VI poglavlje - Karakteristike –. Uvod u asemblerski jezik. Skup instrukcija mikroprocesora predstavlja skup binarnih ula z a koji generi š u odredjene akcije u toku ciklusa jedne instrukcije. Primer :.
E N D
Uvod u asemblerski jezik VI poglavlje - Karakteristike–
Uvod u asemblerski jezik Skup instrukcija mikroprocesora predstavlja skup binarnih ulaza koji generišu odredjeneakcije u toku ciklusa jedne instrukcije Primer : Verzija instrukcije na mašinskom jeziku za mikroprocesor MC 68000 koja glasi: "Napuni neposredni decimalni operand 2001 na adresu na koju ukazuje registar A“ ima sledeći 32-bitni format: 0010 0000 0111 1000 0000 0111 1101 0001
Asemblerski jezik Primer : Za mikroprocesor MC 68000 sekvenca : “Izvrši sabiranje sadržaja dve memorijske lokacije 600016 i 600216, a rezultat smesti u memorijsku lokaciju 600416“ imaće sledeći oblik: 0011 0000 0011 1000 0110 0000 0000 0000 1101 0000 0111 1000 0110 0000 0000 0000 0011 0001 1100 0000 0110 0000 0000 0100 Ovo predstavlja mašinski jezik, ili objektni (object) kôd (program) i njega će mašina direktno izvršavati, tj. ovakav program koga čini sekvenca 0 i 1 mašina jedino i razume
Asemblerski jezik - osobine • Kreiranje programa na mašinskom jeziku se može iskazati kroz sledeća zapažanja: • programi suteški za razumevanje, veoma teško se nalaze greške, a iste nakon toga koriguju • instrukcije seteško unose u mašinu, kuca se bit po bit, a zatim se cela reč unosi u paralelnoj formi • programi ne poseduju komentarkoji će programeru olakšati rad • programi sudugačkii zamorni za analizu • programer često iz nehata činigreškekoje je veoma teško locirati, a nakon toga korigovati
Asemblerski jezik – binarna forma Preglednost programa se može poboljšati ako se binarana forma 0011 0000 0011 1000 0110 0000 0000 0000 1101 0000 0111 1000 0110 0000 0000 0010 0011 0001 1100 0000 0110 0000 0000 0100 napiše u heksadecimalnoj brojnoj notaciji
Asemblerski jezik – heksadecimalna forma • 0 3 8 • 0 0 0 • C 0 7 8 • 0 0 2 • 1 C 0 • 6 0 0 4 Program koji konvertuje heksadecimalne brojeve u binarne i smešta u memoriju se naziva "heksadecimalni punilac" – (hexadecimal loader)
Asemblerski jezik – mnemonici • Programsko poboljšanje se postižedodeljivanjem imena svakom instrukcionom kôdu • Ime kôda instrukcije zove semnemonik • Mnemonik opisuje sa minimalnim brojem znakova šta instrukcija radi Addza sabiranje Subza oduzimanje Primer : Programska sekvenca za MC 68000, kada se koriste mnemonici, ima sledeći oblik Move.W $6000, D0 Add.W $6000, D0 Move.W D0,$6004 program napisan na asemblerskom jeziku
Proces asembliranja Za programsku sekvencu Move.W $6000, D0 Add.W $6000, D0 Move.W D0,$6004 kažemo da je napisana na asemblerskom jeziku Asemblerski program (asembler) vrši prevodjenje korisničkog programa ili izvornog programa, napisanog pomoću mnemonika, u program na mašinskom jeziku, ili objektni program, koga će mikroračunar izvršavati Ulaz u asemblerjeizvorni program Izlaz iz asemblerajeobjektni (izvršivi) program
Proces razvoja programa na asemblerskom jeziku • Programer koristi usluge tekst editora za kreiranjetekst datoteke(text file) koja sadrži program napisan na asemblerskom jeziku. • Imenaizvorna datoteka(source file) iizvorni program(source program) se često koriste u asemblerskom jeziku i jezicima višeg nivoa da označe tekst datoteke. • Asembler prihvata izvorni program kao ulaz, vrši proveru formata zbog grešaka u pisanju i proizvodi objektni modul koji sadrži program napisan na mašinskom jeziku
Proces razvoja programa na asemblerskom jeziku • Punilac(loader) smešta objektni modul u memoriju na kojoj će se program izvršavati(ciljna mašina- target machine) • Na ciljnoj mašini program se testira pomoću programa zaodstranjivanje grešaka(debugger)
Steps in transforming an assembly language program to an executable program residing
An assembly language program, its machine-language version, and the symbol table created during the assembly process
Generisanje izvršivih binarnih programa iz skupa nezavisno prevedenih izvornih procedura zahteva korišćenje linkera
Kros-asembler • Punilac, odstranjivač grešaka i program na mašinskom jeziku moraju da se izvršavaju na ciljnoj mašini, dok tekst editor i asembler mogu se izvršavati na drugoj (različitoj) mašini. • Asembler koji se izvršava na jednoj mašini, a proizvodi (generiše) objektne module za drugu mašinu zove sekros-asembler(cross-assembler). • Procespunjenja(loading) objektnog modula sa mašine na kojoj je izvršeno kros asembliranje u ciljnu mašinu (down load) obično se izvodi serijskom komunikacionom vezom.
Karakteristike asemblerskog jezika • Kada programer vrši programiranje na asemblerskom jeziku, on mora strogo da zna : • Asembler nije prenosiv • Svaki mikroračunar ima svoj sopstveni asemblerski jezikkoji odražava njegovu sopstvenu arhitekturu. • Asebmlerski program napisan za MC 68020 neće raditi na mikroračunaru zasnovanom na iAPX486 ili bilo kom drugom mikroprocesoru • koji će mikroračunar koristiti • koje registre i instrukcije dotični mikroračunar poseduje • koje adresne načine rada koristi, i puno drugih detalja
Karakteristike asemblerskog jezika – produžetak - • asemblerski jezik je jezik kod kogasvaka instrukcija generiše tačno jednu mašinsku instrukciju. • postoji korespondencija jedan-prema-jedanizmedju mašinskih instrukcija i instrukcija na asemblerskom programu. • postojionoliko asemberskih jezika koliko postoji i različitih mikroprocesora
Karakteristike asemblerskog jezika - nekonzistentnost - • Za odredjivanje vrednosti algebarskog izraza X=Y+Z kod jednih procesora se koristi instrukcija Add X,Y,Z a kod drugih (mikroprocesora) instrukcija Add Y,Z,X • Sagledavajući ograman broj nedostataka programiranja na asemblerskom jeziku udruženje IEEE oformila je radnu grupu IEEE P 694 koja je imala zadatak da standardizuje mnemonike asemblerskog jezika. • Na žalost preporuke ove grupe nisu široko prihvaćene od strane industrije.
Karakteristike asemblerskog jezika - pokušaj standardizacije - • Nezavisno od toga što su pokušaji standardizacije propali ostali su tragovi tog rada za koje se čini da su prećutno šire prihvaćeni od strane proizvodjača RISC procesora a koji se odnose na: • specifikaciju imena mnemonika • definiciju tipa modifikatora • uslove grananja • dogovor o korišćenju formata ALU instrukcija
Karakteristike asemblerskog jezika imena najčešće korišćenih mnemonika
Karakteristike asemblerskog jezika - modifikatori za tip podataka - • Instrukcijom: Move.W R1,R2;kopira sa sadržaj 32 bitnog registra R2 u R1 • Modifikatori koji prate odredjeni tip podataka mogu biti oblika:
Karakteristike asemblerskog jezika uslovi grananja
Karakteristike asemblerskog jezika korišćeni formati ALU instrukcija
Formati asemblerskih instrukcija • Struktura instrukcija na asemblerskom jeziku dosta verno odslikava strukturu mašinskih instrukcija koje on predstavlja • Asemblerski jezici različitih procesora medjusobno su dosta slični • Ova osobina dozvoljava da se o njima u izvesnoj meri diskutira uopšteno • Kada se dobro poznaje jedan asemblerski jezik lako se uči drugi.
Formati asemblerskih instrukcija • Svaki iskaz na asemblerskom jeziku čine sledeća četiri polja: • oznaka (labela) • opkôd ili direktiva • operand (i) • komentar
Formati asemblerskih instrukcija - polje oznaka - • Oznaka–zanajveći broj instrukcija i direktiva ovo polje je i opcionopolje oznaka predstavlja simboličko ime za memorijsku adresu. Izraz: Move.L B,D0 • Izrazdefiniše lokaciju instrukcije u memoriji nakon što je program napunjen (loadovan). • Oznaka se možekoristiti da definiše početakprogramskog segmenta radi kasnijegobraćanja. • Oznaka se koristi kod dodela memorije pseudoinstrukcijama jer omogućavada memorisani podaci budu dostupni preko simboličkihimena.
Formati asemblerskih instrukcija - polje operacioni kôd ili direktiva - • Poljeoperacioni kôdili direktivasadrži: • mnemonik instrukcije- simboličku skraćenicuza opkôd ako iskaz predstavlja mašinsku instrukcijuili • asemblersku direktivu– tj. pseudoinstrukciju ako je iskaz komanda asembleru • izbor imena za mnemonike i direktive razlikuje se od jednog asemblera do drugog Primer : Add R1,R2,R3;instrukcija Alfa EQU 50;direktiva
Formati asemblerskih instrukcija - polje operandi - • Operandi- polja operandi u iskazima asemblerskog jezika namenjena su daspecificiraju adrese i registrekoji se koriste kao operandi u mašinskoj instrukciji. • Polje operand(i) kod instrukcijeAddukazuješta sa čimetreba sabrati. • Polje operandkodJump (Branch)instrukcije ukazujegde trebaskočiti. • Kod pseudoinstrukcija ovo polje ukazuje koliko memorijskog prostora treba rezervisati. • Asembleri prepoznaju i odredjene simbole u polju operand (i). Simbolu možeda se dodeli apsolutna adresa, neposredna vrednost, ili bilo koji drugi važeći operand.
Formati asemblerskih instrukcija - polje operandi - produžetak • Izraz(expression) predstavlja kombinaciju simbola, konstanti (literali), algebarskih operatora i zagrada, a koristi se od strane asemblera za odredjivanje adresa ili vrednosti operanada. • Instrukcijom Move.W # $ 2000, D1 definiše se 16-bitna heksadecimalna vrednost 2000 kao neposredni izvorni operand. • Konstante za koje asembler automatski rezerviše memorijski prostor zovemoliterali. Primer :
Asemblerske direktive • Alternativno ime je asemblerske pseudoinstrukcije • Najvećibroj asemblerapruža pomoć programeru na različite načine putem korišćenjaasemberskih direktiva • Akcija koja se preuzima od strane direktiva egzistira samo u toku asembliranja izvornog programa, tj. direktive su neizvršive asemblerske instrukcije Direktive su instrukcije namenjene asembleru, a ne procesoru
Asemblerske direktive - primer Assembler directives provide the assembler with info on how to translate the program but do not lead to the generation of machine instructions .macro # start macro .end_macro # end macro .text # start program’s text segment ... # program text goes here .data # start program’s data segment tiny: .byte 156,0x7a # name & initialize data byte(s) max: .word 35000 # name & initialize data word(s) small: .float 2E-3 # name short float big: .double 2E-3 # name long float .align 2 # align next item on word boundary array: .space 600 # reserve 600 bytes = 150 words str1: .ascii “a*b” # name & initialize ASCII string str2: .asciiz “xyz” # null-terminated ASCII string .global main # consider “main” a global name
Asemblerske direktive - primer Write assembler directive to achieve each of the following objectives: a. Put the error message “Warning: The printer is out of paper!” in memory. b. Set up a constant called “size” with the value 4. c. Set up an integer variable called “width” and initialize it to 4. d. Set up a constant called “mill” with the value 1,000,000 (one million). e. Reserve space for an integer vector “vect” of length 250. Solution: a. noppr: .asciiz “Warning: The printer is out of paper!” b. size: .byte 4 # small constant fits in one byte c. width: .word 4 # byte could be enough, but ... d. mill: .word 1000000 # constant too large for byte e. vect: .space 1000 # 250 words = 1000 bytes
Proces asembliranja • Proces asembliranja, kao aktivnost, je dovoljno sličan i može se kao postupak opisati da važi za sve mašine, tj. bude generalni • Asembliranje možemo da zamislimo na sledeći način: • program na asemblerskom jeziku predstavlja niz iskaza • asembler u datom trenutku čita jedan iskaz, prevodi ga u mašinski jezik, a na svom izlazu generiše dva tipa informacija: • odnosi se na generisani mašinski kôd i pridružuje se datoteci u kojoj se čuva izvršivi mašinski kôd, • dodaje se odgovarajućem delu listing datoteke koja se koristi za potrebe štampanja. • Proces se ponavlja dok se ne prevede ceo program.
Proces asembliranja - produžetak • Na prvi pogled veoma logičan postupak koji na žalost nije korektan. Zbog čega? Analizirajmo sledećusituaciju: • Neka prvi iskaz u programu koji se prevodi bude Jump Adr_1. Asembler nećebiti u stanju da asemblira ovaj iskaz sve dok nezna adresu Adr_1. Skok možebiti na kraju programa koji se prevodi, što znači da asembler neće biti u stanju da pronadje adresu ako se prethodno ne pročitaceo program. • Ovaj problem je poznat kao obraćanjeunapred(forward reference) a javlja se zbog toga što se simbol Adr_1 javlja pre nego što je definisan, tj. obraćamose simbolu čijadefinicja sledi kasnije.
Problem obraćanja unapred – prvi pristup • Asembler čitaizvorni program dva puta. Pri ovome svako čitanjeizvornog programa zovemoprolaz(pass). Bilo koji prevodilac koji čitaulazni program dva puta zove sedvo-prolazni prevodilac. • U toku prvog prolaza, kod dvo prolaznog asemblera, skupljaju se i smeštaju u tabeli definicije simbola i oznake (labele) iskaza. • U toku drugog prolaza vrednosti svih simbola su poznate, problem obraćanjaunapred nije više kritičan, svaki iskaz se čita, asemblira i generiše njegov izlaz.
Problem obraćanja unapred – drugi pristup • Drugi pristup se zasniva na jednom prolazu. Ideja je sledeća: • Kada se naidje na iskaz koji se ne možeasemblirati zbog toga što postoji obraćanjeunapred ne generiše se izlaz. Umesto toga kreira se ulaz u (jednoj) tabeli čiji sadržajukazuje to da iskaz kod koga se javlja obraćanjeunapred nije asembliran. Na kraju procesa asembliranja svi iskazi u neasembliranoj tabeli se asembliraju. Nedostaci: • dvo prolaznog asemblera ogleda se u tome što zahteva nešto duže vreme prevodjenja • jedno prolaznog: (a) dodatni memorijski prostor, koji može biti veliki ako u programu postoji veliki broj obraćanja unapred; (b) složenija struktura; i (c) razumljivost listinga objektnog koda nije uvek najjasnija. Zbog nabrojanih razloga najveći broj asemblera je dvo prolazni.
Prvi prolaz Glavna aktivnost koja se obavlja u toku prvog prolaza u vezi je sa kreiranjemtabele simbola. U tabeli se čuvaju vrednosti svih simbola. Simbol može biti: (a) oznaka (labela); i (b) vrednost kojoj je pomoću direktiva dodeljeno simbolično ime, kao na primer: DISK_1 Equ 18 Kada simbol pripada polju Oznaka asembler mora da zna, koju adresu treba da dodeli toj instrukciji u toku izvršenja programa. Da bi sačuvao adresni trag o svim asembliranim instrukcija asembler mora u svakom ulazu tabele simbola da pamti vrednost jedne promenljive koja se zovelokacioni brojač instrukcija(instruction location counter - ILC). Na početku prvog prolaza asembler postavi ILC na vrednost 0. Nakon obrade svake instrukcije ILC se inkrementira za dužinu te instrukcije.
Tabela simbola • Tabela simbola- ima po jedan ulaz za svaki simbol • Simboli su definisani bilo kao oznake (labele) ili preko definicija (Januar Equ 1) • Svaka tabela simbola sadrži sam simbol (ili pokazivač na taj simbol), njegovu numeričku vrednost i dodatnu informaciju koja se odnosi na: • dužinu polja podatka koje prati taj simbol, • relokacione bitove, tj. da li simbol menja vrednost ako se program puni na neku drugu adresu u odnosu na onu koja je specificirana asemblerom • da li je ili ne simbol dostupan van granica procedure.
Opkôd tabela • Opkôd tabela- sadržinajmanje jedan ulaz za svaki mnemonik asemblerskog jezika • Svaki ulaz opkôd tabele sadrži: • simboličkiopkôd (mnemonik) • dva operanda • dužinuinstrukcije • klasu instrukcije koja deli opkodove u grupe u zavisnosti od broja i tipova operanada
Drugi prolaz • U ovom prolazu obavljaju se sledeće aktivnosti: • generišese objektni program • štampa se listing na asemblerskom jeziku ako se to zahteva • generiše se dodatna informacija koja je potrebna programu za povezivanje(linkeru)radi povezivanja procedura koje se asembliraju u različitimvremenskim trenucima
Pseudoinstrukcije Example of one-to-one pseudoinstruction: The following not $s0 # complement ($s0) is converted to the real instruction: nor $s0,$s0,$zero # complement ($s0) Example of one-to-several pseudoinstruction: The following abs $t0,$s0 # put |($s0)| into $t0 is converted to the sequence of real instructions: add $t0,$s0,$zero # copy x into $t0 slt $at,$t0,$zero # is x negative? beq $at,$zero,+4 # if not, skip next instr sub $t0,$zero,$s0 # the result is 0 – x
Pseudoinstrukcije MiniMIPS Pseudo-instructions Copy Arithmetic Shift Logic Memory access Control transfer
Makro naredbe i potprogrami • Programeri čestoimaju potrebu da nekoliko puta u okviru programa ponavljaju odredjene sekvence • Najjednostavnije ovoj problem se rešava tako što se sekvenca instrukcija kad god zatreba prepiše • Ako je sekvencadugačka, ili se često ponavlja,ovaj posao postaje zaista dosadan • Kao alternative se nude sledeća dva rešenjakoja se baziraju na grupisanju instrukcija u jedinstvenu celinu : • makro naredbe • potprogrami (procedure)
Makro naredbe i potprogrami - produžetak • Obe strategije ima svoje prednosti i nedostatke • Kod poziva procedure izvršavajuinstrukcije Call i Return • Ako je procedura kratka, a poziv procedure česti, izvršenje instrukcija Call i Return u značajnoj meri usporava brzinu izvršenja programa • Makro naredbe obezbedjuju efikasnije rešenje problema učestalog izvršenja iste ili skoro iste sekvenceinstrukcija • Nedostatak makro naredbe se ogleda u povećanjuobima programa.
Makro mehanizam A macro is a mechanism to give a name to an oft-used sequence of instructions (shorthand notation) .macro name(args) # macro and arguments named ... # instr’s defining the macro .end_macro # macro terminator How is a macro different from a pseudoinstruction? Pseudos are predefined, fixed, and look like machine instructions Macros are user-defined and resemble procedures (have arguments) How is a macro different from a procedure? Control is transferred to and returns from a procedure After a macro has been replaced, no trace of it remains
Macro – largest of three values Write a macro to determine the largest of three values in registers and to put the result in a fourth register. Solution: .macro mx3r(m,a1,a2,a3) # macro and arguments named move m,a1 # assume (a1) is largest; m = (a1) bge m,a2,+4 # if (a2) is not larger, ignore it move m,a2 # else set m = (a2) bge m,a3,+4 # if (a3) is not larger, ignore it move m,a3 # else set m = (a3) .endmacro # macro terminator If the macro is used as mx3r($t0,$s0,$s4,$s3), the assembler replaces the arguments m, a1, a2, a3 with $t0, $s0, $s4, $s3, respectively.
Razlika izmedju makro naredbi i potprograma rad sa potprogramima • Ukupna dužina programa • jednaka je zbiru • i nezavisna je od toga koliko se puta u toku izvršenja glavnog programa pozivaju potprogrami. • U konkretnom slučaju jednaka je 13 k.
Razlika izmedju makro naredbi i potprograma rad sa makroima • Ukupna dužina programa • jednaka je zbiru • gde je pi broj puta pozivanja makroa i u okviru glavnog programa • Dužina programa zavisna je od toga koliko se puta u toku izvršenja glavnog programa pozivaju makroi. • U konkretnom slučaju jednaka je 15 k. na mestu poziva ceo MAKRO se umeće u kôd glavnog programa
Makro naredbe • Veliki broj asemblerskih jezika je proširljiv • Asembleri dozvoljavaju korisniku da definiše nove instrukcione mnemonike koje zovemomakro naredbe • Makro naredbe se mogu smatrati kaosastavni deo jezika, pa se kao takve i mogu pozivati • Novo definisane instrukcijemogu se koristiti potpuno ravnopravnosa svim ostalim instrukcijama iz skupa instrukcija na asemlerskom jeziku • Makro naredba predstavlja sekvencu mašinskih instrukcija koja sedefiniše jedanput,a možesekoristiti po nekoliko putau toku izvornog programa.