.. L ! ! ! ! ! ! ! ! ! ! ! R .pl 72 .he Ghid de utilizare asamblor ASM .fo # .uj 1 1. PREZENTARE GENERALA ASM este un asamblor care lucreaza sub sistemul de operare CP/M si care trateaza fisiere sursa in limbaj de asamblare rezidente pe disc, in urma procesului de asamblare rezultind un fisier cod- obiect (cod-masina 8080) in format hexa (compatibil INTEL) si un fisier listing. Lansarea in executie a programului ASM se face prin una din comenzile: (1) ASM [nume-unitate]nume-fisier(CR) (2) ASM nume-fisier.p1p2p3(CR) In ambele cazuri, programul ASM presupune ca fisierul de asamblat (fisier sursa in limbaj de asamblare 8080) se gaseste pe disc, sub un nume egal cu "nume-fisier" si cu extensie standard ".ASM". Forma (1) precizeaza ca asamblorul va trata ca fisier sursa fisierul: nume-fisier.ASM aflat pe discul instalat sau pe unita tea specificata si sa produca la iesire: (1) fisierul cod obiect (format hexa): nume-fisier.HEX (pe discul instalat sau pe unitatea specificata) (2) fisierul listing: nume-fisier.PRN (pe discul instalat sau pe unitatea specificata) Forma (2) precizeaza ca asamblorul va trata ca fisier sursa fisierul: nume-fisier.ASM aflat pe unitatea specificata prin parametrul p1 si sa genereze sau nu fisierele cod-obiect/listing, in functie de optiunea utilizatorului, exprimata prin parametrii p2 si p3. Semnificatia parametrilor este: p1 - poate fi o litera (A - P), care indica numele unitatii de disc pe care se gaseste fisierul sursa. .cp 4 p2 - poate fi: - numele unitatii de disc pe care se va genera fisierul cod-obiect (A - P); - litera "Z" care indica faptul ca se solicita suprimarea generarii fisierului cod-obiect. .CP 10 p3 - poate fi: - numele unitatii de disc pe care se va genera fisierul listing (A - P); - litera "X" care indica faptul ca se solicita obtinerea fisierului listing la consola; - litera "Z" care indica faptul ca se solicita suprimarea generarii fisierului listing. De exemplu comanda: ASM PROG.BBX(CR) cere asamblarea programului aflat in fisierul sursa B:PROG.ASM, generarea codului obiect in fisierul B:PROG.HEX si listare pe consola. .pa 2. FORMATUL FISIERULUI SURSA Un program in limbaj de asamblare, acceptat de ASM, este alcatuit dintr-o succesiune de linii sursa care au formatul general: numar-linie eticheta cod-operatie operand ;comentariu O linie poate contine oricare din elementele specificate in formatul general, sau toate aceste elemente. Fiecare linie se termina prin caracterele (CR)(LF). O linie poate contine una sau mai multe instructiuni/directive, separate intre ele prin caracterul "!". Este deci, acceptata forma generala: nr.linie eticheta instr(1) ! instr(2) ! . . . instr(n) (CR)(LF) unde instr(i) contine: cod-operatie operanzi [ ;comentariu ] NOTA Caracterul "!" este tratat de catre ASM drept sfirsit logic de linie (sfirsit de instructiune). .. L ! ! ! ! ! ! ! ! ! ! ! R O linie care incepe cu caracterul ";" sau "*" in coloana 1 este considerata "linie comentariu" si nu este tratata de asamblor. .CP 4 2.1 CIMPUL "numar linie" Este un cimp optional ce reprezinta numarul liniei sursa (exprimat in zecimal). Asamblorul ignora acest cimp. .CP 6 2.2 CIMPUL "eticheta" Este un cimp optional, care are forma: (1) eticheta (2) eticheta: unde "eticheta" este un sir de maximum 16 caractere alfanumerice, cu primul caracter obligatoriu alfabetic. Acest cimp poate con tine si caracterul "$", care nu este tratat de ASM (il ignora), el folosind doar pentru cresterea lizibilitatii etichetelor (ex:nume$lung sau data$foarte$lunga). .CP 7 2.3 CIMPUL "cod operatie" Acest cimp poate contine o mnemonica 8080 sau o directiva a asamblorului ASM. Directivele acceptate de ASM sint: ORG stabileste originea programului (adresa incepind de la care asamblorul va genera cod-obiect); .cp 3 END indica sfirsitul unui program sursa in limbaj de asam blare (si optional, adresa de lansare automata in executie a programului); EQU atribuie valori unui simbol; SET atribuie valori temporare unui simbol; IF directiva pentru asamblare conditionata; ENDIF sfirsit asamblare conditionata; DB generare date de lungime egala cu un octet fiecare; DW generare date de lungime egala cu doi octeti fiecare; DS rezerva o zona de memorie. In ANEXA 1 este prezentata lista completa a mnemonicelor 8080 si a directivelor acceptate de asamblorul ASM. .cp 5 2.4 CIMPUL "operand" Acest cimp contine, in general, expresii alcatuite din operanzi si operatori. Expresiile sint evaluate de asamblor in timpul procesului de asamblare ca valori pe 16 biti. .cp 9 2.4.1 Operanzi Operanzii pot fi: etichete - pot fi etichete definite de utilizator in program, sau etichete carora li s-au atribuit valori prin directi vele EQU sau SET. .cp 5 constante numerice - pot fi exprimate in binar (B), octal (O sau Q), zecimal (D) sau hexazecimal (H). Orice constanta numerica reprezinta o valoare pe 16 biti. .cp 8 Orice constanta numerica se scrie sub forma: c1c2...cnb unde c(i) sint cifre apartinind bazei de numaratie "b", iar "b" reprezinta baza in care este exprimata constan ta (literele B, O, Q, D sau H). In absenta lui "b", se considera "b"="D". O constanta hexa trebuie sa inceapa intotdeauna cu o cifra. Orice constanta este transformata de asamblor intr-o constanta binara, reprezentata pe 16 biti. Daca reprezentarea constantei depaseste 16 biti, automat se trunchiaza la dreapta. In scrierea constantelor se pot folosi caracterele "$" (ignorate de asamblor) pentru a creste lizibilitatea (ex: 33$FF$44H). .cp 9 constante sir - sint siruri de caractere ASCII incluse intre caracte rele apostrof ('). O constanta sir trebuie sa fie scrisa pe o singura linie (fizica !) si sa aiba maximum 64 caractere. Caracterul ' poate apare intr-o constan ta sir prin dublarea lui. Valoarea unui caracter dintr-un sir este egala cu codul ASCII corespunzator lui. .cp 5 cuvinte rezervate - acestea sint nume de registre generale sau coduri de instructiuni masina care au valori prestabilite. Astfel, exista urmatoarele cuvinte rezervate: .cp 10 A cu valoare asociata 7 B cu valoare asociata 0 C cu valoare asociata 1 D cu valoare asociata 2 E cu valoare asociata 3 H cu valoare asociata 4 L cu valoare asociata 5 M cu valoare asociata 6 SP cu valoare asociata 6 PSW cu valoare asociata 6 .. L ! ! ! ! ! ! ! ! ! ! ! R .cp 6 instructiuni 8080 cu valoare asociata - codul-masina corespunzator tipului instructiune respec tiv (operanzii instructiunii fiind implicit inlocuiti cu valoarea 0 (zero)). (ex: MVI A,MOV se asambleaza la fel cu MVI A,40H). .cp 5 $ - adresa la care va fi generata instructiunea/directiva curenta. Caracterul $ trebuie sa apara separat prin blancuri de identificatorii din context. .cp 6 2.4.2 Operatori Operatorii pot fi: aritmetici: + - * / MOD ( ) + (unar) - (unar) logici: NOT AND OR XOR SHL SHR Semnificatia acestor operatori este: .uj 0 operator utilizare semnificatie + a + b adunare fara semn a lui "a" cu "b" - a - b scadere fara semn a lui "b" din "a" + (unar) + b identic cu "b" - (unar) - b identic cu "0 - b" * a * b inmultire fara semn a lui "a" cu "b" .cp 2 / a / b impartire intreaga (fara semn) a lui "a" la "b" .cp 2 MOD a MOD b restul impartirii intregi a lui "a" la "b" .cp 4 NOT NOT b complementul fata de 1 al valorii lui "b" (toti bitii "0" din "b" devin "1" si toti bitii "1" din "b" devin "0") AND a AND b "si"logic intre "a" si "b" OR a OR b "sau" logic intre "a" si "b" XOR a XOR b "sau-exclusiv"logic intre "a"si"b" .cp 4 SHR a SHR b valoarea care rezulta prin deplasa rea la dreapta a valorii "a" cu "b" pozitii binare (pozitiile ramase libere se completeaza cu zerouri). .cp 5 SHL a SHL b valoarea care rezulta prin depla sarea la stinga a valorii "a" cu "b" pozitii binare (pozitiile ramase libere se completeaza impli cit cu zerouri). .uj 1 In fiecare din cazurile prezentate, "a" si "b" reprezinta ope ranzi (etichete, constante numerice, cuvinte rezervate sau siruri de 1 sau 2 caractere ASCII) sau subexpresii incluse intre paran teze. Exemple: 10+20 10H+37Q A1/3 (A2+4) SHR 3 ('A' AND 5FH)+'0' ('B'+B) OR (PSW+M) (1+(2+C)) SHR (A-(B+1)) Evaluarile tuturor expresiilor se realizeaza in faza de asamblare (ca operatii pe 16 biti fara semn). Astfel, (-1) este evaluat ca (0-1), adica rezulta valoarea 0FFFFH. Valoarea calculata a unei expresii trebuie sa corespunda lungimii operanzilor implicati in instructiuni. Daca, de exemplu, o expresie este utilizata intr-o instructiune ADI, atunci primii 8 biti ai valorii expresiei (cei mai semnificativi) trebuie sa fie egali cu zero. Astfel, instructiunea: .cp 10 ADI -1 va produce un mesaj de eroare, intrucit valoarea 0FFFFH nu poate fi reprezentata pe 8 biti, in timp ce instructiunea: ADI (-1) AND 0FFH este acceptata de ASM, intrucit anuleaza primii 8 biti ai expresiei. .cp 6 Evaluarea expresiilor se face astfel: - intii parantezele cele mai interioare - apoi,in cadrul unei paranteze sau in absenta acestora, in ordinea: * / MOD SHL SHR - + NOT AND OR XOR .cp 5 EXEMPLE: a*b+c = (a*b)+c a+b*c = a+(b*c) a MOD b*c SHL d = ((a MOD b)*c) SHL d a OR b AND NOT c+d SHL e = a OR (b AND (not (c+(d SHL e)))) (a OR b) AND (not c)+d SHL e = (a OR b) AND ((NOT c)+(d SHL e)) .cp 7 2.5 CIMPUL "comentariu" Acest cimp contine orice sir de caractere care urmeaza carac terului ";" si care se termina la sfirsitul liniei curente (caracterele (CR)(LF)) sau la sfirsitul logic al liniei (carac terul "!"). Acest cimp este citit de asamblor, este listat in fisierul listing dar nu este interpretat de asamblor. .pa 3. MESAJE DE EROARE ASM Erorile detectate de asamblor apar in prima coloana a fisierului listing. Ele apar tiparite si la consola, pe masura ce se gene reaza fisierul listing (astfel, nu este obligatoriu sa se listeze fisierul listing pentru aflarea eventualelor erori in programul sursa). Erorile sint semnalate prin urmatoarele coduri: D eroare de data: un element din datele instructiunii nu poate fi plasat in zona de date specificata. E eroare de expresie: expresia nu poate fi evaluata in timpul asamblarii. L eticheta eronata: eticheta nu poate apare in acest context (poate fi eticheta dubla). N neimplementat: directiva este recunoscuta de asamblor dar nu este tratata de catre acesta (este neimplementa ta inca). O depasire: expresia este prea complexa pentru a putea fi evaluata (trebuie simplificata !). P eroare de faza: eticheta nu are aceeasi valoare in doi pasi succesivi de parcurgere de catre asamblor a programului sursa. R eroare de registru: valoarea specificata ca registru nu este compatibila cu tipul de instructiune. S eroare de sintaxa: expresia este incorect construita. U eticheta nedefinita: specificatorul fisierului sursa, in comanda, este fie incorect introdus fie tipul fisie rului nu este ASM. V eroare de valoare: operandul intilnit in expresie este incorect construit. .cp 6 Asamblorul ASM semnaleaza erori, datorate unor comenzi incorecte de apel al asamblorului. Aceste mesaje de eroare sint: NO SOURCE FILE PRESENT asamblorul nu poate sa gaseasca fisierul sursa specificat. .cp 5 NO DIRECTORY SPACE fisierul "director" al discului este plin; trebuie sterse fisierele care nu mai sint utile si apoi reape lat asamblorul. .cp 4 SOURCE FILE NAME ERROR numele fisierului sursa specificat in comanda este ero nat (de exemplu contine caracterul "?" sau "*"). .cp 5 SOURCE FILE READ ERROR fisierul sursa specificat in comanda nu poate fi citit corect de catre asamblor; trebuie utilizata comanda TYPE pentru a determina locul din fisier in care apare eroarea. .cp 5 OUTPUT FILE WRITE ERROR fisierul/fisierele de iesire (cod-obiect si/sau listing) nu pot fi scrise pe disc (in majoritatea cazurilor din lipsa de spatiu-disc; trebuie eliberat spatiul-disc si reluat procesul de asamblare). .cp 5 CANNOT CLOSE FILE fisierul de iesire nu poate fi inchis: trebuie verifi cat daca exista disc in unitate si daca acesta nu este R/O; aceasta este o eroare fatala care determina termi narea executiei programului ASM. .pa A N E X A 1 MNEMONICE 8080 JMP CALL RET JNZ CNZ RNZ JZ CZ RZ JNC CNC RNC JC CC RC JPO CPO RPO JPE CPE RPE JP CP RP JM CM RM PCHL -------------- ---------------- ------------- LDAX IN ADI LHLD OUT ACI LDA EI SUI DI SBI STAX DAD ANI SHLD HLT XRI STA NOP ORI CPI ------------- --------------- -------------- ADD RLC INR ADC RRC INX SUB RAL DCR SBB RAR DCX ANA XRA ORA CMP --------------- --------------- -------------- MVI PUSH XCHG MOV POP DAA LXI XTHL CMA SPHL STC CMC .pa DIRECTIVE ACCEPTATE DE ASM [eticheta] ORG expresie determina generarea codului obiect incepind de la adresa egala cu valoarea expresiei (de obicei aceasta valoare este sub CP/M egala cu 100H care reprezinta inceputul zonei TPA). Daca eticheta exista, ii atribuie valoarea "expresiei". [eticheta] END [expresie] indica sfirsitul unui program sursa in limbaj de asamblare (liniile aflate dupa aceasta directiva nu vor fi tratate de asamblor). Daca "expresie" este prezenta, atunci ea va fi evaluata si va reprezenta "adresa de lansare in executie" a programului (aceasta "adresa" va fi inscrisa in ultima inregistrare a fisierului hexa generat de asamblor). Daca "expresie" nu este prezenta, atunci "adresa de lansare in executie" a programului va fi 0000H. eticheta EQU expresie evalueaza "expresie" si atribuie valoarea simbolului "eticheta". Simbolul "eticheta" nu trebuie sa mai apara ca eticheta in programul respectiv. eticheta SET expresie evalueaza "expresie" si atribuie aceasta valoare simbolului "eticheta". Simbolul "eticheta" va avea valoarea atribuita prin directiva SET pina in momentul in care i se va atribui o noua valoare, printr-o alta directiva SET. .cp 7 IF expresie linie sursa 1 linie sursa 2 . . linie sursa n ENDIF evalueaza "expresie" si daca valoarea rezultata este diferita de zero, atunci instructiunile din liniile 1-n vor fi asamblate. Daca valoarea rezultata este zero, atunci instructiunile din liniile 1-n vor fi ignorate de asamblor (nu se va genera cod pentru ele). .cp 8 [eticheta] DB exp(1),...exp(n) unde exp(i) este o expresie a carei valoare incape pe 8 biti (valoarea expresiei are primii 8 biti nuli) si genereaza valorile corespunzatoare expresiilor "exp(1)",..."exp(n)" pe cite un octet fiecare. "Exp(i)" pot fi si constante-sir, cu lungime maxima de 64 caractere. Fiecare caracter din constanta-sir va fi generata pe cite un octet (in cod ASCII). .cp 7 [eticheta] DW exp(1),...exp(n) unde "exp(i)" este o expresie a carei valoare incape pe 16 biti. Directiva genereaza valorile corespunzatoare expre siilor "exp(1)",..."exp(n)" pe cite doi octeti fiecare. Daca "exp(i)" este o constanta-sir, atunci lungimea ei maxi ma este de 2 caractere. .cp 4 [eticheta] DS expresie evalueaza "expresie" si rezerva o zona de memorie de "n" octeti (cu "n" egal cu valoarea expresiei).