Sunteți pe pagina 1din 255

Programarea n limbaj de asamblare a microprocesoarelor -Lucrri de laborator-

Introducere

Dei limbajele de programare s-au perfecionat continuu pe parcursul ultimelor decenii, se pare c suntem nc departe de apariia unui limbaj absolut optimal care s mbine toate avantajele celorlalte limbaje i s evite dezavantajele lor. De altfel, majoritatea limbajelor de programare actuale au evoluat tocmai n direcia eliminrii propriilor puncte slabe i a achiziionrii celor mai moderne concepte din teoria programrii. rezultat o tendin de apropiere reciproc a acestora i nu este e!clus ca n viitor s se constate o tendin de unificare ntr-un standard care s preia soluiile optimale ale diverselor limbaje de programare, ceea ce ar micora eforturile de nvare i chiar cele de cutare a celui mai adecvat limbaj pentru o aplicaie dat. "-ar putea spune ns c problema limbajului unic este principial nerezolvabil i coe!istena mai multor nivele n comple!itatea actului de programare este obligatorie. #ntr-adevr, n dialogul om-main se constat n permanen o anume distribuie a eforturilor se dezvoltare i utilizare a unui program. "e poate folosi un limbaj care s necesite un efort mai mic din partea programatorului n partea de dezvoltare i mai mare din partea mainii n partea de e!ecuie $rulare% , sau invers. "e constat c, invariabil, n primul caz performanele programului rezultat sunt mai sczute , iar n al doilea caz mai ridicate. ceasta se datoreaz nivelurilor mai nalte i respectiv mai sczute ale instruciunilor folosite. stfel, instruciunile unui limbaj de programare sunt de fapt grupuri mai mari sau mai mici de operaii care se petrec n interiorul calculatorului & instruciunile main. '(nd grupurile respective sunt mari, programatorul are de scris mai puin cod, efortul su fiind sczut, i se spune c nivelul instruciunilor i al limbajului este nalt. stfel de limbaje sunt) *asic, +ascal, etc. Dac numrul de instruciuni main dintr-o instruciune a limbajului este mai sczut, efortul programatorului crete, el trebuind s scrie un cod mai comple! pentru o sarcin dat. stfel de instruciuni i de limbaje se numesc de nivel mediu, cum ar fi de e!emplu '. ,a e!trema opus e!ist un limbaj ale crui instruciuni coincid chiar cu instruciunile mainii & limbajul de asamblare. ici efortul programatorului este evident ma!im i limbajul respectiv este de nivel sczut. +roblema esenial a nivelului unui limbaj de programare este c nivelul su se afl ntr-o dependen invers proporional cu eficiena codului generat. #ntradevr, cu c(t instruciunile unui limbaj conin mai multe instruciuni main, cu at(t viteza lor de e!ecuie scade. -n plus, scade i probabilitatea ca o anumit instruciune s fie soluia optim pentru o problem dat. +rogramatorul are la dispozie anumite tipuri de .prefabricate/ - instruciunile din care trebuie s alctuiasc programul, mbin(ndu-le pe cele mai apropiate de 0

necesitile sale reale, chiar dac acestea sunt uneori departe de prototipul cu eficiena optim. +e msur ce dimensiunile acestor blocuri scad este mai posibil ca ele s se mbine mai eficient, mrind i performana ansamblului. -n fine, atunci c(nd performana este critic se pot folosi blocurile cu cele mai mici dimensiuni posibile instruciunile main ale limbajului de asamblare. 1ficiena codului este n acest caz ma!im, la fel i efortul programatorului. 2 alt variant de adaptare eficient a unui limbaj la o gam larg de aplicaii o constituie diversificarea instruciunilor acestuia pentru a oferi soluii prefabricate ntr-un numr c(t mai mare de situaii. -n acest caz se constat ns o cretere anormal a numrului de instruciuni ale limbajului respectiv, mrind at(t efortul de nvare ct i pe cel de lucru $ de cutare% cu aceste instruciuni. stfel, de e!emplu, funciile +# $ pplication +rogramming #nterface% utilizate de 3isual ' ajunseser deja de la varianta 4indo5s 6.1 la un numr de peste 1677, pentru versiunile viitoare de 4indo5s evit(ndu-se chiar menionarea numrului total. 8iind scrise de mai multe grupuri i chiar generaii de programatori, ele se suprapun uneori, mrind confuzia utilizatorului. #n schimb, utilizarea limbajului de asamblare permite scrierea cu instruciunuile cele mai adecvate posibile a oricrei poriuni de program, aduc(nd prin aceasta viteza ma!im care se poate astepta de la un anumit procesor. #n plus, se pot obtine creteri de performan datorit posibilitii repartizrii eficiente a variabilelor ntre registre i memorie. "e tie c, din considerente hard5are, lucrul cu registrele este mult mai rapid dac(t cel cu memoria 9 : i incomparabil mai rapid dec(t lucrul cu discul. ria de registre constituie ns o resurs limitat a sistemului, de aceea corect ar fi s fie c(t mai mult utilizat de ctre variabilele care sunt cel mai frecvent folosite ntr-o zon de program dat. 'ompilatoarele repartizeaz n mod oarecum arbitrar variabilele ntre registre i memorie, neput(nd .intui/ frecvena lor aa cum poate face un programator n limbaj de asamblare. 2 bun soluie de compromis o reprezint utilizarea nivelului mediu, n variantele limbajului ', al crui succes este de altfel recunoscut. Dar chiar i n cazul folosirii limbajelor de nivel mediu, i cu at(t mai mult a celor de nivel nalt, pot aprea poriuni de program n care viteza este un parametru critic iar instruciunile proprii conduc la soluii innaceptabile din acest punct de vedere. -n aceste cazuri, soluia deja clasic o constituie inserarea de poriuni scrise n limbaj de asamblare. cesta este unul din principalele motive n favoarea cunoaterii limbajului de asamblare i cel mai frecvent c(mp de aplicare a acestuia. -n general, nu mai este recomandabil n momentul de fa scrierea unui program folosind e!clusiv limbajul de asamblare. Din analiza algoritmului unei aplicaii date pot rezulta ins poriunile mari consumatoare de timp i poriunile de interfaare cu o pondere slab n durata total. #n aceste cazuri, programul poate fi scris ntr-un limbaj nalt sau mediu, iar poriunile care necesit vitez - n limbaj de asamblare. 6

+rin urmare, cunoaterea limbajului de asamblare constituie calea natural de mrire a nivelului de performan al unui programator, acesta av(nd posibilitatea s rezolve cazurile cele mai dificile prin soluii principial optimale. ,ucrarea de fa prezint numai acele aspecte ale programrii n limbaj de asamblare care prezint o importan i frecven mai mare n situaiile curente. ;u sau tratat probleme de mare comple!itate, care ar putea descuraja un nceptor i care rareori sunt utile n practic, ncerc(ndu-se n schimb o prezentare gradat, care s asigure un antrenament sistematic al cursantului. "e recomand ca, pe parcurs, s se integreze astfel de programe, in programe scrise ntr-un limbaj de nivel nalt sau mediu deja cunoscut. De asemenea, se recomand ca programele propuse s fie scrise i rulate efectiv pe calculator. -n faza de e!ecuie $depanare%, se vor putea observa deseori diferene fa de ceea ce s-ar atepta n momentul scrierii programului. <ocmai astfel de situaii, n care apar probleme, sunt mai eficiente pentru fi!area cunotinelor de programare i ele au fost de multe ori incluse n mode deliberat n programele propuse. ceast lucrare constituie rezultatul e!perienei didactice de peste 1= ani, perioad n care au fost selectate prin feedbac> metodele cele mai eficiente de nvare rapid a limbajului de asamblare. +rin respectarea ritmului i etapelor din lucrare, se poate constata chiar c nvarea limbajului de asamblare este mai uoar dec(t a unui limbaj de nivel nalt. <rebuie, totui, subliniat c utilizarea sa necesit cunoatera realitii hard5are a procesorului i chiar a sistemului, iar scrierea unor programe comple!e necesit mult mai mult timp dec(t alte limbaje. Dac, ns, decizia de a folosi instruciuni main n poriunui ale unui program este luat n mod corect, creterea de performan va fi evident iar efortul depus va fi rspltit corespunztor. ,ucrarea se adreseaz n primul r(nd studenilor 8acultii de 1lectronic i 'alculatoare a ?niversitii @Aperion, i studenilor 8acultii de 8izic a ?niversitii *ucureti. 1a poate fi ns util tuturor programatorilor care doresc s-i mreasc performanele prin utilizarea celui mai rapid limbaj de programare limbajul de asamblare.

Lucrarea de laborator nr.1 Utilizarea macroasamblorului TAS !i a depanatorului T"


1tapele dezvoltrii unui program n limbajul de asamblare sunt urmtoarele) 1. 1ditarea 0. samblarea 6. ,in>editarea =. 9ularea i eventuala depanare +rogramul n limbaj de asamblare este scris mai nt(i cu un editor de te!t oarecare, constituind aa-numitul program surs. 1l trebuie s respecte dou categorii de reguli) 9eguli specifice setului de instruciuni ale procesorului pentru care este scris. ceste reguli cuprind scrierea corect a mnemonicelor instruciunilor, a operanzilor, diverse prefi!e i notaii suplimentare, toate fiind precizate n documentaia referitoare la procesorul respectiv. 9eguli specifice programului asamblor cu care se lucreaz. ceste reguli se refer la declaraii, etichete, directive de asamblare, pseudoinstruciuni, eventual macroinstruciuni, etc. 1le sunt precizate n documentaia aferent mediului de asamblare. Dup scrierea programului surs, el este incrcat n asamblor care l transforma n final n program obiect. -n plus, din procesul de asamblare se pot obine i alte fiiere, care permit vizualizarea programului, a simbolurilor folosite, etc. +rogramul obiect este la r(ndul su preluat de lin#editor, fiind transformat ntrun $i!ier e%ecutabil - programul final. +rogramul e!ecutabil obinut este testat n diverse moduri, iar n caz de funcionare necorespunztoare din cauze care nu sunt evidente, se ncarc ntr-un program depanator $debugger%. cesta permite rularea pas cu pas a zonelor neclare din funcionarea programului, cu afiarea continu a coninutului registrelor i memoriei, permi(nd astfel localizarea problemelor. Dup clarificarea lor, este modificat corespunztor programul surs, i procesul se reia. 1.1 Utilizarea TAS !i T" n $orma clasic &linie de comand' "(S)

#mplementarea firmei *orland pentru limbajul de asamblare cuprinde n principal trei aplicaii, care vor fi utilizate n ordinea menionrii lor) < ":.1C1- asamblorul $<urbo ssembler% <,#;D.1C1 - lin>editorul $<urbo ,in>er% <D - depanatorul de program $<urbo Debugger% E

1vident, n prealabil trebuie scris $editat% programul surs, cu ajutorul unui editor $acesta nefiind inclus n pachetul de la *orland%. -ntr-o fereastra D2" din sistemul de operare 4indo5s $obinut n 4indo5s C+ din meniul "tart-F +rograms-F ccessories-F'ommand +rompt%, comanda de scriere a programului surs poate fi de e!emplu cea de apelare a aplicaiei 4ordpad a sistemului) write -n cazul n care se ncepe un program nou, ce urmeaz apoi s fie salvat sub un nume propriu $obligatoriu cu e!tensia .asm%, sau write cale\Nume_Surs n cazul n care fiierul surs e!ist deja i urmeaz a fi editat. "e poate folosi de asemenea aplicaia ;2<1+ D.1C1, av(nd avantajul c poate s afieze n bara de stare $jos% numrul liniei pe care se afl cursorul, lucru util pentru identificarea liniei la care asamblorul gsete o eroare. +entru aceasta va trebui bifat n meniul 3ie5 opiunea "tatus *ar. Dup salvarea fiierului surs el va fi chemat de asamblor cu comanda) Tasm Nume_surs, Nume_obiect, Nume_listing unde) ;umeGsurs este numele ales pentru fiierul surs editat anteriorH ;umeGobiect este numele sub care va apare fiierul obiect ce va fi transformat n fiier e!ecutabilH ;umeGlisting este numele unui fiier opional care conine o varianta cu informaii rezultate din asamblare a fiierului surs $listing%, util pentru o analiza vizual. ceast linie de comand admite i anumite opiuni, vizibile dac se d comanda Tasm fr parametri ntr-o fereastr D2". De e!emplu, comanda) Tasm.exe/zi Nume_surs, Nume_obiect, Nume_listing/l va genera informaie complet pentru depanare $Izi% i fiier listing normal $Il%. -n cazul n care nu e!ist erori de sinta!a $sunt respectate cele dou categorii de reguli menionate% se obine un mesaj favorabil $ca n figura 1%, iar fiierul obiect poate fi prelucrat mai departe.

*igura 1.1 - 1!emplu de asamblare fr erori -n cazul n care apar erori, se reia editarea fiierului surs, corect(ndu-se erorile i se face din nou asamblarea. Dac n caseta de asamblare e!ist linia 1rror messages) ;one, se poate trece la lin>editare, folosindu-se comanda) Tlink Nume_obiect, Nume_exefile unde ;umeGobiect este numele folosit n comanda precedenta $de asamblarere% pentru fiierul obiect, iar ;umeGe!efile este numele ce se alege pentru fiierul e!ecutabil. "e pot folosi i aici opiuni de lin>editare, care pot fi vzute rul(nd comanda <lin> fr parametri ntr-o fereastra D2". De e!emplu, comanda Tlink /v Nume_obiect, Nume_exefile va genera informaii simbolice complete pentru depanare. -n continuare, se poate rula programul e!ecutabil obinut pentru a fi testat $ntr-o fereastra D2"% sau se poate ncarca n depanator $de e!emplu <urbo Debugger% pentru a fi rulat pas cu pas. -n acest caz, comanda va fi) TD Nume_exefile Deoarece aceasta suit de comenzi se va repeta de fiecare dat, este comod s se creeze un fiier batch de e!emplu . samblare.bat/ cu urmtoarea structur) write.exe ! "ause \tasm\bin\tasm.exe /zi !,ob#ect,listing/l "ause \tasm\bin\tlink /v ob#ect,exefile "ause \tasm\bin\TD exefile

cest fiier automatizeaz comenzile de asamblare, i va fi folosit pentru punerea la punct a unui program surs care a fost creat iniial cu comanda $rite i salvat cu un nume av(nd obligatoriu e!tensia .asm . +rin dublu clic> pe acest fiier, se va selecta cu opiunea .*ro5se/ calea catre fiierul . samblare.bat/ i se va bifa caseta . l5aAs use this program to open this file/. -n continuare, un dublu clic> pe un astfel de fiier va lansa automat secvena de comenzi necesar asamblrii. ,a finalul fiecrui ciclu de asamblare, se va deschide fereastra depanatorului <urbo Debugger care n general arat ca n e!emplul din figura 1.0

*igura 1.+ - 8ereastra principal din <urboDebugger L

"e observ e!istena mai multor zone n aceasta fereastr. 1. Mona principal, care cuprinde partea st(nga superioar afieaz codul programului i are urmtoarele c(mpuri $de la st(nga la dreapta%) dresa efectiv n he!azecimal 'odul instruciunii n he!azecimal :nemonicul instruciunii 2peranzii, cu eventualele constante numerice reprezentate n he!azecimal 0. Mona de memorie de date, din partea st(nga jos, care cuprinde c(teva linii av(nd structura) dresa efectiv a segmentului de date - 1 'oninutul e!primat n he!azecimal al memoriei la 1 'oninutul he!a al memoriei la 1N1, .a.m.d p(n la 1NJ 1chivalentul "'## al celor K octei aflai la adresele respective "e poate afia o fereastr suplimentar pentru vizualizarea unei zone mai mari de memorie cu comanda ,"ump, din submeniul 3ie5. ceasta va apare, n general, aa cum se vede n figur, n partea de jos a ecranului. 6. Mona de registre, aflat n dreapta ferestrei principale, care afieaz n he!azecimal pe 1E bii coninutul tuturor registrelor =. Mona de flaguri, n e!trema dreapt, n care sunt afiate valorile indicatorilor de condiii dup fiecare instruciune e!ecutat. B. -n colul din st(nga jos este afiat coninutul segmentului curent din stiv.

-n fereastra principal se observ un cursor, reprezentat prin colorarea diferit a unei linii $n figur, chiar prima linie% care poate fi folosit pentru a marca un punct de oprire la o comanda de rulare a progranului. 'u opiunea .9un to cursor/ $ tasta 8=% din meniul .9un/ se poate rula automat programul p(n la acest punct. +oziionarea cursorului este obligatorie dac programul nu are un punct de oprire sau ieire $n caz contrar, se continu automat cu interpretarea codurilor gasite n memorie dup ultima instruciune, iar sistemul se poate bloca%. <erminarea se poate face cu o instruciune de salt necondiionat la ea insi, sau folosirea funciei ='h a ntreruperii 01h, cum se va arta ulterior. 'a alternativ, programul poate fi rulat instruciune cu instruciune, cu tasta 8J, urmrindu-se evoluia registrelor, a memoriei i a indicatorilor de condiii dup fiecare pas.

17

Dac asamblarea a decurs fr erori, n funcie de setrile <D, n fereastra acestuia poate s apar chiar programul obiect care poate fi rulat de asemenea instruciune cu instruciune $figura 1.6%.

*igura 1.- - 8iierul obiect n fereastra <D Dac se dorete vizualizarea registrelor i a memoriei, se poate selecta n meniul .3ie5/ comanda .'+?/, sau alte ferestre. 1ventual se poate bifa n meniul .2ption/ -F/DisplaA options/ caseta .=6IB7 ,ines/ i n .2ption/ -F/"ave options/ caseta .,aAout/.

1.+ Utilizarea TAS

!i T" n $orma integrata &$ereastra .indo/s)

"e poate lucra mai comod folosind programul :# D - :ediu #ntegrat de samblare i Depanare $O ?niversitatea @Aperion%, care integreaza editorul, asamblorul, lin>editorul i depanatorul de la *orland ntr-o forma grafic. ,a lansare apare fereastra de editare, n care se va scrie te!tul programului surs, ca n figura 1.=. 1!ist posibilitatea de a deschide un fiier cu e!tensia .asm din directoarea ')P< ":P*#;, sau de a deschide un sablon care conine elementele mininale care trebuie s apar ntr-un program scris n assembler. Dup editare, fiierul se va salva peste cel original, sau cu un nume nou, dar n care se va specifica obligatoriu e%tensia .asm $alfel nu este recunoscut de asamblor%.

11

*igura 1.0 -:ediul de asamblare ?rmeaz comanda de Asamblare 1Lin# lansat din meniul 1!ecuie sau cu butonul din bara de sub meniu, fiind generat un mesaj care arat condiiile de finalizare ale asamblrii. Dac au aparut erori, este afiat o fereastr cu fiierul ,isting, indic(nd tipul erorilor i poziia acestora, ca n figura 1.B. -n caz c nu sunt erori, listingul nu va fi afiat dec(t dac este bifat opiunea Q'u afiare listingQ din submeniul 1!ecuie. Dac e!ist erori, se revine n fereastra iniial, de editare, i se corecteaz acestea. "e trece n continuare la rularea programului $etap permis numai dac asamblarea s-a facut fr erori%. "e poate face rularea direct, cu comanda 2un din submeniul 1!ecuie sau cu butonul . ;u se recomand ns aceasta comanda dec(t atunci c(nd programul nou creat este suficient de bine pus la punct pentru a nu bloca sistemul. -n fazele iniiale ale dezvoltrii programului se recomand testarea i depanarea cu comanda "ebug din submeniul 1!ecuie sau cu butonul . ceasta produce ncrcarea programului n <urbo Debugger, apr(nd fereastra acestuia, ca n figura 1.0 10

*igura 1.3 - 8iserul ,isting cu specificarea erorilor Dac ordinea operaiilor nu este respectat, programul d mesaje care indic etapele omise. +e bara de jos a ferestrei principale este afiat numele fiierului curent i stadiul asamblrii acestuia.

16

Lucrarea de laborator nr. + Instruc4iuni de trans$er ntre registre


+.1 5lemente ale limbajului de asamblare +rogramul surs este format dintr-un numr de linii, care pot fi) Directive de asamblare 1tichete i declaraii de simboluri 'omentarii ,inii de instruciuni 2 linie de instruciune a programului surs are urmtoarea structur)

65tic7et89: nemonic:6Pre$i%9:(perand16'6Pre$i%9:(perand+9:6;<omentariu9

unde) +arantezele acolade indic un c(mp opionalH "emnul G indic un separator, care poate fi format din spaii sau tab-uriH -ntre 2perand1 i 2perand0, separatorul este de regula o virgulH 1ticheta este un grup de caractere care ncepe cu o litera i nu coincide cu un cuv(nt rezervat. 1a trebuie urmat de semnul .)/ atunci c(nd se afl la nceputul liniei. '(nd este referita ca operand $de e!emplu la o instruciune de salt%, ea nu mai este urmat de acest semn. 1!emple) 1ticheta1, ,oop1B, "alt, ,abel, ,00, etc. :nemonicul este o prescurtare a descrierii instruciunii i este conform cu setul de instruciuni al procesoruluiH 2perandul poate fi un nume de registru, o constant numeric $date sau adrese%, sau o etichet, conform descrierii instruciunii respectiveH +refi!ele dau precizri suplimentare despre operanzi, conform descrierii instruciunii respectiveH 'omentariul este opional i trebuie precedat de semnul .H/ . <ot ceea ce urmeaz pe o linie dup acest semn este ignorat de asmblor. <oate programele care urmeaz a fi asamblate cu macroasamblorul < ": vor avea o parte de preambul minimal, de forma) .model small .stack 100h .code start: -------------1=

+rimele trei liniii sunt directive de asamblare, care declar cantitatea de memorie folosita, poziia stivei, i nceputul segmentului de cod. patra linie este eticheta de intrare n program acesta ncheindu-se cu declaratia 5=" etic7eta:de:intrare. 8inalizarea se poate face cu o linie de bucla infinit i cu directiva end, de forma) Bucla: jmp bucla End start 3arianta normal de finalizare folosete ntreruperea 01h i se va prezenta ulterior. +.+ =ota4ia 7e%azecimal8 -n continuare se vor folosi urmtoarele notaii pentru date $valori imediate, precizate n instruciune%) -de K bii - n)7..788hH notaie echivalent) imm>H -de 1E bii - nn)7..78888hHnotaie echivalent) imm1?H -de 60 bii - nnnn)7..788888888hHnotaie echivalent) imm-+H +entru reprezentarea comod a datelor, cuvintele n cod binar se mpart n mai multe grupuri de c(te = bii i se asociaz fiecrui astfel de grup un simbol $cele 17 cifre din sistemul zecimal plus primele E litere ale alfabetului%, rezult(nd aa-numita reprezentare he!azecimal. 'u = bii se pot realiza 0 =R1E combinaii, conform tabelului 0.1. De e!emplu, numrul binar) 1771717711771717 se va scrie) 1771.7177.1177.1717 adic L=' n he!azecimal. +entru a se evidenia octeii, se mai folosete i scrierea echivalent L=.' , unde L= este octetul mai semnificativ iar ' octetul mai puin semnificativ. -n felul acesta se folosesc de p(n la = ori mai puine cifre pentru reprezentarea datelor. ?n numr binar de K bii $octet% se poate scrie cu 0 cifre he!azecimale, un numr de 1E bii $5ord% cu = cifre he!azecimale, etc. +entru a preciza ca un numr este reprezentat n he!azecimal $e!ist astfel de numere care nu conin deloc litere% se folosete sufi!ul h ataat n dreapta. De e!emplu numrul anterior se va scrie ca L=' h. :ajoritatea asmbloarelor nu fac diferene ntre litere mari i litere mici, deci se pot folosi i notaii de genul) L=' h , L=c @ sau L=ca@.

1B

Mecimal *inar @e!azecimal 7 7777 7 1 7771 1 0 7717 0 6 7711 6 = 7177 = B 7171 B E 7117 E J 7111 J K 1777 K L 1771 L 17 1717 11 1711 * 10 1177 ' 16 1171 D 1= 1117 1 1B 1111 8 Tabelul +.1 - 9eprezentarea he!azecimal :ediul de asamblare consider implicit constantele ca fiind zecimale. 'onstantele he!azecimale trebuie s fie urmate de su$i%ul @, iar cele binare de su$i%ul A $se pot folosi litere mari sau litere mici%. Dac se intenioneaz ca toate numerele din program s fie implicit he!azecimale se poate introduce directiva .2adi% 1?, de regul naintea directivei ."tac>. Toate numerele $olosite $olosite n continuare sunt implicit 7e%azecimale. +entru specificarea numerelor zecimale se va folosi su$i%ul ". Deoarece numerele he!azecimale cuprind i litere, ele ar putea fi confundate cu alte simboluri literale $etichete% folosite n program. De e!emplu, numrul he!azecimal D'1@ $n binar 1717.1171.1177.1117% ar putea fi o eticheta, o variabila sau o constant. Pentru a preciza c este Borba de un numr' dac numrul ncepe cu o litera se pune n stCnga sa ci$ra D. De e!emplu, numrul anterior se va scrie 7 D'1h, numrul 1711.1777.1771.7771 se va scrie 7*KL1h, etc. Dac numrul de bii ai cuv(ntului binar nu este un multiplu de =, el se va completa n st(nga cu 7 p(n devine multiplu de = i apoi se face delimitarea cifrelor he!azecimale. De e!emplu numrul binar) 1711711771 se va scrie 7717.1171.1771R 0DLh sau 70DLh ;umerele folosite de diveri algoritmi pot fi cu semn sau fr semn. numite instruciuni aritmetice se comporta diferit pentru cele dou categorii de numere, aa cum se va arata mai t(rziu. +entru numerele cu semn se folosete urmtoarea convenie) primul bit din stCnga al numarului &cel mai semni$icatiB) este bitul de semn. 1l are valoarea D dac numrul este pozitiB !i 1 dac este negatiB. 1E

+.- 2egistrele procesoarelor Intel %>? :icroprocesorul convenional din seria #ntel !KE are urmtoarele registre pentru lucrul curent) 9egistrul de 1E bii C *C 'C DC D" '" "" 1" "# D# *+ "+ #+ 8 9egistrele de K bii ?tilizare preferenial

@ *@ '@ D@

, *, ', D,

Dedicat nmulirilor i mpririlor, etc. dresare $baza segmentului de date% 'ontorizare ?tilizat n inmuliri i impartiri dresa segmentului de date dresa segmentului de cod dresa segmentului de stiv dresa e!trasegment $transfer de iruri% dresa sursei n transferuri de iruri dresa destinaiei n transferuri de iruri dresare $baza segmentului de stiv% #ndicator de stiv ;umrator de program 9egistrul de flaguri $indicatori de condiii% 1J

9egistrele au fiecare c(te 1E bii, cele generale put(nd fi mprite n c(te dou registre de K bii) cel care reine octetul inferior, notat cu sufi!ul , i cel care reine octetul superior, notat cu sufi!ul @. :icroprocesoarele de diverse tipuri au mai multe registre, cu mai mult de 1E bii $cele din seriile #-6KE, #-=KE i +entium %. 9egistrele de mai sus au de fapt la aceste procesoare un numr de 60 de bii, dar pot fi folosite ca registre de 1E bii cu notatiile de mai sus. -n cazul n care se dorete folosirea lor ca registre de 60 de bii, denumirea lor va fi precedat de litera 1 $de la Qe!tendedQ%, iar n preambulul programului va trebui pus directiva .6KE, pentru a preciza c este folosit un procesor de la #-6KE n sus. ;otaiile folosite pentru registre n cele ce urmeaz sunt) -de K bii - r>) ,, @,*,,*@,',,'@,D,,D@H -de 1E bii - r1?) C,*C,'C,DC,"#,D#,*+,#+,8H -de 60 bii - r-+) 1 C,1*C,1'C,1DC,1"#,1D#,1*+,1#+,18H -registre de segment -rs) D",1","",'".,a procesoare de la #-6KE n sus mai e!ist dou registre suplimentare de segment, 8" i S". +.0. Instruc4iuni de trans$er ntre registre :nemonic general) (E dest'src

Ac4iune8 FdstG ia Baloarea FscrG dst src 2peranzi) dst) rK,r1E,r60,rs src)rK,r1E,r60,rs,n,nn,nnnn 9estricii) nu sunt posibile transferuri de tip) -:23 rs,rs $nu sunt posibile transferuri ntre registre de segment% -:23 rs,nn $nu se poate scrie o constant direct ntr-un registru de segment% -:23 cs,T $nu se poate transfera nimic n registrul de segment de cod% Exemplul 2.1: %&' %&' %&' %&' %&' (), D), 23, 53, (+, **+ !!11+ (3 D+ D3 ,-ncarc ,-ncarc ,-ncarc ,-ncarc ,-ncarc .n .n .n .n .n () D) 23 53 (+ constanta /exa constanta /exa con4inutul lui con4inutul lui con4inutul lui 00**+ !!11+ (3 D+ D3

1K

od de lucru 8 <oate constantele numerice specificate mai jos sunt he!azecimale, deci n programul surs vor fi urmate de sufi!ul h. 9ularea programelor se va face cu <D n modul pas cu pas $cu tasta 8J% i dup fiecare instruciune se va urmri n fereastra de afiare a registrelor modificarea coninutului acestora. "e vor scrie i testa urmtoarele programe) P +.1. +rogram de scriere n registrele ,, *,, ', i D, a constantelor LL, , **, respectiv ''. P +.+. "e va completa programul anterior pentru a transfera coninutul registrului , n registrele *,, *@, ',, i D@. P +.-. +rogram de scriere n registrele C, *C, 'C i DC a constantelor 1100, 66==, BBEE, respectiv JJKK. P +.0. "e va completa programul anterior pentru a transfera coninutul registrului registrului *C n registrul DC, i al registrului 'C n C. P +.3. +rogram care s transfere constanta 106= n registrul D" i constanta BEJK n registrul DC. P +.?. " se scrie n registrele , i *,, constantele LL i i se va face apoi interschimbarea coninutului acestora. +.3. Instruc4iuni de intersc7imbare ntre registre :nemonic general) H<@I dst'src ciune) "e interschimba coninuturile registrelor dest i src. dst src src dst 2peranzi) dst,src)rK,r1E,r60 9estrictii);u e!ist instruciuni de tip) -C'@S rs,rs -C'@S cs,T od de lucru ) P +.J. "e vor ncarca urmtoarele registre astfel) , cu 11 *, cu 00 1L

'C cu 66== DC cu BBEE dup care se va interschimba coninutul celor de K bii i coninutul celor de 1E bii. P +.>. "e vor ncrca registrele ,, @, *, i *@ constantele ,**,'' i DD i apoi se va efectua permutarea circular a coninutului celor = registre. "e vor folosi instruciuni de tip C'@S, i dup terminarea rulrii programului registrele vor trebui s aib valorile) ,R**h, @R''h, *,RDDh i *@R h +.?. Instruc4iuni de adunare !i scdere :nemonice generale) -A"" dst,src - dunare ) dstRdstNsrcH -A"< dst,src - dunare cu transport $'8%) dstRdstNsrcN'8 -SUA dst,src - "cdere) dstRdst & srcH -SAA dst,src - "cdere cu transport $.carrA% sau mprumut $.borro5/%) dstRdst-src-'8H -n toate operaiile aritmetice, se folosete implicit convenia complementului fa de 0. stfel, numerele pozitiBe au bitul cel mai semni$icatiB & SA) D' iar cele negatiBe au SA 1. ;umerele negative vor avea valoarea diferenei ntre valoarea lor absoluta i 0Kn , unde n este numrul de octei folosii. 1!emple) 0BhR7717.7171 este un numr pozitiv, av(nd echivalentul zecimal 6JH 7*6'hR 7777.1711.7711.1177 este un numr pozitiv, cu echivalent zecimal 0KJEH 7 JhR1717.7111 este un numr negativ $dac este considerat de un octet%, cu valoare absoluta 1EJ i valoare n complement fa de 0 care se calculeaza conform formulei 1EJ-0K R -KLH 7'1 'h R 1177.1117.1717.1177 este un numr negativ de doi octei, cu valoare absoluta B0L7K i valoare n complement fa de 0 care se calculeaza conform formulei B0L7K-01E R -10E0KH "e observ c un eventual 7 n faa numrului scris n format he!azecimal nu nseamna c acesta are semn pozitiv. 'onteaz numai primul bit al octetului cel mai semni$icatiB. ceste transformri se pot face cu utilitarul 'alculator din 4indo5s, av(nd opiunea 3ie5 - F "cientific. od de lucru) P +.K. "e vor ncarca registrele cu constantele) CR1100, *CR66==, 'CRBBEE, DCRJJKK i se va efectua urmtoarea succesiune de operaii) 07

,NEE ,N*, ,-', ,-00 ,N*,N',ND, P +.1D. "e vor ncarca registrele cu constantele) CR1100, *CR66==, 'CRBBEE, DCRJJKK i se va efectua urmtoarea succesiune de operaii) CNEEEE CN*C C-'C C-00 CN*CN'CNDC P +.11 "e vor ncarca dou numere de 60 de bii n registre n felul urmtor) - primul numr 110066== n C $octeii superiori% i *C $octeii inferiori% - al doilea numr BBEEJJKK n 'C $octeii superiori% i DC $octeii inferiori% -n continuare se va efectua adunarea celor dou numere. 9ezultatul trebuie s fie EEKK '' P +.1+ celai program ca la 0.11, numerele fiind BBEEJJKK i LL 9ezulatul trebuie s fie 181166B=. **''.

P +.1- celai program ca la 0.11 dar, numerele fiind BBEEJJKK i 110066==, se va efectua scderea lor. 9ezultatul trebuie s fie ========. P +.10 celai program ca la 0.16, numerele fiind 0066==BB i EEJJKKLL. 9ezultatul trebuie s fie *******'.

01

Lucrarea de laborator nr. Trans$eruri de date !i opera4ii aritmetice cu memoria


-.1 <omponentele unei adrese logice +entru a modulariza blocurile de memorie folosite de diverse tas>-uri i pentru a nu trebui specificat pe tot parcursul unui program o adresa logica de 60 de bii, arhitectura procesoarelor #ntel !KE folosete procedeul segmentrii. stfel, spaiul de memorie este mparit n blocuri de ma!im E= D* n :odul 9eal $respectiv 1 :* sau = S* n :odul +rotejat%, blocuri numite segmente. ceasta permite ca n :odul 9eal specificarea unei adrese de memorie s se fac prin numai 1E bii, considerai ca fiind poziia locaiei respective de memorie fa de baza segmentului n care se afl. cesti 1E bii formeaz adresa e$ectiB sau deplasamentul $o$$set%. ;e vom referi n continuare, dac nu se va specific altfel, numai la :odul 9eal de funcionare.

"egment n . . . . . "egment 0 dresa efectiv $ 1% dresa logica $ ,% dresa baza segment $ *"% . . . . .

,ocaia vizat

"egment 1

*igura -.1 - dresarea n cadrul unui segment

00

*locul de management al memoriei din interiorul procesorului va forma automat o adresa logic de memorie ca n figura 6.1, dup urmtoarea formul general) AL L ASM1? 1A5 unde) AL este adresa logic $coincide cu adresa $izic, transmis pe magistrala de adrese, dac nu se folosete paginarea%. AS este adresa de segment, coninut n unul din urmtoarele registre) -<S pentru segmente de coduri de instruciuni -"S pentru segmente de date -SS pentru segmente de stiv -5S pentru e!trasegmente 1a nu coincide cu adresa bazei segmentului , acesta fiind obtinuta prin deplasarea cu = bii spre stanga a adresei de segment $inmulire cu 1E%) *"R1ET " +rin acest procedeu de scriere a dreselor de segment, ele vor avea numai 1E bii, iar adresa bazei segmentului va avea 07 si se obtine automat in unitatea de management a memoriei din interiorul microprocesorului. A5 este adresa e$ectiB , indic(nd poziia n interiorul unui segment, adic deplasamentul fa de baza segmentului. 1a are 1E bii,ceea ce nseamn c un segment are o lungime de ma!im E=> $01E locaii%. <onBen4ii 8 (rice operand pus ntre paranteze drepte reprezint o adresa de memorie . De e!emplu U6 01V reprezint coninutul locaiei de memorie cu adresa efectiv 6 01, iar U*CND#V reprezint coninutul locaiei de memorie a carei adresa efectiv este dat de suma ntre registrele *C i D#. 1ste permis i scrierea 9SUconstV cau constU9SV unde 9S este un registru general iar const este un deplasament $numr sau etichet % care se adun la coninutul acestui registru. cest forma este echivalent cu U9SNconstV, deci scrierea de termeni alaturai are semnificaie de sumare i nu de nmulire. Exemplu 3.1: %&' 23,5)6!0/7 , -ncarc .n 23 con4inutul ,loca4iei 8e memorie a carei a8resa efectiv este suma ,.ntre con4inutul lui 5) 9i constanta !0/, iar a8resa 8e ,segment este con4inut .n DS. #nstruciunea este echivalent cu forma :23 ',, 17hU*CV. 06

Nn mod normal' programatorul Ba speci$ic numai adresa e$ectiB' dar n cazuri speciale se poate folosi totui i adresa fizic, prin specificarea i a adresei de segment, cu sinta!a) A*LAS8A5 Exemplul 3.2: %&' (+,DS:610/7 ,Transfer .n (+ con4inutul ,loca4iei 10/ 8in segmentul a crui ,a8res este con4inut .n registrul DS %&' SS:65);!0/7, 23 ,Transfer con4inutul lui 23 ,.n loca4ia a carei a8resa efectiv este ,8at 8e con4inutul lui 5) a8unat cu !0/, ,8in segmentul a crui a8res este ,con4inut .n SS. odul de lucru8 P -.1 "e va scrie i se va testa un program care efectueaza urmtoarele) -ncarc constanta 00h n registrul , <rimite aceast constant n memorie la adresa *CU07V i la adresa D")67 Indicaii: mbele locaii sunt plasate n segmentul de date i se pot vizualiza n zona Dump din fereastra inferioar a <urbo Debugger. -.+ <omponentele unei adrese e$ectiBe 1ste comod s se lucreze n mod normal cu adrese efective, adresa de segment fiind incrcat de procesor n mod automat din registrul de segment implicit pentru operaia respectiv. ceasta conduce ns la necesitatea cunoasterii registrelor implicite pentru diversele adresri, registre care vor fi specificate n continuare. 1 se alctuiete dup formula general) A5 L &AHOAP)M 1 &SIO"I)M 1 &">O"1?)M unde) T indic un termen opional $nu se admite o termen% I separ variantele unui termen 0= 1 format numai din ultimul

*C i *+ sunt registrele de tip baz "# i D# sunt registrele inde! $ surs i respectiv destinaie% DK i D1E reprezint un deplasament e!primat pe K, respectiv 1E bii Deci, adresa efectiv se e!prima i sub forma) Adresa L Aaza 1 Inde% 1 "eplasament, unii dintre aceti termeni fiind opionali. -n funcie de registrele generale folosite n formarea unei adrese, registrele de segment implicite sunt cele din tabelul 6.1. 2egistru general "+ *+ *C "# D# *+N"# sau *+ND# *CN"# sau *CND# #+ 2egistru de segment implicit "" "" D" D" 1" "" D" '"

Tabelul -.1- 9egistrele de segment implicite la formarea unei adrese <rebuie s se in seama n permanen de regulile registrelor de segment implicite deoarece asamblorul nu poate semnala erori n cazul utilizarii lor incorecte. De e!emplu, dac se dorete citirea unei valori din segmentul de date i se folosete registrul general *+ n instruciunea) %&' 2+,65<;!07 asamblorul consider ca aceasta instruciune este corect i ca intenia programatorului a fost s citeasc din segmentul de stiv $vezi tabelul%. +rogramatorul ar fi trebuit s foloseasca unul din registrele *C sau "# dac dorea citirea din segmentul de date. (bserBa4ie) samblorul nu accept 1 specificat numai ca o constant numeric, deoarece nu poate ti registrul de segment implicit. De aceea, se vor folosi forme de sumare cu un registru $eventual adus la 7 n prealabil%, sau adrese logice . 1!emplu) n loc de :23 ,, U6777V se va folosi :23 ,,U*CN6777V, dac *C a fost facut 7 n prealabil. ?nele asambloare dau ns doar o avertizare i folosesc segmentul de date, indiferent dac aceasta a fost intenia programatorului sau nu.

0B

odul de lucru8 -n programele care urmeaz se va incerca, de c(te ori este posibil, s se foloseasc adrese efective, ls(nd procesorul s ncarce automat adresa de segment din registrul implicit specificat n tabelul 6.1. P -.+. "e va scrie i se va testa un program care efectueaz urmtoarele) -ncarc constanta 00 n registrul ,H <rimite aceast constant n memorie n segmentul de date la adresa 17 i la adresa 67H <rimite aceast constant n memorie n segmentul de stiv la adresa 107. Indicaii: +rimele dou locaii se pot vedea n fereastra Dump, iar ultima n fereastra "tac> din dreapta jos a <urbo Debugger. +entru a se specific segmentul de stiv, se va folosi adresarea prin registrul *+. -.- Trans$eruri pe 1 octet !i pe + octe4i 2 locaie de memorie are prin convenie un octet, astfel c ea poate fi operand numai pentru un registru de K bii. -n cazul n care se fac transferuri cu registre de 0 octei se utilizeaz urmtoarea convenie $Qlittle-endianQ%) la adresa specificat se afl octetul inferior al registrului dublu, iar la adresa imediat urmtoare octetul superior. "pecificarea lungimii operandului $1 octet sau 0 octei% este sau implicit sau declarat cu pre$i%ele *W<1 +<9 repectiv 429D +<9 . Exemplul 3.3: :23 ,, U*CN6777V transfer numai n , octetul de la adresa 6777 din segmentul de date. ;u este nevoie de prefi! deoarece operandul , este de K bii i rezulta implicit un transfer de un octet. :23 C, U"#N6777V transfer n , octetul de la adresa 6777 din segmentul de date i n @ octetul de la adresa 6771 din segmentul de date $ntotdeauna n octetul superior coninutul locaiei de memorie cu adresa mai mare%. ;u este nevoie de prefi! deoarece operandul C este de 1E bii i rezult implicit un transfer de doi octei. DD 5ord ptr U*CN6777V,BL adun la cuv(ntul $numr de 1E bii% coninut n locaiile 6771 i 6777 din segmentul de date, numrul BL. Dac nu s-ar specific lungimea Q5ord ptrQ, s-ar face adunarea pe un singur octet ntre coninutul locaiei 6777 i constanta BL. 0E

DD bAte ptr U*+N6777V,BL adun la octetul coninut n locaia 6777 din segmentul de stiv, numrul BL, fr vreo influenta asupra locaiei 6771. Dac nu sar specifica lungimea, operaia s-ar efectua tot pe un octet, dar asamblorul ar afia totui o avertizare legat de lungimea operanzilor. odul de lucru 8 "e vor scrie i testa urmtoarele programe, folosindu-se pe cat posibil numai adrese efective) P -.-. +rogram care ncarc n C constanta 66== i o trimite n memorie la adresa 07h. "e va observ n ce fel apar octeii acestei constante n memorie. P -.0.<rimite n memorie la adresa 07 constanta 1100 i la 67 constanta == P -.3. +rogram care) ncarc constanta 6611 n C o trimite n memorie la adresa 67 ncarc constanta 00 n , adun aceast constant la numrul din locaiile ncarcate anterior cu constanta 6611. Indicaii: +entru a avea rezultatul adunrii pe 1E bii, va trebui folosit registrul C, dup ce se ncarc @ cu 77. -n memorie, la adresa D")67 vor apare octeii 17.6=, adic numrul 6=17, rezultatul adunrii lui 6611 cu 00. P -.?. +rogram care trimite n memorie la adresa 17 din segmentul de date suma constantelor == i 100, fr s se specifice e!plicit registrul de segment. Indicaii: 9ezultatul, la adresa 17 trebuie s apar sub forma EE.71. P -.J. celasi program ca la punctul 6.E dar se vor folosi adrese logice, fr a implica alte registre generale $se presupune ca nu trebuie modificat coninutul acestora%. Indicaii: 3a fi necesar s se specifice e!plicit registrul de segment.

-.0

oduri de adresare

-n funcie de termenii folosii n formula general a adresei efective, se definesc urmtoarele moduri de adresare) 0J

1. Adresare imediat la memorie8 "e specific n adresa efectiv numai deplasamentul, care constituie chiar adresa efectiv. 'onform observaiei de la paragraful 6.0, este necesar s se specifice i registrul de segment, deci se va scrie de fapt o adresa logic. Exemplul 3. : %&' (),DS:6=>7 ,-ncarc .n (3 con4inutul loca4iei cu a8resa efectiv => 8in segmentul 8e 8ate, iar .n (+ con4inutul loca4iei urmtoare %&' ?S:6*(217,D3 ,-ncarc .n loca4ia cu a8resa efectiv *(21 8in extrasegment con4inutul registrului 8e @ bi4i D3 dresa efectiv poate fi specificat i printr-o etic7et $n paranteze drepte i cu specificarea unui segment sau a unui registru general% care a fost declarat anterior. Declararea unei etichete se face cu una din variantele) eticheta 1X? numr eticheta 1X? ir eticheta R numr Dac se folosete forma cu 1X?, se admite pentru asignare i un ir de caractere, n schimb nu se mai poate face alt asignare ulterioar n program. 8orma cu R admite reasignri, dar nu permite asignarea cu iruri. Exemplul 3.!: a8resa! eAu 10/ a8resa1 eAu a8resa!;1 a8resa*B*0/ . . . mov (3,DS:6a8resa!7, -ncarc .n (3 continutul ,loca4iei 8e memorie 8e la a8resa 10/ ,8in ca8rul segmentului 8e 8ate mov SC6a8resa17,c/ ,-ncarc 2+ .n a8resa 11/ ,8in ca8rul segmentului 8e 8ate mov (+,65<;a8resa*7,-ncarc .n (+ 8e la ,a8resa *0/ 8in ca8rul segmentului 8e ,stiv . . 0K

. +. Adresarea direct -n caz c se utilizeaz numele unei locaii declarate n cadrul segmentului de date, nu mai sunt necesare parantezele drepte i un alt registru. dresa de segment este coninut implicit n D", dac nu se specific altfel. ceasta form este posibil pentru segmentul de date, care poate fi declarat n partea iniial a programului, fr ca programatorul s se preocupe de plasarea sa e!act n memorie. "e utilizeaz directive de rezervare a unor locaii de memorie, "A, D4, etc. care vor fi prezentate pe larg mai t(rziu. dresa va fi calculat automat de asamblor i nlocuit n instruciune cu valoarea numeric corespunztoare. Exemplul 3.": .mo8el small .stack !00/ .D(T( loca4ie

8b

**,>>,==,DD ,Stabile9te a8resa ,Eloca4ieE la .nce"utul ,segmentului 8e 8ate

.co8e MOV AX,Pdat !ncarc adresa se"mentulu# de date MOV $%,AX &n re"#strul $% %&' (3,loca4ie;1 ,-ncarc .n (3 octetul 8e la a ,loca4ia 01 8in DS %&' loca4ie;!, bFte "tr (3,-ncarc .n loca4ia 0! ,con4inutul lui (3 . . . "e observ c nu este necesar punerea operandului de adresa n paranteze, prin eticheta declarat dup directiva ."ATA neleg(ndu-se implicit coninutul unei locaii de memorie. (bserBa4ie8 #nstruciunile care urmeaz imediat dup directiva .code din e!emplul de mai sus $ cele cu caractere bold% sunt necesare ntotdeauna atunci c(nd se declar un segment de date. samblorul i lin>editorul plaseaz acest segment acolo unde au memorie liber i adresa acestui segment trebuie incrcat e!plicit n registrul de segment de date, D". 'um acest registru nu admite o ncrcare direct cu o constant, aceast adres, cunoscut de asamblor prin simbolul Pdat se ncarc nt(i ntr-un registru general i apoi se transfer n registrul D". "e poate folosi i forma de referire la o variabil sau constant din segmentul de date $forma nerecomandat totui n astfel de cazuri%) 0L

%&' (), seg loca4ie +rogramul <urbo Debugger, dac are implicit afiata o fereastra Dump, dup rularea instruciunii MOV $%,AX va afia automat zona respectiv cu registrul de segment 1". +entru a afia chiar segmentul de date, trebuie dat o noua comanda Dump din submeniul 3ie5, atunci c(nd fereastra '+? este activata $dac nu este, se da un clic> pe aceasta fereastra%. -n noua fereastra dump se vor observa datele declarate. -.Adresare indirect la memorie prin registru. "e specific n instruciune registrul din care se va lua adresa efectiv. Dup cum rezulta din formula, registrul este unul din urmtoarele) *C,*+,"#,D#. Exemplul 3.#: %&' (3, 65)7 ,-ncarc .n (3 con4inutul ,loca4iei 8e memorie a carei a8resa efectiv este ,con4inut .n 5) 9i a8resa 8e segment con4inut .n ,registrul im"licit DS. %&' 65<7,2) ,-ncarc con4inutul lui 23 .n ,loca4ia 8e memorie a carei a8resa efectiv este ,con4inut .n 5< 9i a8resa 8e segment con4inut .n ,registrul im"licit SS, iar con4inutul lui 2+ .n loca4ia ,8e memorie urmtoare. Dac nu se specific n adresa i un registru de segment, acesta va fi cel implicit, specificat de tabelul 6.1 0.Adresare indirect la memorie prin registru cu deplasare. dresa efectiv este dat de suma registrului i deplasamentului specificate de instruciune. dresa de segment va fi dat de D", cu e!cepia cazului n care se utilizeaza registrul *+, caz n care adresa de segment este dat de "". Exemplul 3.$: %&' (3,6DC;*!7 , Transfer .n (3 con4inutul loca4iei a carei a8resa este 8at 8e con4inutul lui DC la care se a8un *!, iar a8resa 8e segment este 8at 8e DS. %&' 65<;!11D7,2), Transfer "e 23 .n loca4ia a carei a8resa este 8at 8e con4inutul lui 5< la care se a8una !11D, iar a8resa 8e segment este 8at 8e SS, iar 2+ .n loca4ia urmtoare. ceste instruciuni se mai pot scrie i ) 67

:23 ,,61UD#V respectiv :23 100EU*+V,'C :odul de adresare prin registru cu deplasare se recomand pentru adresarea elementelor irurilor i tabelelor. De e!emplu, dac s-a definit anterior constanta numeric < * $ de e!emplu < * 1X? 0177% se poate adresa elementul de tabel cu numrul coninut n registrul "# printr-o instruciune de genul DD *C, < *U"#V. 3.Adresare indirect la memorie prin + registre. dresa efectiv este dat de suma a dou registre specificate de instruciune $una din cele = variante posibile conform e!presiei generale%. 9egistrul de segment implicit este D" cu e!ceptia cazului c(nd este menionat *+, n care caz segmentul este cel de stiv, cu adresa coninut n "". :odul de adresare prin registru cu deplasare se recomand pentru adresarea elementelor irurilor i tabelelor. De e!emplu, dac s-a incrcat anterior constanta numeric < * ntr-un registru de baza $ de e!emplu :23 *C,0177% se poate adresa elementul de tabel cu numrul coninut n registrul "# printr-o instruciune de genul :23 'C,U*CN"#V. Exemplul 3.%: %&' 23,65<;SC7 S55 D),65);DC7 sau %&' 23,65<76SC7 sau S55 D),65)76DC7

?.Adresare indirect la memorie prin + registre cu deplasare. dresa efectiv este dat de suma a dou registre i un deplasament, toate elementele fiind specificate de instruciune. 9egistrul de segment implicit este D" cu e!ceptia cazului c(nd este menionat *+, n care caz segmentul este cel de stiv, cu adresa coninut n "". Exemplul 3.1&: %&' 2),65);SC;127 SG5 D),65<;SC;1>==7 :odul de adresare prin 0 registre cu deplasare se recomand pentru adresarea elementelor matricilor. De e!emplu, dac s-a definit anterior constanta numeric : < $ de e!emplu 0177% iar *+ conine numrul unei linii nmulit cu numrul total de coloane se poate adresa elementul din linia respectiv av(nd indicele $numrul de coloan% coninut n registrul "#, printr-o instruciune de genul) (DD 5),%(T65<76SC7,echivalent cu DD *C,U*+N"#N0177V

61

De e!emplu, pentru o matrice cu B linii i E coloane, care ncepe la adresa 07h, dac se dorete accesarea elememtului al treilea din linia a patra, vom scrie) %(TB10/ %&' 5), !@ %&' SC,* %&' 23, %(T65);SC7 odul de lucru P -.>. "e va realiza un program care s e!ecute prin adresri imediate urmtoarele operaii) -n '@ se va citi $transfer% de la adresa 17 din memoria de date -n DC se va citi de la adresa 11 "e va scrie la adresa 07 constanta 00 "e va scrie la adresa 01 constanta KKJJ "e va scrie la adresa 67 coninutul lui '@ "e va scrie la adresa 61 coninutul lui DC P -.K. "e va realiza un program care are urmtoarele date iniiale) constantele de un octet R11 i *R00 i constantele de doi octei 'R66== i DRBBEE."e va calcula in *C e!presia $'ND%-$ N*%. P -.1D. "e vor ncarca registrele n felul urmtor) CR0066, 'CR LL , D,R17 *CR07. "uma dintre C i 'C se va trimite n memorie la adresa format din suma ntre *C i D, iar diferenta lor la adresa imediat urmtoare. Indicaii: - C trebuie salvat nainte de sumareH -D, nu poate fi adunat direct cu *C i nici nu poate fi folosit la formarea 1. --n memorie, la adresa D")7767 va apare irul) DD.**.KL.KK P -.11. "e vor ncarca registrele n felul urmtor) CR1100, *CR 66==, 'CRBBEE i DCRJJKK. "a se fac permutarea cicular a acestor registre $ C ia valoarea lui *C, *C a lui 'C, 'C a lui DC iar DC a lui C%. "e vor folosi pentru stocarea temporar n memorie a unui registru modul imediat, modul direct i modul indirect. P -.1+. 8olosind instrunciunea de adunare a unui registru cu o constant, se vor ncarc = locaii succesive de memorie ncep(nd de la 17, cu numere cresctoare de un octet, ncep(nd cu 1. 60

P -.1-. celasi program ca la punctul 6.10, dar cu numere pe doi octei ncep(nd cu 1777. P -.10. multipli de B. celasi program ca la punctul 6.10, dar cu numere pe un octet

P -.13. celasi program ca la punctul 6.16, dar cu numere pe doi octei, multipli de 071. P -.1?. "e va completa ultima varianta de program pentru a se transfer coninutul zonei de memorie de la 17 la 1B ncep(nd de la adresa 67 .

66

Lucrarea de laborator nr. 0 Procedee de trans$er cu memoria


Deoarece numrul registrelor de uz general este mic, de multe ori este necesar ca anumite rezultate intermediare sau alte variabile s fie stocate n memorie. +entru efectuarea de trensferuri cu memoria sunt utilizabile mai multe soluii. 0.1 Trans$eruri prin adresare la memorie. -n acest caz, adresa efectiv este specificat de program, folosind unul din modurile de adresare prezentate anterior. :etoda va fi folosit atunci c(nd se dorete cunoaterea adresei de memorie respective, ea fiind impus de algoritm. De e!emplu, dac se dorete scrierea n memoria ecran care ncepe la adresa 777h, adresa efectiv unde se va scrie poate fi specificat e!plicit de program. 0.+ Trans$eruri prin stiB +entru salvarea n memorie i readucerea din memorie a unor registre se pot folosi instruciunile complementare +?"@ rs i +2+ rd. #nstruciunea +?"@ rs) :nemonic) PUS@ rs8 1fect) :ai nt(i, registrul "+ este decrementat cu 0. poi, coninutul registrului surs dublu rs este trimis n memorie $n stiv% la adresa specificat de registrul "+ $stac> pointer%. "+ "+-0. U"+V rs, U"+N1V rs@ P(P rd8 1fect) :ai nt(i, coninutul registrului destinaie dublu rd este incrcat din memorie $din stiv% de la adresa specificat acum de registrul "+ $stac> pointer%. poi, registrul "+ este incrementat cu 0. rd, U"+V rd@ U"+N1V 6=

"+ "+N0. ,ucrul cu stiva prin instruciunile +?"@ i +2+ este comod deoarece nu necesit calculul sau specificarea adresei de memorie. <rebuie s se in cont ns de ordinea n care au fost salvate registrele n stiv, astfel ca dac dorim refacerea lor, ncrcarea trebuie facut n ordine invers. Exemplul .1: . . . <GS+ () <GS+ 5) . . . <&< 5) <&< () . . . ?neori poate fi alterat n mod voit ordinea invers, pentru a se folosi alt registru destinaie dec(t cel care a fost iniial surs) Exemplul .2: . . . <GS+ () ,Salveaz () la 6S<7.(cum S<BS<ini4ialH1 . ,(lte instruc4iuni . ,"e "arcursul carora S<BS<ini4ialH 1 . <&< 5) ,(cum S<BS<ini4ial. Iea8uce .n 5) 8e la ,6S<ini4ial7, ceea ce a fost .nainte .n ,() . . 6B

,(cum S<BS<ini4ialH1. ,Salveaz () la 6S<ini4ial H17. ,Salveaz 5) la 6S<ini4ialH>7 ,(lte instruc4iuni ,"e "arcursul carora S<BS<ini4ialH > ,Iea8uce 5) 8e la6S<ini4ialH>7. ,(cum S<BS<ini4ialH1. ,Iea8uce () 8e la 6S<ini4ialH17. ,(cum S<BS<ini4ial.

. odul de lucru P 0.1. "e vor ncarca registrele n felul urmtor) CR1100, *CR 66==, 'CRBBEE i DCRJJKK. "a se fac permutarea cicular a acestor registre $ C ia valoarea lui *C, *C a lui 'C, 'C a lui DC iar DC a lui C%. "e vor folosi numai instruciuni +?"@ i +2+ $se va observ evoluia stivei i a "+ n partea din dreapta mijoc a <D% . Indicaie: "e va folosi un registru suplimentar pentru a memora temporar coninutul unuia dintre registrele specificate. 0.- Trans$erul prin ini4ializareaOrezerBarea de loca4ii de catre asamblor -n cazul n care nu este necesar o adres anume de memorie, variabila put(nd fi stocat acolo unde e!ist loc liber, nu mai este necesar specificarea e!plicit a adresi efective. "e va folosi o directiv de asamblare de tip D* pentru rezervarea unei locaii de 1 octet sau D4 pentru rezervarea unei locaii de 0 octei $vezi ane!a 1 Directive de asamblare%. De regul, se va defini mai nt(i un segment de date, cu directiva) .D < i aici se pot plasa directive de tip D* sau D4. Exemplul .3: .Ia8ix !D .%o8el small .Stack !00/ .D(T( variabila! D5 variabila1 D5 variabila* D$ sir! D5 .2o8e start: mo' a(,Pdat mo' ds,a( mov al,variabila1 a88 al, ==/ 6E !ncarc adresa se"mentulu# de date &n $% ,-ncarc .n (3 constanta ,*K/ ,(8una cu ==/

J *K J !0 DG<L!(M

mov varibila!,al mov a/,variabila1 mov variabila*,ax term: #m" tem" en8 start

,De"une octetul 8in (3 .n ,memorie la a8resa ,variabila! ,(8uce 9i .n (+ constanta ,*K/ ,De"une cuvNntul 8in () ,.n memorie la a8resa ,variabila*

9eferirea n program a locaiei se face prin numele asignat n st(nga directivei. "e observ c dac se dorete iniializarea locaiei, se va specific constanta care trebuie s fie iniial acolo, iar dac nu, se va folosi simbolul QYQ. "e pot iniializa mai multe locaii cu directiva D* sau D4, valorile respective fiind separate prin virgule. Exemplul . : numere! D$ caractere D5 const! D5 1*(>/,052=D/,OD/ ,Declar > numere ,8e 1 octe4i PKP,P1P,PQP ,Declar * ,caractere 8e un octet 1!,0(1/,P3P ,Declar * valori ,8iverse

De asemenea, se pot iniializa sau rezerva un numr de n locaii cu formularea n D?+$const% sau respectiv n D?+$Y% ca n e!emplul de mai sus pentru constanta Z#9. (bserBa4ie8 'um s-a aratat i n lucrarea precedenta, instruciunile care urmeaz imediat dup directiva .code $cele cu caractere bold in e!emplul =.6%, sunt necesare ntotdeauna atunci c(nd se declar un segment de date. samblorul i lin>editorul plaseaz acest segment acolo unde au memorie libera i adresa acestui segment trebuie incrcat e!plicit n registrul de segment de date, D". Dup rularea instruciunii :23 D", C programul <urbo Debugger, dac are implicit afiata o fereastra Dump, va afia automat zona respectiv cu registrul de segment 1", aceasta zona nefiind cea de date. +entru a afia chiar segmentul de date, trebuie dat o noua comanda Dump din submeniul 3ie5 dup rularea acestei instruciuni atunci c(nd fereastra '+? este activata $dac nu este, se da un clic> pe aceasta fereastra%. -n noua fereastra dump se vor observ datele declarate.

6J

odul de lucru P 0.+. "e va rula programul din e!emplul precedent i se va observa evoluia registrelor i a zonei de memorie de date. P 0.-. "e vor declara n segmentul de date irul de cuvintele 1100, 66== i BBEE i se vor transfera n alte trei locaii rezervate $n locaii consecutive variabilelor declarate iniial%. 'bservaii: "e vor folosi directive D4, deci adresa locaiei 66== este sursN0, etc. +entru locaiile de destinaie se poate folosi o directiva de tipul) 8est D$ * DG<LJM P 0.0. "e va declara n segmentul de date un ir de 17 numere cresctoare de un octet, ncep(nd cu 1, i se va inversa coninutul primei locaii cu ultima i a celei de a doua cu penultima. 0.0 Instruc4iunea de translatare a unei adrese' HLAT Dac n memorie este definit un ir sau o tabel a crei adres este specificat de *C , se poate face ncrcarea n , a valorii coninute n locaia de memorie U*CN ,V, adic a locaiei cu inde!ul dat chiar de , n acea tabel. tenie) #nde!area incepe de la 7. 8ormatul instruciunii este) C, < ciune) , U*CN ,V Exemplul .!: . . . mov bx, !100/ mov al,= xlat H -n , va apare coninutul locaiei de memorie H107Bh adic al locaiei cu numrul B din tabel, < *1, . . .

6K

odul de lucru P 0.3. "e va scrie un program care s aduc n D, coninutul locaiei cu inde!ul B dintr-o tabel care ncepe la adresa 17 din segmentul de date i n D@ coninutul locaiei cu inde!ul K din acea tabel. "e va folosi instruciunea C, <. 0.3 Instruc4iuni de trans$er pentru registrul de $laguri 3erificareaImodificarea individual sau n bloc a flagurilor se poate face prin transferul ntre registrul @ i registrul de flaguri folosind urmtoarele instruciuni) LA@* ciune) -ncarc flagurile din registrul de flaguri n @. @JR"8 $flagul de semn, 1 dac este minus, 7 dac este plus%H @ERM8 $flagul de zero, 1 dac este 7, 7 dac nu este 7%H @BR7H @=R 8 $flagul de transport au!iliar de la cei = bii inferiori ai unui rezultat%H @6R7 H @0R+8 $flagul de paritate, 1 dac este par, 7 dac este impar%H @1R#8 $flagul de ntreruperi, 1 dac dac ntreruperile sunt activate, 7 dac nu%H @7R'8 $flagul de transport 1 dac e!ist transport de la rezultat%H SA@* ciune) "alveaz flagurile @ n registrul de flaguri. "8R @J $flagul de semn, 1 dac este minus, 7 dac este plus%H M8R @E $flagul de zero, 1 dac este rezultatu 7, 7 dac nu este 7%H 8R @= $flagul de transport au!iliar de la cei = bii inferiori ai unui rezultat%H +8R @0 $flagul de paritate, 1 dac este par, 7 dac este impar%H #8R @1 $flagul de ntreruperi, 1 dac dac ntreruperile sunt activate, 7 dac nu%H '8R @7 $flagul de transport 1 dac e!ist transport de la rezultat%H *iii @B i @6 trebuie s fie 7. 0.? Nncrcarea unei adrese logice din memorie Dac n memorie la adresa nn se afl un pointer $ca o adres logic de 60 de bii%, ea poate fi adus ntr-o pereche format dintr-un registru de segment i un registru de 1E bii, folosind instruciunile LISOLSSOL"SOL5SOL*S. 6L

"inta!a) L"S r1?'2S8nn LSS r1?'2S8nn etc. ciune) L"S r1E,nn) 91E,U9")nnV, 91E@U9")nnN1V, D",U9")nnN0V, D"@U9")nnN6V LSS r1E,nn) 91E,U9")nnV, 91E@U9")nnN1V, "",U9")nnN0V, ""@ U9")nnN6V L5S r1E,nn) 91E,U9")nnV, 91E@U9")nnN1V, 1",U9")nnN0V, D1@U9")nnN6V L*S r1E,nn) 91E,U9")nnV, 91E@U9")nnN1V, 8",U9")nnN0V, 8"@U9")nnN6V LIS r1E,nn) 91E,U9")nnV, 91E@U9")nnN1V, S",U9")nnN0V, S"@U9")nnN6V unde r1E este un registru de 1E bii de uz general, 9" este un registru de segment $D","",1",8" sau S"% iar nn este un numr de 1E bii. 'bservaii: #nstruciunile ,"", ,S", ,8" nu apar la procesoare anterioare lui K76KE $nici nu e!istau registrele de segment 8" i S"%, de aceea, n cazul folosirii lor, n partea iniial a programului trebuie introdus directiva .6KE. 'u specificarea directivei .6KE, se poate folosi n al doilea operand i un numr nnnn $de 60 de bii%.

odul de lucru P 0.?. " se scrie un program care s aduc n perechea 1") C coninutul a patru locaii de memorie a caror adres de nceput este dat de D"N17h. "e va folosi instruciunea ,1". 0.J Nncrcarea unei adrese e$ectiBe tunci c(nd trebuie specificat o adres care a fost calculat de asamblor i nu este cunoscut numeric, se poate folosi instruciunea L5A $,oad 1ffective dress%) "inta!a) L5A r1?' m1? ciune) r1E m1E Exemplul .": .ra8ix !D .mo8el small .stack !00/ .D(T( =7

sir! 8b !*,!>,!=,!,1,* sir1 8b !D,!Q,!@,!O .co8e start: mov ax,R8at ,(8resa segmentului 8e 8ate mov 8s,ax ,se .ncarc .n DS lea 8i,sir1 ,-n DC se va afl offsetHul ,9irului notat Esir1EL.n acest caz 0DM, ,.n memoria 8e 8ate mov al,68i;17 ,Transfer 8in a treia loca)#e ,a acestui 9ir .n (3 'bservaii: +entru transferurile care implic segmentul de date vor fi folosite ca registre destinaie la instruciunea ,1 numai registrele *C, "# i D# i nu va fi folosit *+. #nstruciunea L5A rd' adresa:e$ectiB poate fi inlocuit n majoritatea cazurilor cu instruciunea (E rd'(**S5T adresa:e$ectiB, ls(nd astfel asamblorul s calculeze i s ncarce valoarea corect a adresei efective n registrul dorit. "unt situaii ns c(nd instruciunea ,1 este mai eficient $de e!emplu la lucrul cu directive de grupare%.

P 0.J. " se scrie un program care s inverseze al treilea element al primului ir declarat ca n e!emplul =.E cu elementul al patrulea al celui de-al doilea ir. "e va folosi instruciunea ,1 .

=1

Lucrarea de laborator nr. 3 (pera4ii aritmetice


1!ist urmtoarele tipuri de operaii efectuate de ,?) aritmeticeH logiceH deplasri i rotaiiH

<oate acestea afecteaz corespunztor unul sau mai muli din urmtorii indicatori de condiii) <* $'arrA 8lag% - indicator de transport -reflect transportul n e!terior al bitului cel mai semnificativ al rezultatului operaiilor aritmetice. cest indicator poate fi folosit n cazul adunrii sau scderii numerelor pe mai muli octei, semnificind n primul caz transport la adunare i n al doilea caz mprumut la scdere. #ndicatorul '8 nu este modificat de instruciuni de incrementare i decrementare. P* $+aritA 8lag% -indicator de paritate - este poziionat pe 1 dac rezultatul are un numr par de bii 1. A* $ u!iliarA 'arrA 8lag% - indicator de transport au!iliar - este poziionat n 1 dac a fost transport de la nivelul inferior la nivelul superior al octetului rezultatului $de la bitul 6 la bitul =%. cest indicator se folosete n programele de calcule n aritmetic zecimal. Q* $Mero 8lag% - indicatorul de zero - este poziionat n 1 dac rezultatul operaiei a fost zero. S* $"ign% indicatorul de semn - este poziionat n 1 dac cel mai semnificativ bit al rezultatului $:"*% este 1, adic dac n reprezentarea numerelor n complement fa de 0 rezultatul este negativ. (* $2verflo5 8lag% - #ndicator de depire aritmetic $a gamei de valori posibil de reprezentat% - este poziionat n 1 dac dimensiunea rezultatului depete capacitatea locaiei de destinaie i a fost pierdut un bit $la valorile cu semn se altereaz semnul%. 3.1 2eprezentarea n complement $a4 de + <oate structurile algebrice presupun e!istena unui element simetric fa de operaia de adunare, definit prin relatia) numrNsimetric R7 =0

-n notaia zecimala obisnuita, avem de e!emplu) 1 are simetric pe &1 deoarece suma lor da 7 0 are simetric pe &0 deoarece suma lor da 7 etc.

-n binar se poate face o notaie fr a specific separat semnul, dac se consider cuvinte de o lungime fi!a, ,. stfel, de e!emplu dac ,R=, putem spune ca 1 are ca simetric numrul binar 1111R8, deoarece 1N8R 7771N1111R7777 plus un transport $care ns nu mai ncape n numrul de ,R= bii%. "imilar) 7717 are ca simetric 1117 deoarece suma lor d 7777. Deci 1 R -0 7711 are ca simetric 1171 deoarece suma lor d 7777. Deci D R -6 7177 are ca simetric 1177 deoarece suma lor d 7777. Deci ' R -= 7171 are ca simetric 1711 deoarece suma lor d 7777. Deci * R -B etc. Dac ,RK, putem spune ca 1 are ca simetric numrul binar 1111.1111R88, deoarece 1N88R 7777.7771N1111.1111R7777.7777 plus un transport $care ns nu mai incape n numrul de ,RK bii%. "imilar) 7777.7717 are ca simetric 1111.1117 deoarece suma lor d 7777.7777. Deci 81 R -0 7777.7711 are ca simetric 1111.1171 deoarece suma lor d 7777.7777. Deci 8D R -6 7777.7177 are ca simetric 1111.1177 deoarece suma lor d 7777.7777. Deci 8' R -= 7777.7171 are ca simetric 1111.1711 deoarece suma lor d 7777.7777. Deci 8* R -B etc. ceast reprezentare se numete reprezentarea n complement fa de 0, deoarece numrul simetric este egal cu cel iniial sczut din 0,. "e poate arata c complementul $a4 de + se ob4ine prin negarea bi4ilor numrului !i adunarea unui 1. -n limbaj de asamblare, complementul fa de 0 al unui numr $negativul acelui numr% se obine cu instruciunea ;1S $vezi mai jos descrierea instruciunii%.

=6

3.+ Prezentarea instruc4iunilor aritmetice A"" dst,src - dunare ciune) dst R dst N srcH 2peranzi) dst) rK, r1E, r60, mK, m1E, m60 src) rK, r1E, r60, mK, m1E, m60, n, nn, nnnn A"< dst,src - dunare cu carrA $transport% ciune) dst R dst N src N'8H 2peranzi) dst) rK, r1E, r60, mK, m1E, m60 src) rK, r1E, r60, mK, m1E, m60, n, nn, nnnn I=< dst ciune) 2perand) -#ncrementare dst R dst N 1 rK, r1E, r60, mK, m1E, m60

SUA dst,src - "cdere ciune) dst R dst - srcH 2peranzi) dst) rK, r1E, r60, mK, m1E, m60 src) rK, r1E, r60, mK, m1E, m60, n, nn, nnnn Exemplul !.1: mov al,**/,Desc zutul mov bl,>>/,este mai mic 8ecat scztorul sub al,bl ,rezultatul .n (3 va fi negativ,0?K/ ,9i va a"are 9i 2(IIS SAA dst,src - "cdere cu borro5 $mprumut% ciune) dst R dst - src - '8H 2peranzi) dst) rK, r1E, r60, mK, m1E, m60 src) rK, r1E, r60, mK, m1E, m60, n, nn, nnnn Exemplul !.2: mov mov sub sbb al,** bl,>> al,bl ,3a aceast sc8ere a"are .m"rumut cl,al ,(cesta e luat .n consi8era4ie aici -Decrementare ==

"5< dst

ciune) dst R dst N 1 2perand) rK, r1E, r60, mK, m1E, m60 =5I dst -;egare aritmetica ciune) dst R - dst $ se obine complementul fa de doi% 2perand) rK, r1E, r60, mK, m1E, m60 Descriere) #nstruciunea ;1S genereaza complementul fa de 0 al opernadului adic numrul respectiv cu semn schimbat. '8 este setat automat, cu e!cepia cazului c(nd 2perandul este 7.

Exemplul !.3: mov al,0?K/,Cn com"lement fata 8e 1 este negativ neg al ,Se sc/imba semnul si rezulta !! =(T dst -'omplementare fa de 1. ciune) dst [ 788h - dst H pentru 2perand de K bii dst [ 78888h - dst H pentru 2perand de 1E bii dst [ 788888888h - dst H pentru 2perand de 60 bii 2perand) rK, r1E, r60, mK, m1E, m60 Descriere) #nstruciunea ;2< inverseaz operandulH orice 1 devine 7 i viceversa. ;u sunt afectai indicatorii de condiii. < P dst,src -'omparaie aritmetic $prin scdere% ciune) dst-srcHfr generare rezultat - modifica doar indicatorii de condiii. 2peranzi) dst) rK, r1E, r60, mK, m1E, m60 src) rK, r1E, r60, mK, m1E, m60, n, nn, nnnn UL src - -nmulirea fr semn lui ,, C sau 1 C cu un numr. ciunea depinde de marimea 2perandului src, lu(nd urmtoarele forme) - src de K bii) C [ , T srcKH src) rK,mK Dac @ R 7 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8 -src de 1E bii) DC) C [ C T src1EH src) r1E,m1E Dac DC R 7 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8 =B

- src de 60 bii) 1DC) 1 C [ 1 C T src60H src) r60,m60 Dac 1DC R 7 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8 Exemplul !. : mul bl mul cx , Se inmulteste (3 cu 53 L@ bi4iM iar ,rezultatul este in () , Se inmulteste () cu 2) iar rezultatul ,este .n D) Locte4ii su"erioriM 9i () ,Loc4etii inferioriM

I UL $dst,%src - -nmulirea cu semn a lui ,, C, 1 C sau a altui registru cu un numr. ciunea depinde de 2perandul destinaie i de mrimea 2perandului src. -n cazul n care destinatia este acumulatorul ,, C sau 1 C se obine rezultatul complet, chiar dac apare flagul 2verflo5, deoarece rezultatul va fi memorat cu precizie dubl fa de a operanzilor) -src de K bii) C [ , T srcKH src) rK,mK Dac @ R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8 - src de 1E bii) DC) C [ C T src1EH src) r1E,m1E Dac DC R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8 - src de 60 bii) 1DC) 1 C [ 1 C T src60H src) r60,m60 Dac 1DC R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8 "pre deosebire de nmulirea numerelor fr semn $cu instruciunea :?,%, n cazul instruciunii #:?, este posibil ca denmulitul s fie i alt registru n afar de acumulator, iar sursa poate s fie o valoare numeric imediat. -n acest caz ns, dac rezultatul are mai muli bii dec(t registrul care conine denmulitul, se pierd biii care depaesc lrgimea acestuia. ciunea este urmtoarea) - #:?, dst,src dst [ dst T srcH $dstR r1EH srcRr1EIm1E IimmKIimm1E% Dac DC R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8 =E

Dac src este de tip immK, acesta se e!tinde cu semn p(n la lungimea dst. - #:?, dst,src dst [ dst T srcH $dstR r60H srcRr60Im60 IimmKIimm60% Dac DC R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8 Dac src este de tip immK, acesta se e!tinde cu semn p(n la lungimea dst "IE src - -mprirea fr semn a acumulatorului cu un registru sau loca4ie de memorie. ciune) - dac src este de K bii) , [ CIsrcKH $c(tul mpririi% , [ C \ srcK $restul mpririi% src) rK,mK. - dac src este de 1E bii) C [ DC ) CIsrclEH $c(tul mpririi% DC [ DC ) C \ srclE $restul mpririi% src) r1E,m1E. - dac src este de 60 bii) 1 C [ 1DC ) 1 CIsrclEH $c(tul mpririi% 1DC [ 1DC ) 1 C \ srclE $restul mpririi% src) r60,m60. 2bservaii) Dac rezultatul $catul% nu incape n registrul destinaie ,, C respectiv 1 C, sau impartitorul este 7, se genereaza -ntrerupere 7 $D1 - Divide 1rror% i se sare automat din program. De aceea trebuie facuta o evaluare prealabila a domeniului de valori ale rezultatului i trebuie folosit un registru destinaie corespunztor. Dac c(tul este subunitar, el este ajustat la 7. #ndicatorii de condiii sunt nedefinii. Exemplul !.!: mov a!, 787h mov cl,17 div clH "e imparte C la ',$Kbii%. '(tul este in , iar restul in @ Exemplul !.": mov ax, 0K0/ mov cl,=

=J

8iv cl

, Se im"arte () la 23 L@bi4iM. 2Ntul este mai ,mare 8ecat 8ecNt KK si a"are eroare ,Lintreru"erea 0M.

'orect ar fi fost) mov ax,0K0/ mov cl,= mov 8x,0 , Se "regateste ca 8eim"artitul sa fie in ,"erec/ea D):() mov c/,0 , Se "regateste ca im"artitorul sa fie in 2) 8iv cx , Cm"artire "e !D bi4i, 8eci cNtul va fi in ,() iar restul in D) I"IE src - -mprirea cu semn a acumulatorului cu un registru sau loca4ie de memorie. ciune) - dac src este de K bii) , [ CIsrcKH $c(tul mpririi, cu semn% , [ C \ srcK $restul mpririi,cu semn% src) rK,mK. - dac src este de 1E bii) C [ DC ) CIsrclEH $c(tul mpririi,cu semn% DC [ DC ) C \ srclE $restul mpririi,cu semn% src) r1E,m1E. - dac src este de 60 bii) 1 C [ 1DC ) 1 CIsrclEH $c(tul mpririi,cu semn% 1DC [ 1DC ) 1 C \ srclE $restul mpririi,cu semn% src) r60,m60. 2bservaie) Dac rezultatul $c(tul% nu ncape n registrul destinaie ,, C respectiv 1 C, sau mpritorul este 7, se genereaz -ntreruperea 7 $D1 - Divide 1rror% i se sare automat din program. De aceea trebuie facut o evaluare prealabil a domeniului de valori ale rezultatului i trebuie folosit un registru destinaie corespunztor. Dac c(tul este subunitar, el este ajustat la 7. "emnul restului este acelai cu al mpritorului. #ndicatorii de condiii sunt nedefinii. <A. semn. ciune) - 'onversie de la *Ate $K bii% la 4ord $1E bii% cu pstrare , J R 7 RF @ R7H , J R 1 RF @ R788H =K

<." semn. ciune)

- 'onversie de la 4ord $1E bii% la D5ord $60 bii% cu pstrare C 1B R 7 RF DC R7H , 1B R 1 RF DC R78888H

odul de lucru P 3.1 " se scrie un program care s ncarce constantele 11,17,66 i == he!a n ,, *C, ',, respectiv D,, constanta LLh n memorie la adresa indicat de *C, apoi s adune coninutul registrelor ,,', i D, ,s scad rezultatul din memorie de la adresa coninut n *C i s memoreze rezultatul final la adresa de memorie urmtoare. Indicaii) '(nd se transfer un numr de un octet cu memoria, el trebuie precedat de prefi!ul .bAte ptr/. P 3.+ celai program ca la punctul 1, dar coninutul registrelor va fi 1100, 17, 66==, BBEE iar n memorie U*CVR **. Indicaii) '(nd se transfer un numr de doi octei cu memoria, i octetul cel mai semnificativ este 77 sau lipsete, el trebuie precedat de prefi!ul .5ord ptr/. Dac octetul cel mai semnificativ este diferit de 77, prefi!ul respectiv poate fi omis, el subineleg(ndu-se. 'onstantele care ncep cu o liter trebuie precedate de cifra 7. Dac se i termin cu o liter trebuie urmate de sufi!ul @. -n final, n memorie ncep(nd de la adresa 17 trebuie s fie octeii) 18.17.18.17. P 3.- " se scrie un program care s ncarce constantele L, 1L i 0L n ,, *, respectiv ', " se incrementeze coninuturile acestor registre i s se nmuleasc apoi ntre ele. "e va verifica rezultatul cu aplicaia 'alculator. Indicaii) tunci c(nd de(nmulitul este $sau poate fi% de doi octei, nmulirea trebuie facuta cu un nmulitor care ocup un registru de 1E bii, chiar dac nmulitorul este de numai K bii. -n final, n C trebuie s fie rezultatul 0 K. P 3.0 "e vor ncarca registrele n felul urmtor) *CR1100, DCR00 i 'CRBBEE. "a se nmuleasc aceste registre ntre ele iar rezultatul s se trimit n memorie la adresa 07h. Indicaii) =L

lgoritmul poate fi urmtorul) 11.00TBB.EET00 R 7B.*J.1D.K'T00 R 1D.K'T00N17777T7B.*JT00 R '0B1.1'LK 'oninutul unora dintre registre va trebui salvat n memorie. P 3.3 "a se ncarce n 'C , *, i D, numerele EEBB, == respectiv 00 s se mparta 'C la *, , c(tul fiind apoi nmulit cu D, i adunat cu restul. Indicaii) 'oninutul unora dintre registre va trebui salvat n memorie. #mprirea va avea un rezultat mai mare de K bii, deci trebuie ca de(mpritul s fie format din DC i C. +entru aceasta, DC va fi fcut 7 iar mpritorul va fi *C $cu *@R7%. dunarea final trebuie fcut pe = octei, deci dup ce se va face o prima adunare pe 1E bii pentru octeii mai puin semnificativi, se va anula un registru i se va aduna cu ' 99W la cei 1E bii mai semnificativi.

B7

Lucrarea de laborator nr. ? (pera4ii logice' deplasri !i rota4ii


?.1. (pera4ii logice 2peranzii n modul real sunt aceiai ca la operaiile aritmetice obinuite) dst)rK,r1E,r60,mK,m1E,m60H src)rK,r1E,r60,mK,m1E,m60,n,nn,nnnn. =(T dst - 'omplementare fa de 1 a fiecrui bit din 2perandul destinaie, dstn . ciune) dstn 1-dstn . 2peranzi) dst. Descriere) #nstruciunea ;2< inverseaz biii 2peranduluiH orice 1 devine 7 i viceversa. "-a notat dstn bitul n al operandului destinaie. A=" dst,src -"# logic pe bit. ciune) dstn $srcn%"# $dstn%. 2peranzi) dst,src. Descriere) ?n bit al rezultatului instruciunii ;D este un 1 dac ambii bii corespunztori ai operanzilor sunt 1H altminteri, bitul devine 7. "-a notat cu src n i dstn bitul n al operandului surs, respectiv destinaie. 9ezultatul nlocuiete primul operand. T5ST dst,src -<estare $"# fr generare de rezultat%. ciune) $srcn%"# $dstn%. 2peranzi) dst,src. Descriere) #nstruciunea <1"< calculeaza ."# logic pe bit/ ntre cei doi operanzi. ?n bit al rezultatului este 1 dac ambii bii corespunztori ai operanzilor sunt 1H altminteri, bitul este 7. 9ezultatul operaiei este sters i doar flagurile sunt modificate. "-a notat cu srcn i dstn bitul n al operandului surs, respectiv destinaie. (2 dst,src -" ? logic pe bit. ciune) dstn $srcn%" ? $dstn%. 2peranzi) dst,src. B1

Descriere) #nstruciunea 29 calculeaza " ? pe bit ntre cei doi operanzi i rezultatul este plasat n primul operand. ?n bit al rezultatului este 7 dac ambii bii corespunztori ai operanzilor sunt 7H altminteri, bitul este 1. 9ezultatul nlocuiete primul operand. H(2 dst src -" ? 1C',?"#3 logic pe bit. ciune) dstn $srcn% C29 $dstn%. 2peranzi) dst,src. Descriere) #nstruciunea C29 calculeaza " ? 1C',?"#3 pe bit ntre cei doi operanzi. ?n bit al rezultatului este 1 dac biii corespunztori ai operanzilor sunt diferiiH bitul rezultatului este 7 dac biii corespunztori sunt identici. 9ezultatul nlocuiete primul operand. ?.+. "eplasri !i rota4ii S@L dst,UnrV -Deplasare logic spre st(nga cu nr poziii $numere fr semn%. ciune) ' :"* ,"* 7 2peranzi) -dstH -UnrV) 1, ',,immK. Descriere) 2perandul src este nmulit cu 0 de UnrV ori. Exempe: "@, al,1 -deplaseaz spre st(nga , cu 1 bitH "@, al,cl -deplaseaza spre st(nga , cu un numr de bii egal cu coninutul lui ',. S@2 dst,UnrV -Deplasare logic spre dreapta cu nr poziii $numere fr semn%. ciune) :"* 7 2peranzi) -dstH -UnrV) 1, ',,immK. B0 ,"* '

Descriere) 2perandul src este impartit cu 0 de UnrV ori.

SAL semn%.

src,UnrV -Deplasare aritmetic spre st(nga cu nr poziii $numere cu

ciune) ' 2peranzi) :"* ,"* 7 -dstH -UnrV) 1, ',,immK. Descriere) 2perandul src cu semn este nmulit cu 0 de UnrV ori. SA2 semn% ciune) :"* ,"* ' src,UnrV -Deplasare aritmetica spre dreapta cu nr pozitii $numere cu

2peranzi)

-dst. -UnrV) 1, ',,immK. Descriere) 2perandul src cu semn este mprit cu 0 de UnrV ori. 2(L src,UnrV-9otaie prin 'arrA spre st(nga cu UnrV poziii ciune) ' :"* ,"*

2peranzi)

-dstH -UnrV) 1, ',,immK.

2(2 src,UnrV-9otatie prin carrA spre dreapta cu UnrV poziii ciune) :"* ,"* '

B6

2peranzi)

-dstH -UnrV) 1, ',,immK.

2<L src,UnrV-9otatie cu carrA spre st(nga cu UnrV poziii ciune) ' :"* ,"*

2peranzi)

-dstH -UnrV) 1, ',,immK.

2<2 src,UnrV-9otatie cu carrA spre dreapta cu UnrV pozitii ciune) :"* ,"* '

2peranzi)

-dstH -UnrV) 1, ',,immK.

Descriere) 8iecare instruciune de rotaie deplaseaz biii operandului de registru sau memorie dat. #nstruciunile de rotaie spre st(nga deplaseaz toti biii ctre poziia cea mai semnificativ $catre :"*% ,e!cept(nd bitul din poziia cea mai semnificativ, care este mutat n poziia cea mai puin semnificativa $,"*%. #nstruciunile de rotaie spre dreapta acioneaz invers) biti sunt deplasai ctre poziia cea mai puin semnificativ iar bitul din poziia cea mai puin semnificativ ajunge n poziia cea mai semnificativ. +entru instruciunile 9', i 9'9, flagul '8 este o parte a cantitii rotite. #nstruciunea 9', deplaseaz flagul '8 n bitul cel mai puin semnificativ i cel mai semnificativ bit n flagul '8H instruciunea 9'9 deplaseaza flagul '8 n bitul cel mai semnificativ i bitul cel mai puin semnificativ n flagul '8. ,a instruciunile 92, i 929, valoarea flagului '8 nu este parte a rezultatului, dar flagul '8 recepioneaz o copie a bitului care a fost deplasat de la un capt la altul. -n modul real sau virtual K7KE, rotaia este repetata de un numr de ori indicat de al doilea operand, care este unu sau coninutul registrului ',.De la procesoare #6KE n sus, operandul al doilea poate fi i o constant imediat.

B=

8lagul 28 este definit numai pentru forme cu o singura rotaie ale instruciunilor $al doilea operand este un 1%. 1ste nedefinit n toate celelalte cazuri. +entru deplasriIrotiri spre st(nga, bitul '8 de dup deplasare este Rsau-e%clusiBatS cu bitul rezultat de cel mai nalt ordin. +entru deplasriIrotiri spre dreapta, cei doi bii cu cel mai nalt ordin ai rezultatului sunt Rsau-e%clusiBa4iS spre a rezulta flagul 28. (bserBa4ie8 Dei microprocesoarele sub #-6KE admit deplasarea numai cu un bit sau cu numrul contiinut de ',, unele asambloare admit i un operand numeric mai mare de 1 ca al doilea operand. stfel, n < ": sunt admise forme ca) S+3 5<,@ S+3 D),D S+I (3,1 . . . Dup asamblare i lin>editare, n programul obiect apar ns n mod corect K instruciuni S+3 5<,! sau E instruciuni S+3 D),! s.a.m.d. 'u directiva .->? sunt admise direct i deplasri cu imm>.

?.-. (pera4ii aritmetice A<" &op4ional' Bezi Ane%a 1) AAA AAS "AA "AS AA AA" - justare , dup adunare $*'D despachetat%. - justare , dup scdere $*'D despachetat%. - justare , dup adunare $*'D inpachetat%. - justare , dup scdere $*'D impachetat%. - justare , dup nmulire. - justare , nainte de mprire.

=.:odul de lucru
#niial, n partea de nceput a programelor urmtoare, registrele i memoria vor fi ncrcate astfel) CR1100h, *!R17h, 'CR66==h, DCRBBEE, U*CVRLL h, *+R JJh. BB

P ?.1 " se scrie un program care s transforme n 7 biii lui CR71111h cu e!cepia biilor 7..6. ceast operaie va fi denumit n continuare .:ascare/ a biilor =..1B. 9ezultatul mascrii va fi memorat n DC iar C va trebui s rm(n la valoarea iniial. P ?.+ " se scrie un program care s transforme n 1 biii lui CR71111h cu e!cepia biior =...J. 9ezultatul acestei mascari va fi memorat n DC iar C va trebui s ram(n la valoarea iniial. P ?.- " se scrie un program care s copieze biii 0 i 6 ai lui *,R7 Eh n aceleasi pozitii din ',R18h, lasind restul biilor lui ', neschimbati. P ?.0 " se scrie un program care s ncarce n = locaii consecutive din memorie, ncep(nd de la adresa 17h , cei = bii inferiori ai lui D,R7B $bitul 7 n prima locaie, bitul 1 n a doua locaie, .a.m.d.%. P ?.3 " se scrie un program care s inverseze semioctetul superior al lui *,R10h cu cel inferior al lui '@RBEh, pastr(nd ordinea biilor. P ?.? " se scrie un program care s anuleze n ',R0Bh biii care sunt identici cu cei omologi din D@RBBh. P ?.J " se scrie un program care s seteze n ',R0Bh biii care sunt identici cu cei omologi din D@RBBh. P ?.> " se scrie un program care s nmuleasc cu 607 coninutul registrului *+, folosind deplasri spre st(nga. ceast operaie este necesar pentru calculul adresei unui punct din memoria ecran n modul grafic 607 ! 077 i va fi folosit frecvent n programele de afiare grafic. 9ezultatul pentru *+RJJh va trebui s fie L='7h. Indicaii: "e va ine seama c 607R0BENE= adic 607 R 0 K N 0E . +rin urmare, se va face o copie a lui *+ n alt registru apoi se vor deplasa spre st(nga cele dou registre cu K respectiv cu E poziii i se vor aduna. P ?.K "e va scrie un program care s faca nmulirea cu E=7 a coninutului registrului *+ folosind deplasri spre st(nga. ceasta operaie este necesar pentru calculul adresei unui punct din memoria ecran n modul grafic E=7 ! =K7 i se folosete frecvent n programele de afiare grafica. 9ezultatul pentru *+R66h va trebui s fie J8K7h.

BE

Lucrarea de laborator nr. J Instruc4iuni de salt


J.1 Instruc4iuni de salt necondi4ionat :nemonic) T P adr - salt necondiionat ciune ) +'[ adr "alturile de acest tip pot fi absolute sau relative, cu adresa dat direct sau coninut ntr-un registru sau locaie de memorie, n acelasi segment sau intersegment, etc. +entru lista complet a tipurilor de salt necondiionat se poate consulta ne!a 1 de la sf(ritul lucrrii. -ntr-o prim instan se vor folosi numai salturi simple, cu adresa specificat sub forma de etichet, iar asamblorul i lin>editorul vor transpune automat argumentul saltului. -n general numai n :odul +rotejat este nevoie de toate instruciunile prezentate n lista complet. J.+ Instruc4iuni de salt condi4ionat :nemonic) Tcc deplasament, unde cc reprezint condiia testat. ciunea) Dac condiia este adevarata, +'[+'Ndeplasament $se e!ecut saltul la noua adres%. Dac condiia este fals , +'[+'Nn, unde n este numrul de octei ai instruciunii de salt $aceasta este ignorat i se continu cu instruciunea urmtoare%.

"alturile condiionate sunt salturi relative, deci adresa de salt este dat de suma ntre coninutul curent al +' i deplasamentul specificat de instruciune. Deplasamentul admis de unele asambloare este cu numai K bii, astfel ca operandul .adr/ trebuie s difere de adresa curenta cu ma!im NI- 10K octei. +rocesoarele de la #-6KE n sus admit i salturi relative cu depalasament pe 1E sau 60 de bii, dar numai n interiorul aceluia!i segment. Dac se dorete saltul n afara segmentului, se va folosi instruciunea de salt relativ cu condiia invers i dup ea o instruciune de salt necondiionat intersegment.

BJ

-n funcie de indicatorii de condiii testati de instruciunea de salt, e!ist urmtoarele tipuri de salturi condiionate $cu variantele echivalente scrise n paranteze%. TP adr $TP5 adr% & Tump if ParitA - salt condiionat de paritate par. T=P adr $TP( adr% & Tump if =ot ParitA - salt condiionat de paritate impar. T( adr - Tump if (verflo5- salt condiionat de 28 R1 - a fost depire. T=( adr - Tump if =ot (verflo5- salt condiionat de 28 R 7 - nu a fost depire . TS adr & Tump if Sign bit- salt condiionat de "8R1 - rezultatul a fost negativ. T=S adr - Tump if =o Sign bit - salt condiionat de "8 R 7 rezultatul a fost pozitiv. T5 adr $TQ adr% & Tump if 5]ual $Tump if Qero flag% - salt condiionat de M8R1 - egalitate la comparaia anterioara. T=5 adr $T=Q adr% - Tump if =ot 5]ual $Tump if =o Qero flag% - salt condiionat de M8R7 - inegalitate la comparaia anterioar. +entru compararea numerelor cu semn $:"* d semnul) 1 pentru negativ, 7 pentru pozitiv% se folosesc atributele Less i Ireater) TL adr $T=I5 adr% & Tump if Less $Tump if =ot Ireater or 5]ual% - salt condiionat de "8^F28 $"8 !or 28 R 1% - mai mic la comparaia anterioar a unor valori cu semn. TL5 adr $T=I adr% - Tump if Less or 5]ual $Tump if =ot Ireater% salt condiionat de M8R1 sau "8^F28 - mai mic sau egal la comparia anterioar a unor valori cu semn. TI adr $T=L5 adr% & Tump if Ireater $Tump if =ot Less or 5]ual% - salt condiionat de M8R7 i "8R28 - mai mare la comparaia anterioar a unor valori cu semn. TI5 adr $T=L adr% & Tump if Ireater or 5]ual $Tump if =ot Less% - salt condiionat de "8R28 - mai mare sau egal la comparaia anterioar a unor valori cu semn. +entru compararea numerelor $r semn se folosesc atributele Aelo/ i AboBe)

BK

TA adr $T=A5 adr , _' adr% & Tump if Aelo5 $Tump if =ot Above or 5]ual% salt condiionat de '8 R 1 - mai mic la comparaia anterioar a unor valori fr semn sau transport la operaia anterioar. TA5 adr $T=A adr% & Tump if Aelo5 or 5]ual $Tump if =ot Above% - salt condiionat de '8R1 sau M8R1 - mai mic sau egal la comparaia anterioar a unor valori fr semn. TA adr $T=A5 adr % & Tump if Above $ Tump if =ot Aelo5 or 5]ual% - salt condiionat de '8 RM8 R 7 - mai mare la comparaia anterioar a unor valori fr semn. TA5 adr $T=A adr , T=< adr% & Tump if Above or 5]ual $Tump if =ot Aelo5, Tump if =ot <arrA% - salt condiionat de '8R7 - mai mare sau egal la comparaia anterioar a unor valori fr semn sau nu e!ist transport la operaia anterioar. T<HQ & $_ump if 'C is Mero% - salt condiionat de coninutul lui 'C R 7 J.- Instruc4iuni de ciclare L((P' L((Pcc +entru e!ecuia repetat a unui grup de instruciuni $ciclu% se pot folosi, n afara instruciunilor de salt i instruciunile specializate pentru ciclare ,22+ i ,22+cc. cestea folosesc implicit registrul contor 'C, pe care l decrementeaz automat la fiecare e!ecuie i, dac acesta nu a ajuns la 7, e!ecut saltul la adresa specificat. nemonic8 L((P rel>. Ac4iune8 D1' 'CH jump short if 'C ^F 7. "e e!ecut ciclul p(n c(nd contorul 'C ajunge la 7. nemonic8 L((P5 rel> $cicleaz at(ta timp c(t e%ist egalitate%. Ac4iune8 D1' 'CH jump short if count ^F 7 and M8R1. "e e!ecut ciclul p(n c(nd contorul 'C ajunge la 7, sau p(n c(nd apare M8 $la o comparaie sau scdere cu operanzi egali%. nemonic8 L((PQ rel> $cicleaz at(ta timp c(t e%ist egalitate%. Ac4iune8 D1' 'CH jump short if count ^F 7 and M8R1. "e e!ecut ciclul p(n c(nd contorul 'C ajunge la 7, sau p(n c(nd apare M8 $la o comparaie sau scdere cu operanzi egali%. nemonic8 Ac4iune8 L((P=5 rel> $cicleaz at(ta timp c(t nu e%ist egalitate%. D1' 'CH jump short if count ^F 7 and M8R7. BL

"e e!ecut ciclul p(n c(nd contorul 'C ajunge la 7, sau p(n c(nd apare M8 $la o comparaie sau scdere cu operanzi di$eri4i%. nemonic8 L((P=Q rel> $cicleaz at(ta timp c(t nu e%ist egalitate%. Ac4iune8 D1' 'CH jump short if count ^F 7 and M8R7. "e e!ecut ciclul p(n c(nd contorul 'C ajunge la 7, sau p(n c(nd apare M8 $la o comparaie sau scdere cu operanzi di$eriti%. odul de lucru) -n continuare, dac nu se specific altfel, se va folosi pentru adresa efectiv valoarea implicit 7. P J.1 "a se ncarce n primele 6 locaii de memorie constantele BBEEh, 6600h i KKLLh i s se ordoneze n ordine cresctoare coninutul acestor locaii din memorie. "e va testa programul i cu valorile ====h, EEEEh i 0000h, respectiv JJJJh, 6666h, 0000h. P J.+ "a se ncarce o zon de memorie de 07h de octei cu constanta 66h. P J.- "a se ncarce o zona de memorie de 07h de octei cu numere cresctoare de un octet ncep(nd cu B. P J.0 "a se adune coninutul celor 07 de locaii de memorie ncarcate de programul anterior, iar rezultatul, pe 1E bii, s se plaseze n memorie cu octetul cel mai puin semnificativ la adresa efectiv 01h, i cel mai semnificativ la adresa 07h. P J.3 " se ncarce o zona de memorie de 07h de octei cu numere cresctoare din 17h n 17h . P J.? " se ncarce o zona de memorie de 07h de octei cu numere descresctoare din 17h n 17h ncep(nd cu 077h. P J.J " se gaseasc i s se plaseze, la sf(ritul irului, octetul ma!im din 17h locaii de memorie ncep(nd de la adresa 7.

E7

Lucrarea de laborator nr. > Instruc4iuni de lucru cu !iruri


-n multe aplicaii este necesar s se transfere iruri de date dintr-o zona de memorie n alta. Desi acest lucru este posibil folosind instruciuni :23 i adresri adecvate la memorie, s-au prevazut i instruciuni speciale n acest scop, care permit o vitez superioar, fiind recomandate n majoritatea situaiilor de acest gen. +entru aceste instruciuni s-au prevazut dou registre inde!) SI i "I - "ource #nde!, respectiv Destination #nde!. ceste registre conin adresele efective implicate n transfer, i se modifica automat, incrementandu-se sau decrement(ndu-se, cu 1 , cu 0, sau cu =, la fiecare instruciune de acest tip. <ransferul se poate face pe K bii, pe 1E bii , sau pe 60 bii $de la #-6KE n sus - vezi ne!a 1%. "unt prezentate aici doar transferuri pe K i pe 1E bii. Zirul surs are adresa efectiv coninut n registrul inde! surs SI i se afl n segmentul de date $cu adresa de segment n D"%. Zirul destinaie are adresa efectiv coninut n registrul inde! destinaie "I i se afl n e!trasegment $cu adresa de segment n 1"%. "ensul parcurgerii irurilor este dat de flagul D8 - Direction 8lag, fiind cresctor dac D8R7 i descresctor dac D8R1. ,a utilizarea repetat a unor astfel de instruciuni este recomandabil folosirea prefi!ului 25P n loc de utilizarea unei bucle clasice. >.1. Instruc4iunile L("SA' L("S.' ST(SA' ST(S. :nemonic) ciune) :nemonic) ciune) L("SA - -ncarc de la D")"# n ,. ,[U"#V. "#["# N1 dac D8R7, "#["#-1 dac D8R1. L("S. - -ncarc de la D")"# n C. ,[U"#V. @[U"#N1V. "#["# N0 dac D8R7, "#["#-0 dac D8R1. E1

:nemonic) ciune)

ST(SA - -ncarc , la 1")D# . U"#V[ ,. "#["# N1 dac D8R7, "#["#-1 dac D8R1.

:nemonic) ciune)

ST(S. - -ncarc , la 1")D#. U"#V[ ,. U"#N1V[ @. "#["# N0 dac D8R7, "#["#-0 dac D8R1.

+entru instruciunile de transfer ,2D"* i ,2D"4, surs este locaia de memorie cu adresa efectiv dat de registrul inde! surs "# i adresa de segment dat de D". +entru instruciunile de transfer "<2"* i "<2"4, destinatia este locaia de memorie cu adresa efectiv dat de registrul inde! destinaie D# i adresa de segment dat de 1". -n urma efecturii unei astfel de instruciuni, registrul inde! "# respectiv D# se modific n funcie de starea flagului D8 $de direcie%. Dac D8 este 7, registrul inde! va fi incrementat cu 1 la ,2D"* i "<2"* i cu 0 la ,2D"4 i "<2"4. Dac D8 este 1, registrul inde! va fi decrementat cu 1, respectiv cu 0. 9egistrul general implicit este , la transferul de un octet i C la transferul de doi octei. -n e!emplul urmtor se arat utilizarea unor astfel de instruciuni la copierea unui bloc dintr-o zon memorie n alta. Exemplul $.1: .ra8ix !D .mo8el small .stack !00/ 3ungime5loc eAu *0 .D(T( 5locSursa 8b >0 8u"L=DM 5locDest 8b >0 8u"LJM .co8e start: E0

mov ax,seg 5locSursa mov mov mov cl8

mov mov mov bucla: lo8sb stosb loo" bucla term: #m" term en8 start

,Se "utea folosi 9i mov ,ax,R8at 8s,ax ,Segmentul surs .n DS ax,seg 5locDest ,Necesar numai 8ac ,blocurile sunt .n ,segmente 8iferite es,ax ,Segmentul 8estina4ie ?S ,8irec4ia .n sensul ,cre9terii a8reselor 9i, offset 5locSursa ,(? a sursei .n SC 8i, offset 5locDest ,(? a 8estina4iei .n DC cx, 3ungime5loc ,Numrul 8e transferuri .n 2) ,-ncarc .n (3 un octet ,9i .l trimite la 8estina4ie ,Decrementeaz 2) 9i reia ,bucla "Nn cNn8 2) 8evine 0

odul de lucru8 P >.1 "a se iniializeze un bloc de 07h de cuvinte de forma 1100h n memorie ncep(nd de la adresa 7 din segmentul de date i s se copieze acest bloc ntr-o zona ncep(nd de la adresa E7h din segmentul de date. 'bservaie) 9eamintim ca dup ncrcarea lui D", zona de memorie afiat n fereastra D?:+ va fi cea a segmentului 1". +entru a vedea segmentul de date, se d comanda Dump din submeniul 3ie5, av(nd activ fereastra '+?. >.+ Instruc4iunile (ESA !i (ES.

ceste instruciuni combin instruciunile ,2D"* i "<2"*, respectiv ,2D"4 i "<2"4, fr a afecta , sau C. :nemonic) ciune) (ESA - :ut un octet de la adresa D")"# la adresa 1")D#. UD"V[U"#V. "#["# N1 dac D8R7, "#["#-1 dac D8R1. D#[D# N1 dac D8R7, D#[D#-1 dac D8R1. E6

:nemonic) ciune)

(ES. - :ut un cuv(nt de la adresa D")"# la adresa 1")D# UD#V[U"#V. UD#N1V[U"#N1V. "#["# N0 dac D8R7, "#["#-0 dac D8R1. D#[D# N0 dac D8R7, D#[D#-0 dac D8R1.

Exemplul $.2: -n e!emplul K.1 se pot nlocui instruciunile ,2D"* i ,2D"4 cu :23"* ca n secvena) . . . bucla: movsb

,Gn octet 8in blocul surs ,este trimis la 8estina4ie loo" bucla ,Decrementeaza 2) 9i sare la ,etic/eta E5uclaE "Nn cNn8 2) a#unge la 0 #m" term en8 start

term:

#nstruciunile :23"* i :23"4 admit prefi! de repetare, 25P. -n felul acesta instruciunea precedat de 91+ este e!ecutat de at(tea ori c(t se afl n registrul 'C $ma!im EBB6E ori%. ceali e!emplu poate avea partea final scris n felul urmtor) Exemplul $.3: . . . bucla: I?< movsb ,un numr 8e octe4i egal cu ,con4inutul registrului 2) sunt citi4i ,8in blocul surs 9i trimi9i la 8estina4ie term: #m" term en8 start E=

odul de lucru P >.+ "a se modifice programul de la punctul E.1 pentru a folosi prefi!ul 91+ i instruciuni care s nu afecteze coninutul lui C . >.- Instruc4iunile pentru analiza con4inutului !irurilor' S<ASA !i S<AS. :nemonic) S<ASA - 'ompar coninutul registrului locaiei 1")D# i poziioneaz corespunztor flagurile. ciune) , - U1")D#V. :nemonic) S<AS. - 'ompar coninutul registrului locaiei 1")D# i 1")D#N1 i poziioneaz corespunztor flagurile. ciune) , - U1")D#V. @ - U1")D#N1V. , cu coninutul

C cu coninutul

#nstruciunea S<ASA compar octetul din locaia de memorie cu adresa 1")D# cu coninutul lui , i poziioneaz indicatorii de condiii n funcie de rezultatul comparrii. 9egistrul D# va fi incrementat cu 1. #nstruciunea S<AS. compar cuv(ntul punctat de locaia de memorie cu adresa 1")D# $octetul inferior fiind la aceast adres, iar cel superior la cea urmtoare%, cu coninutul lui C i poziioneaz indicatorii de condiii n funcie de rezultatul comparrii.9egistrul D# va fi incrementat cu 0. -n conformitate cu regulile aritmeticii n complement fa de 0 $numerele negative au bitul cel mai semnificativ 1 iar scderea cu rezultat negativ d un mprumut% , dac numrul din memorie este mai mic dec(t cel din registru, indicatorii < $transport la adunare i mprumut la scdere% i S $semn% se poziioneaz n 1 . Dac numrul din memorie este mai mare dec(t cel din cu cel din registru, indicatorii < i S se poziioneaz n 7. Dac numrul din memorie este egal cu cel din registru, se poziioneaz n 1 indicatorul Q. Exemplul $. +rogramul prezentat n continuare efectueaz urmtoarele) - Declar un ir de 1B octei cu numere ntregi cresctoare de la 1 la BH - -ncarc n , constanta 7=H - ;umr de c(te ori apare aceast constant n ir $compar pe r(nd coninutul lui , cu fiecare din locaiile irului declarat i incrementeaza *@ de cate ori este gsit constanta respectiv%.

EB

.ra8ix !D .mo8el small .stack !00/ .D(T( 5locSursa 8b 35 eAu .co8e start: mov ax,R8at mov 8s,ax mov es,ax

* 8u"L!,1,*,>,=M TH5locSursa ,(samblorul ,calculeaza lungimea blocului

,-ncarc .n ?S segmentul 8e ,8ate L"entru S2(S5M mov 8i, offset 5locSursa ,-ncarc .n DC a8resa ,9iruluiL<entru S2(S5M mov cx, 35 ,-n 2) lungimea 9irului mov al,> ,2onstanta 8e com"arat mov b/,0 ,'aloare ini4iala contor bucla: scasb ,2om"ar (3 cu un octetul 8e ,la 6?S:DC7 8in 9ir #nz conti ,Daca nu e egalitate sare inc b/ ,Daca e >, incrementeaza 5+ conti: loo" bucla ,Ieluare 8ac nu sHa terminat term: #m" term en8 start 'bservaii: - #nstruciunea %&' DS,() nu este necesar dec(t pentru a putea vizualiza n <D irul declarat n memorie $c(nd fereastra '+? este activat, cu 3ie5-F Dump%. <otui, dac nu se introduce aceasta instruciune, prima instruciune din bucl va trebui scrisa n forma %&' 53,?S:6DC7pentru a se citi din segmentul de date. -;ici instruciunea de ncrcare n *, a octetului ce se compara nu este n mod normal necesar $dac o folosim, s-ar putea face comparaia fr "' "*%. ici ea a fost introdus n scop didactic, pentru a putea vizualiza n fiecare moment termenii de comparat. -"imbolul ,* a fost introdus pentru a putea calcula automat lungimea blocului. Simbolul U n limbaj de asamblare desemneaz adresa curent. EE

-Dac era cunoscut lungimea blocului, ea se putea declara e!plicit $de e!emplu 35 eAu 0K%. odul de lucru P >.- "e va rula pas cu pas programul din e!emplul E.6 i se va observa la fiecare comparaie eventuala schimbare a indicatorilor de condiii P >.0 "e va modifica programul de mai sus pentru a introduce un ir de cel puin 07 de caratere oarecare i a contoriza n *@ numrul de apariii ale caracterului `a`. Indicaie: 'aracterele sau irurile de caractere se scriu ntre apstroafe, de e!emplu) `ghafs6ADSfa`. P >.3 "e va modifica programul de mai sus pentru a contoriza n *@ numrul de apariii ale unui subirului `fa` n irul `ghfafasfasfahsAfhhhsaad`. Indicaii: - -n final, va trebui s avem *@R=H - "e va folosi instruciunea de comparaie "' "4, deci n C va trebui incrcat subirul `af`, $caracterele s-au inversat conform conveniei Qlittle-endianQ- v. lucrarea de laborator 6%H - #nstruciunea "' "4 va incrementa D# cu 0, deci s-ar putea pierde subirul care ncepe de la o pozitie par $caracterele K i L%. +entru a se cauta din unu n unu, imediat nainte de ultima instruciune a buclei se va decrementa D# cu 1, pentru a se compensa saltul de 0 al D#. >.0. Instruc4iunile de comparare !iruri < PSA !i < PS. :nemonic) < PSA - 'ompar coninutul locaiei D")"# cu continutul locaiei 1")D# i poziioneaza corespunztor flagurile. ciune) UD")"#V - U1")D#V "#["# N1 dac D8R7, "#["#-1 dac D8R1 D#[D# N1 dac D8R7, D#[D#-1 dac D8R1 :nemonic) < PS. - 'ompar coninutul locaiilor D")"# i D")"#N1 cu coninutul locaiilor 1")D# i 1")D#N1 i poziioneaz corespunztor flagurile. ciune) UD")"#V - U1")D#V UD")"#N1V - U1")D#N1V "#["# N0 dac D8R7, "#["#-0 dac D8R1 D#[D# N0 dac D8R7, D#[D#-0 dac D8R1

EJ

+entru instruciunea de comparaie ':+"* primul operand este locaia de memorie cu adresa efectiv dat de registrul inde! surs "# i adresa de segment dat de D" iar al doilea operand este locaia de memorie cu adresa efectiv dat de registrul inde! destinaie D# i adresa de segment dat de 1". +entru instruciunea de comparaie ':+"4 primul operand este dat de locaiile de memorie cu adresele D")"# $octetul inferior% i D")"#N1 $octetul superior% iar al doilea operand este dat de locaiile de memorie cu adresele 1")D# $octetul inferior% i 1")D#N1 $octetul superior%. -n urma efecturii unei astfel de instruciuni, registrele inde! "# respectiv D# se modifica n funcie de starea flagului D8 $de direcie%. Dac D8 este 7, registrele inde! vor fi incrementate cu 1 la ':+"* i cu 0 la ':+"4. Dac D8 este 1, registrele inde! vor fi decrementate cu 1, respectiv cu 0. -n e!emplul urmtor se arat utilizarea unor astfel de instruciuni la compararea a dou zone de memorie. +rogramul numar n *@ cazurile de coinciden a unui caracter dintr-un ir cu caracterul din aceeai poziie din al doilea ir. Exemplul $.! .ra8ix !D .mo8el small .stack !00/ .D(T( Sir! 8b Pg/fafasfasfa/sFf///saa8P 35 eAu THSir! ,3ungimea este 8at 8e 9irul ! Sir1 8b Pa/gfasgfas#k/a#/as8#g88P .co8e start: mov ax,R8at mov 8s,ax ,-ncarc .n DS segmentul 8e 8ate mov es,ax ,-ncarc .n ?S segmentul 8e 8ate mov 9i, offset Sir!,-ncarc .n SC a8resa 9irului ! mov 8i, offset Sir1,-ncarc .n DC a8resa 9irului 1 mov cx,35 ,2ontorul 8e com"ara4ii .n 2) bucla: mov 8l,6si7 mov 8/,68i7 cm"sb #nz b! ,(8uce .n D3 octetul 8in 9irul ! ,9i .n D+ octetul 8in 9irul 1 ,Linstruc4iuni .n sco" 8i8actic, "ermit vizualizarea elementelorM ,2om"ar (3 cu octetul res"ectiv ,Dac nu este egalitate, se sare EK

inc b/ b!: term: #m" term en8 start odul de lucru loo" bucla

,Dac sHa gasit egalitate, se ,incrementeaz 5+ ,Ieluare 8ac nu sHa terminat ,9irul !

P >.? "e va rula pas cu pas programul din e!emplul E.= i se va urmri cum se modifica registrele i indicatorii de condiii la fiecare comparaie. P >.J "e va modifica programul anterior introducandu-se dou iruri de caractere numerice) `EB10E61K0JLE1JL0` i `JB61JL7J6=0E=J0B`. -n *@ se va contoriza de c(te ori cifrele omoloage coincid, n D, de c(te ori cifra din primul ir este mai mic dec(t cea din al doilea ir, iar n D@ de c(te ori cifra din primul ir este mai mare dec(t cea din al doilea ir. >.3 Pre$i%ele 25P5' 25PQ' 25P=5 !i 25P=Q #nstruciunile de comparaie "' "*, "' "4, ':+"* i ':+"4 pot fi precedate de prefi!ele 25P5 & ec7iBalent cu 25PQ) !i 25P=5 &ec7iBalent cu 25P=Q) care cer procesorului s repete instruciunea pe care o preced p(n c(nd 'C devine 7 $prin decrementare automata%, sau p(n c(nd este gasit relaia de ordine specificat de prefi!ul respectiv. stfel, pentru) 91+1 i 91+M - repet at(t timp c(t termenii comparaiei sunt egali $p(n c(nd apare o diferen%H 91+;1 i 91+;M- repet at(ta timp c(t termenii comparaiei nu sunt egali $p(n c(nd apare o situaie de egalitate%. odul de lucru "e vor folosi prefi!e de repetare pentru urmtoarele programe) P >.> " se scrie un program care s indice n *@ poziia $numrul de ordine% n irul ` *'D18S@#_D,` al caracterului `1`. P >.K " se scrie un program care s indice n *@ numrul de ordine al primelor elemente egale n irurile) `106=BEJKL` i `LKJEB=601`. P >.1D " se scrie un program care s indice n *@ numrul de ordine al primelor elemente omoloage diferite din irurile `110066==BBEE` i 1100==66BBEE`.

EL

Lucrarea de laborator nr. K *unc4ii sistem &I=T +17)


K.1 Utilizarea ntreruperilor so$t/are numite aciuni standard pe care trebuie s le e!ecute un program pot fi realizate mai simplu folosind ntreruperile soft5are i apelul funciilor sistem, *#2" sau *D2". cestea sunt colecii de rutine de larg utilitate e!istente n sistemul de operare i n firm5are-ul computerului i care pot fi apelate de orice program. 'ele mai utilizate rutine ale sistemului de operare sunt cele apelate prin intermediul ntreruperii 01@. ceasta se realizeaz cu instruciunea #;< 01@, dup ce n prealabil au fost ncarcate unele registre cu parametrii specifici. De e!emplu, afiarea unui ir de caractere pe ecran se poate face ca n programul urmtor) Exemplul %.1: .ra8ix !D .mo8el small .stack !00/ .D(T( Sir! 8b Pabc8efg/i# (52...TP

.co8e start: mov ax,seg Sir!

,(8resa segmentului 8e 8ate ,un8e se afl 9irul mov 8s,ax ,se .ncarc .n DS mov 8x, offset sir! ,Se va a"ela func4ia sistem 0O ,care necesita a8resa efectiv ,a 9irului .n D) J7

mov a/,0O int 1!

,2o8ul func4iei sistem .n (+ ,Se c/eam .ntreru"erea "entru ,func4ii sistem

,Ce9irea catre sistemul 8e o"erare mov a/,>c ,se face cu func4ia >2 ,al carei co8 se .ncarc .n (+ int 1! ,Se c/eam .ntreru"erea "entru ,func4ii sistem en8 start 2bservaii) - Zirul de caractere trebuie s fie scris ntre semne apostrof i, pentru funcia 7L, trebuie s se termine cu caracterul U $dup cum se va arta mai jos%. - -n locul instruciunii mov ax,seg Sir! se putea folosi aici i instruciunea mov ax,R8ata. Dac ns erau mai multe iruri, n segmente diferite, era necesar instruciunea din e!emplu. K.+ *unc4ii sistem de intrare !i ie!ire 8unciile sistem sunt apelate prin e!ecuia ntreruperii 01@, cu anumite valori n registre. Dintre acestea, funciile de intrare de la tastatura sunt) 71@ #ntrare caracter de la >eAboard. 7E@ #ntrareI#eire caracter de la >eAboardIdisplaA. 7J@ #ntrare caracter nefiltrat de la >eAboard fr ecou. 7K@ #ntare caracter de la >eAboard fr ecou. 7 @ #ntrare de la >eAboard n buffer. 68@ #ntrare de la dispozitiv sau din fiier. 8unciile de ieire la displaA sunt) 70@ #eire caracter la displaA. 7L@ #eire ir la displaA. =7@ "criere n dispozitiv de ieire sau fiier.

J1

-n afara de acestea mai e!ist i funcii de lucru cu fiierele i cu discul, cu memoria, etc prezentate n ne!a 6. 2 funcie larg folosit este funcia ='h care permite ieirea din program catre sistemul de operare. D1@ *U=<TI(=- <itire caracter de la #eVboard cu ecou &a$i!are automat pe ecran) 2egistre8 @ R 71@ Ie!ire n registre8 , R 'aracterul citit -n caz c este un caracter cu cod e!tins, n , se va obine 7 i va fi necesar fie apelat funcia din nou pentru a se obine codul e!tins. Exemplul %.2: . . ,(ici se va citi un caracter 8e la keFboar8 %&' (+,0!+, Kunc4ia 8e citire a unui caracter CNT 1! + . . DJ@ *U=<TI(=- <itire caracter ne$iltrat de la #eVboard $r ecou 2egistre8 @ R 7J@ Ie!ire n registre8 , R 'aracterul citit. -n caz c este un caracter cu cod e!tins, n , se va obine 7 i va fi necesar fie apelat funcia din nou pentru a se obine codul e!tins. Exemplul %.3: . . %&' (+,0Q+ CNT 1! + J0

. . (bserBa4ie8 8uncia 7Jh nu testeaz caracterul, i nu sesizeaz de e!emplu 'trlN', astfel c la redirectarea spre un fiier nu este detectat caracterul de sf(rit de fiier, i se continu scrierea n fiierul imediat urmtor. Pentru sesizarea <trl-< se poate $olosi n loc $unc4ia D>7' care face filtrarea i este similara cu 7Jh n rest. *U=<TI(= DA@- <itire de la #eVboard n bu$$er 2egistre8 @ R 7 @. D")DC R dresa zonei unde se vor memora caracterele i n care structura datelor va fi urmtoarea) *W<1 7 R ;umrul total de caractere care urmeaz s fie cititeH *W<1 1 R ;umrul de caractere citite p(n la un moment dat. De la *W<1 0 p(n la U*W<1 7V N 0 R caracterele citite 'aracterele vor fi memorate ncep(nd cu octetul al treilea al zonei specificate. <erminarea introducerii se face automat c(nd s-a citit un numr de caractere egal cu cel specificat n primul octet $moment n care difuzorul va genera un beep% sau c(nd se apas tasta 1;<19. -*@ *U=<TI(= W <itire din dispozitiB sau $i!ier 2egistre8 @ R 68@H *C R ;umrul asignat dispozitivuluiH 'C R ;umrul de octei care trebuie cititH D")DC R dresa zonei n care se va face memorarea. Ie!iri n registre8 '8 R 7 nu au fost erori iar C R numrul de octei cititiH '8 R 1 dac au e!istat erori iar C conine codul erorii. D+@ *U=<TI(= - A$i!are caracter 2egistre8 @ R 70@H D, R 'odul he!a al caracterului de afiat. Exemplul %. : ,(fi9eaz caracterul P!P %&' (+, 01 %&' D3,*!/ , 2aracterul P!P are co8ul (S2CC *!+ CNT 1!/ J6

DK@ *U=<TI(= & A$i!are !ir de caractere 2egistre8 @ R 7L@H D")DC R dresa de nceput a irului de caractere. 8uncia afieaz caracterele unul cite unul p(n intilneste caracterul a care este interpretat ca sf(rit de ir. -n locul acestei funcii se recomand utilizarea funciei =7@. 0D@ *U=<TI(= W Scriere n dispozitiB sau $i!ier 2egistre8 @ R =7@H *C R ;umrul dispozitivului $ 1 pentru displaA%H 'C R ;umrul de octei de scrisH D")DC R dresa de nceput a irului de scris. Ie!iri n registre8 '8 R 7 dac nu au fost eroriH C R ;umrul de octei scriiH '8 R 1 dac au aprut eroriH C R codul de eroare. 0<@ *U=<TI(= W Ie!ire ctre sistemul de operare 2egistre8 @ R ='@H Ie!iri n registre8 , R codul de terminareH odul de lucru8 "e recomand ca la programele urmtoare ieirea sa se faca cu funcia ='h, ca n e!emplul L.1. 9ularea se poate face direct, in care caz revenirea in 4indo5s se face cu ltN<ab sau cu tasta Q4indo5sQ $cea dintre 'trl si lt%. "e poate face rularea si prin <D, eventual pas cu pas. P K.1 "e va scrie un program care afieaz la ecran caracterele av(nd codurile "'## cuprinse ntre 67h i K7h. Indicaii: "e va folosi funcia 70. P K.+ "e va scrie un program care s afieze un ir de caractere la ecran. J=

Indicaii: Zirurile de caractere se scriu ntre semne apostrof, iar n interiorul unui ir apostroful se dubleaza $de e!emplu .ntrPa8evr se va scrie ca ir sub forma P.ntrPPa8evrP%. +entru folosirea funciei 7Lh irul trebuie s se termine cu caracterul a. P K.- +rogram care s afieze dou iruri de caractere pe dou r(nduri. Indicaii: +entru a putea trece la un nou r(nd pe ecran, trebuie trimise ctre acesta caracterele 7Dh $'arriage 9eturn - aducere la nceputul r(ndului% i 7 h $,ine 8eed - avans cu un r(nd mai jos pe ecran%. P K.0 "e va scrie un program care s citeasc de la tastatur caractere i s le afieze cu ecou la ecran. Dac se apasa tasta 1;<19 $care genereaz caracterul 'arriage 9eturn -2Dh%, se va afia mesajul `'itire tastatura incheiata.` $mesajele sunt fr diacritice%. Indicaii: "e va folosi funcia 71, care va afia automat caracterul tastatH programul l va afia din nou , de e!emplu cu funcia 70, astfel c fiecare caracter va aprea pe ecran dublat - cu ecou. P K.3 "e va modifica programul precedent pentru afiare fr ecou. P K.? "e va scrie un program care s citeasc de la tastatur caractere i s le afieze cu majuscule la ecran. "e va testa varianta cu ecou i cea fr ecou. Indicaii: 'odul "'## pentru majuscule se obine scz(nd 07h din codul curent. P K.J "e va scrie un program care s citeasca ntr-un buffer un ir de caractere $cu funcia 7 h% i s le afieze $cu funcia 7Lh% pe linia urmtoare atunci c(nd se apas 1nter. P K.> "e va scrie un program care afieaz pe ecran te!tul) Q'are din urmtoarele registre folosite la adresare indirect, implic segmentul de dateY 1. *C 0. *+ 6. "# =. D#Q i asteapta un caracter $1..=% de la tastatur. Dac rspunsul este corect s se afieze te!tul) Q'orectQ, iar dac este greit s afieze te!tul) QSresitbb 1ste *C sau "#bQ

JB

Lucrarea de laborator nr. 1D A$i!area n mod gra$ic


1D.1 Utilizarea ntreruperii 1D7 +lcile grafice au o zon tampon n memoria 9 : a crei copie se regsete n ecran. #n modul grafic, aceast zon ncepe in general la adresa 7 777@ $vezi i ne!a 0 pentru diverse moduri grafice%. 2rice scriere n memorie n aceast zon se va reflecta asupra ecranului n funcie de modul de lucru ales pentru placa grafic. "tabilirea atributelor ecranului se poate face cu ntreruperea #;< 17 @, care ofer mai multe servicii aflate n *#2" n funcie de coninutul lui @. :enionm n continuare unele dintre acestea, restul funciilor fiind prezentat n ne!a0 ) *unc4ia D8 Stabilire mod de lucru @ R 7H , R #dentificator de mod. 1!) +entru , R 17 @ modul E=7!=K7! 1E culoriH +entru , R 16 @ modul 607!077!0BE culori. ?rmtoarea secven va trece ecranul n modul 16@) Exemplul 1&.1: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ *unc4ia D?8 "e$ilare ecran @R7EhH ,R;umr de r(nduri cu care se face defilarea. +entru tergerea ecranului. *@ R tributele liniilor inserate ?rmtoarea secven va face stergerea ecranului) JE

,R7 se face

Exemplul 1&.2: sterge: ,Sterge ecran mov a/,0D/ mov al,0 int !0/ *unc4ia D<@8 A$isare punct @R 7'@H ,R numrul culoriiH 'CR coordonata ! $!R7 n e!trema st(nga a ecranului%H DCR coordonata A $AR7 n e!trema superioar a ecranului%. 2bservaie) 8uncia 7'@ este lent i nu se recomand pentru imagini cu un numr mare de puncte. ?rmtoarea secvena afieaz un punct la coordonatele aflate n 'C i DC, cu culoarea dat de ,) Exemplul 1&.3: afi9: mov a/,02/ int !0/ ,(fi9eaz un "unct la xB2), FBD) 9i ,culoareB(3 ,func4ia 02/ ,c/eam func4ia bios

?rmtoarea secven afieaz o linie orizontal , la A R DC din puncte cu culori cresctoare. Exemplul 1&. : linie: mov a/,02/ int !0/ inc b/ mov s/r inc cm" #ne ,func4ia 02/ ,call bios service ,2alculeaz culoarea "entru ,urmtorul "unct al,b/ ,2o"ie .ntrHun alt registru "t ,"relucrare al,= ,Se iau numai cei * bi4i mai ,semnificativi 8in registrul 8e culoare cx ,2alculeaz x "entru urmtorul "unct cx,D00 ,Se afi9eaz o linie 8e D00 "uncte linie JJ

*unc4ia (A@ 8 Stabilire palet de culori @R7*@H *@Rmodul $7 pentru chenar, 1 pentru imagine%H *,R;umrul paletei $-n general ntre 7 i EB%. Exemplul 1&.!: ?rmtoarea secven stabileste paleta K pentru elementele de imagine) ,<aleta mov mov mov int a/,0b/ b/,! bl,@ !0/

1D.+ Scrierea direct n memoria de ecran ?tilizarea ntreruperii 17h pentru afiarea n ecran este destul de lent, i de aceea se recomand scrierea direct n memoria de ecran. ceasta ncepe la adresa 7 777@ n modul grafic i are dimensiuni dependente de rezoluia modului grafic ales. ?rmtoarea secven introduce adresa zonei ecran n registrul e!trasegment i scrie un dublu octet coninut n 'C la coordonatele date de D#) Exemplul 1&.": %&' (), 0(000+ %&' ?S, () %&' ?S:6DC7, 2) Dac se dorete calculul offset-ului $n e!emplul de mai sus D#% n funcie de coordonatele dorite C i W coninute de e!emplu n C respectiv *C se poate folosi o secven de felul urmtor) Exemplul 1&.#: %&' DC, ) %&' D), S , DC B ) , Se face o co"ie a lui S .n alt ,registru , Cnstruc4iunile urmtoare fac .nmul4irea cu *10 S+3 5), @ , S/ift S left @ S+3 D), D , S/ift S left D (DD D), 5) , D) B S S+3 @ ; S S+3 D , Se a8una acum coor8onata ) JK

(DD %&' %&'

DC, D) , DC B S x *10 ; ) (3, 2uloare ?S:6DC7,2), (fi9eaz "ixelii lui 2)

+entru afiarea unui segment cu CR!1, *CRA, 'CR!0, D,Rculoare se poate face transferul in memoria ecran a continutului registrului , cu instruciunea ST&S5 ca in e!emplul urmator) Exemplul 1&.$: <GS+ D) SG5 %&' %&' S+3 S+3 (DD (DD <&< %&' I?< 2), DC, D), 5), D), D), DC, D) () () 5) @ D 5) D) , D) salvat "entru a "utea fi utilizat ,.n calcule , 2) B )1 H )! 3ungimea segmentului , DC B )! , D) B S , S/ift S left @ , S/ift S left D , D) B S S+3 @ ; S S+3 D , DC B S x *10 ; ) , Ieface vec/iul D), care con4ine ,culoarea L.n D3M , 2uloarea este "us .n (3 , Ie"et stocarea lui (3 .n 2) loca4ii , consecutive 8e la a8resa 8in DC

(3,D3 ST&S5

od de lucru8 +entru testarea programelor care urmeaz, se poate folosi rularea cu <D, ecranul put(nd fi vzut dup rulare cu 8L, eventual cu comanda ?ser "creen din submeniul 3ie5 $ ltN8B%. "e recomand ca programele s se ncheie cu o bucl infinit de tipul ) term: #m" term deoarece ieirea normal, cu #;< 01h poate afecta informaia afiata pe ?ser "creen, n funcie de caracteristicile sistemului de operare folosit. Dac se folosete bucla infinit, ieirea din ea se poate face cu tasta 4#;D24" aflat ntre tastele '<9, i ,<, urmat de un clic> dreapta pe tas>ul respectiv de pe <as>*ar i comanda 'lose. 1ste absolut necesar nchiderea acestei ferestre, deoarece altfel memoria rm(ne ncrcat i la un moment dat poate s fie depit. 2ricum, anumite procese rm(n ncrcate i dac apare mesaj de depire a memoriei, se va reporni sistemul.

JL

P 1D.1 "e va scrie un program care s afieze un punct n ecran, la !R177 i ARB7, culoarea R0, folosind #;< 17@. Indicaie: :ai nt(i va trebui s se stabileasca modul video 607! 077 ca n e!emplul 17.1 P 1D.+ "e va scrie un program care s afieze o linie n ecran la !1RB7, A1RB7, lungimeaR177, culoareaR0, folosind #;< 17@. Indicaie: se va folosi un contor, 'C, care va fi incrementat i se va relua bucla p(n c(nd 'C ajunge la valoarea !1Nlungimea. P 1D.- "e va modifica programul 17.0 pentru a afia B7 de linii cu aceiai parametri iniiali, dar cu A cresctor. Indicaie: "e va include bucla anterioar ntr-o nou bucl care l modific pe DC. P 1D.0 "e va modifica programul 17.6 pentru a afia linii formate din puncte cu culori cresctoare $linii verticale cu diverse culori%. Indicaie: "e va incrementa , n interiorul buclei care traseaz o linie. P 1D.3 "e va modifica programul 17.6 pentru a afia linii cu culori cresctoare $linii orizontale de diferite culori%. Indicaie: "e va incrementa , n e!teriorul buclei care traseaz o linie. P 1D.? "e va scrie un program care s afieze un punct de coordonate !1R1E7, A1R7 i culoareR6, direct prin scriere n memoria ecran, n modul grafic 607 ! 077. Indicaie: Dac se pune !1 n D# i culoarea n ,, se poate folosi instruciunea "<2"*. 1vident, adresa memoriei ecran, 7 777h va trebui s fie n prealabil scris n 1". P 1D.J "e va completa programul pentru a afia o linie orizontal din 077 de puncte ncep(nd din colul din st(nga sus al ecranului $C1R7, W1R7%, cu culoarea B. Indicaie: "e poate folosi programul anterior, pun(nd n 'C lungimea liniei i prefi!ul 91+M la instruciunea "<2"*. P 1D.> "e va modifica programul pentru a afia o linie orizontal de 077 de puncte la poziia C1R177, W1R7. Indicaii: -nainte de afiarea liniei, registrul D# care ine adresa punctului va fi incrcat cu C1. P 1D.K "e va modifica programul pentru a afia o linie orizontal de 077 de puncte la poziia C1R177, W1R1. K7

Indicaie: -nainte de afiarea liniei, registrul care reine coordonata iniial, D#, va trebui adunat cu 607 $numrul de puncte dintr-o linie%. P 1D.1D "e va modifica programul pentru a afia o linie orizontal de 077 de puncte la poziia C1R177, W1RB7. Indicaie: -nainte de afiarea liniei, registrul care reine coordonata iniial, D#, va trebui adunat cu W1T607 $de W1 ori numrul de puncte dintr-o linie%. -nmulirea se va face prin deplasri spre st(nga, ca n lucrarea de laborator nr. E. 2 parte dintr-o realizare posibil a programului este prezentat in continuare) 3inieo: mov mov mov mov mov s/l s/l a88 a88 8i,x! ,DC con4ine )! b",F! ,5< con4ine S! cx,lung ,2) con4ine numrul 8e "uncte al,culoarea,-n (3 este culoarea 8x,b" ,Se face .nmul4irea 8x,D ,lui 5< La8ic a lui S!M cu *10 b",@ ,<rin co"iere .n D) b",8x ,8e"lasri la stNnga 9i a8unare 8i,b" ,De"lasamentul ob4inut se a8una la ,a8resa ini4ial re"z stosb ,Se face transferul 9irului

P 1D.11 "e va modifica programul pentru a afia o linie vertical de B7 de puncte la poziia C1R177, W1RB7. Indicaii: <rebuie ca fiecare nou punct s fie pus la o adresa cu 607 mai mare dec(t cel precedent. +rin urmare, nu mai poate fi folosit instruciunea "<2"*, ci trebuie n locul ei o bucl de tipul) lv!: a88 8i,*10 ,Noul "unct este cu *10 mai ,8e"arte .n memoria 8e ecran mov es:68i7,al ,<une "unctul loo" lv! ,Ie"et 8e 2) ori P 1D.1+ "e va modifica programul de mai sus pentru a afia o linie oblic spre dreapta jos, cu !1R177, A1RB7 i lungimea B7 de puncte. Indicaie: dresa unui nou punct se obine prin sumare cu 601 $adic 607N1% fa de adresa celui anterior. P 1D.1- "e va modifica programul de mai sus pentru a afia o linie oblic spre st(nga jos, cu !1R177, A1RB7 i lungimea B7 de puncte. K1

Indicaie: dresa unui nou punct se obine prin sumare cu 61L $adic 607-1% fa de adresa celui anterior. P 1D.10 "e va modifica programul de la punctul + 17.11 pentru a afia 177 de linii verticale identice, cu !1 cresctor. "e va obine un dreptunghi plin. Indicaii: "e va folosi un contor $de e!emplu *C% care va fi conine iniial 177 i va fi sczut la fiecare trasare a unei linii. +entru ca linia s nceap de fiecare dat de la acelasi A1, registrul D# care conine adresa primului punct dintr-o linie va trebui salvat la nceputul buclei de linie $care l va modifica%, i readus la sf(ritul buclei, c(nd va fi incrementat cu 1 pentru avansul pe !. Dup aceea se va decrementa contorul i se va face saltul condiionat.

K0

Lucrarea de laborator nr. 11 Utilizarea de subrutine &proceduri)


11.1 <7emarea !i reBenirea din subrutin tunci c(nd anumite poriuni dintr-un program apar de mai multe ori n cuprinsul acestuia, este avantajos ca ele s fie scrise o singura dat, ca subrutine, i s fie apelate atunci c(nd sunt necesare. "ubrutinele se mai numesc n limbaj de asamblare i proceduri $ca i n alte limbaje de programare%. 2 subrutin ncepe cu o etichet i se termina cu instruciunea 91<. pelul subrutinei se face cu instruciunea ' ,, av(nd ca operand eticheta respectiv. ?tilizarea subrutinelor modularizeaz programele i le face mai compacte, mai uor de ineles i de dezvoltat. <otui utilizarea lor ridic unele probleme, n special cele legate de transmiterea parametrilor i modificarea de ctre subrutine a unora dintre registre. Exemplul 11.1: 3om relua un program din lucrarea precedent, pentru a trasa dou linii orizontale n poziii diferite) !1R177, A1RB7 i !1R177 i A1R1B7. .%&D?3 S%(33 .ST(2U 100+ .D(T( x!B!00 F!B=0 lung!B100 culoarea! B= x1B!00 F1B!=0 K6 ,(ici se 8eclar "arametrii liniilor

lung1B100 culoarea1 B* .2&D? Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ %&' %&' (), 0(000+, (8resa segmentului ecran mo8 !* ?S, () , .n ?S

,De aici se c/eam scrierea "rimei linii mov mov mov mov call 8i,x! ,<arametrii "rimei linii b",F! cx,lung! al,culoarea! l#n#eo ,2/eam subrutina 8e linie

,De aici se c/eam scrierea celei 8e a 8ou linii mov 8i,x1 ,<arametrii celei 8e a 8ou linii mov b",F1 mov cx,lung1 mov al,culoarea1 call l#n#eo ,2/eam subrutina 8e linie o"rire: #m"

o"rire

,VVVVVVVVVVV SubrutineVVVVVVVVVVVVVVVVVVVV *#n#eo: %ubrut#na de trasare a une# l#n## or#+ontale cu parametr## $,-(,B.-/,0X-lun"#mea 1# A*- culoarea Mod#2#ca re"#strele: $X,B.,$, 1# 0X 3&n %4O%B5 mo' d(,bp shl d(,6 K=

shl add add rep+ ret

bp,7 d(,bp d#,d( stosb

%8a stab#l#t adresa pr#mulu# punct A#c# se scr#u punctele l#n#e# 9e:ntoarcere &n pro"ramul apelant

?ND Start #nstruciunile subrutinei i apelurile catre ea au fost scrise cu caractere bold pentru a se evidenia procedeul. (a )nceputul subrutinei s*au scris )n comentarii registrele care conin parametrii necesari, precum +i registrele modificate )n urma execuiei. ,ceste preci-ri, desi par consumatoare de timp, sunt extrem de utile )n de-voltarea programului. "e observ c nainte de apelul subrutinei, registrele au fost ncrcate corespunztor, cu parametrii specifici punctului de apel. #nstruciunile de iniializare au fost deci scoase din blocul de trasare a unei linii folosit n programul din lucrarea precedenta, lu(nd forme diferite pentru cele dou apeluri. "e observ de asemenea c blocul folosit anterior modifica pe C i implicit pe ,, care n mod normal reine culoarea, de aceea i instruciunile de iniializare a lui 1" au fost scoase din subrutina. P 11.1 " se ruleze pas cu pas programul din e!emplul 11.1 i s se observe evoluia registrelor i a ecranului $cu ,<N8B%. <recerea peste instruciunile repetitive 91+M "<2"* se poate face pun(nd cursorul pe linia imediat urmtoare i dand comanda QSo to cursorQ $8=% . +rogramul se va salva, fiind necesar la punctul 11.6. P 11.+ " se dezvolte programul anterior pentru a trasa un dreptunghi cu v(rful din st(nga sus la !1R177 i A1RB7, lungineaR177 , nlimea RB7 i culoarea B pentru liniile orizontale i 1 pentru cele verticale. Indicaii: "e va aduga o subrutina de trasare a unei linii verticale i se va apela corespunztor de 0 ori. +rogramul se va salva, fiind necesar la punctul 11.E. +entru ca liniile verticale s nu se suprapun peste cea orizontal de sus $dup cum se poate observa%, originea lor trebuie s inceapa cu 607 de puncte mai departe i lungimea s fie cu 1 mai mica. Deci nainte de chemarea subrutinei de trasare a liniilor verticale, D# trebuie adunat cu 607 iar 'C decrementat. 11.+ SalBarea !i re$acerea registrelor a$ectate de subrutin 'orpul principal al subrutinelor modific n general coninutul unor registre. Dac subrutina este apelat n mod repetat, aceste modificri pot afecta modul de e!ecuie. De aceea este necesar ca registrele care sunt folosite de subrutina, i al cror coninut este necesar mai t(rziu, s fie salvate n stiv cu instruciuni +?"@ i s fie KB

refcute nainte de ieirea din subrutin cu instruciuni +2+ n ordine invers, conform principiului de funcionare al stivei. De e!emplu, atunci c(nd subrutina este apelat dintr-o bucla n care avem contorul n "#, iar subrutina modific registrele D# i *C, se va proceda n felul urmtor) Exemplul 11.2: . . . mov 8i,=0 mov bx,*0 mov 9i,10 et!: call subrutina a88 8i,= sub bx,* 8ec 9i #nz et! . . . subrut#na: push d# push b( . . . #nc d# dec b( . . . pop b( pop d# ret "e observ c valorile iniiale din registrele D# i *C sunt necesare i n alte pri din programul apelant, dar ele vor fi modificate de subrutina. De aceea ele se vor KE

,'aloarea ini4ial a lui DC ,'aloarea ini4ial a lui 5) ,2ontorul 8e c/emri subrutina ,2/eam subrutina ,'ec/ea valoare a lui DC se a8un ,cu = ,'ec/ea valoare a lui 5) se sca8e ,cu * ,Decrementeaza contorul ,Ieia 8ac contorul nu a a#uns la 0 ,(lte instruc4iuni %ubrut#na 'a mod#2#ca pe $, 1# BX de aceea se sal'ea+ $, 1# BX ;rmea+ corpul subrut#ne# &n care se mod#2#ca $, 1# alte re"#stre

*a s2:r1#t se re2ace &nt:# BX 1# apo# $, 3dec# &n ord#ne #n'ers5

salva n stiv i se vor reface apoi din stiv, dup principiul ultimul intrat este primul ieit $Q,ast #n 8irst 2utQ - ,#82%. De multe ori, problema modificrii registrelor este dificil, de aceea se recomand scrierea n faza iniial n preambulul subrutinei a registrelor afectate, ca n e!emplul 11.1. Dac unele din ele conin valori care vor mai fi necesare, ele se vor salva i se vor reface. Desigur, salvarea se poate face i imediat nainte de apelul subrutinei, iar refacerea imediat dup revenirea din subrutina, sau n alte puncte convenabil alese. P 11.- " se dezvolte programul anterior pentru a afia un dreptunghi plin cu !1R177,A1RB7,lR107,hRE7 i culoarea B. Indicaii: "e va apela n mod repetat, de h ori, subrutina de trasare a unei linii orizontale. 'ontor poate fi de e!emplu registrul *C, care nu este folosit n alt parte. Deoarece subrutina modific registrele 'C, D# i *+, acestea se vor salva n stiv la nceputul subrutinei i se vor reface la sf(ritul ei, ca mai jos) Exemplul 11.3: linieo: ,3inie orizontal "us/ cx ,Salveaz "us/ 8i ,registrele "us/ b" ,care se vor mo8ifica mov 8x,b" ,-nce"e trasarea liniei s/l 8x,@ s/l b",D a88 8x,b" a88 8i,8x re"z stosb "o" b" "o" 8i "o" cx ret P 11.0 " se dezvolte programul anterior pentru a afia 07 de dreptunghiuri pline cu !1R07NKn ,A1RB7NBn,lR07,hRE7 i culoarea n, unde n este numrul dreptunghiului curent. ,Ieface ,registrele ,care sHau mo8ificat

KJ

Indicaii: "e va scrie irul instruciunilor de afiare a unui dreptunghi ca o subrutin, i se va apela n mod repetat, de n ori, schimb(nd corespunztor parametrii. 2 posibilitate de realizare a unui program similar este cea de mai jos) P 11.3 " se modifice programul anterior pentru a afia 0777 de dreptunghiuri pline cu parametri aleatori cititi din memorie ncep(nd de la adresa D")B77h n felul urmtor) !1RUB77hNnV ,A1RUB77hNnN1V,lRUB77hNnN0V,hRE7 i culoarea UB77hNnN6V, unde n este numrul dreptunghiului curent. Indicaii: *ucla de afiare a dreptunghiurilor va citi din memorie parametrii fiecrui dreptunghi, deci ei nu mai trebuiesc salvati n subrutina chemat. 2 posibilitate de realizare a acestei bucle este cea de mai jos) Exemplul 11. : mov mov 8re"tnou: mov sub mov sub mov an8 mov mov call a88 8ec #nz ,-nce"utul zonei 8e memorie ,Numrul total 8e 8re"tung/iuri ,%ai .ntNi "arametrii "rimei linii 8i,6bx7 ,DC e aici maxim KKKK/BD==*= 8i,D==*DH*10,x! e acum maxim *10 b",6bx;!7 ,5< e ini4ial maxim D==*= b",D==*DH100,F! e acum maxim 100 cx,6bx;17 ,2) e ini4ial maxim D==*= cx,0!f/ ,3ungimea e acum maxim *1 al,6bx;*7 ,(3 LculoareaM e maxim 1== a/,/ ,Dre"tung/iurile au .nl4imea / 8re"tung/i ,(fi9eaz 8re"tung/iul bx,> ,Cn8exul .n memorie e crescut cu > 9i ,Numrul 8e re"etri sczut cu ! 8re"tnou ,Dac nu sHa a#uns la 0, re"et bx,=00/ 9i,1000

P 11.? "a se combine programul anterior cu cel de la punctul 11.6 pentru ca dreptunghiurile s fie ncadrate de un chenar negru. Indicaii: +entru parametrii dai, se va trasa mai nt(i un dreptunghi din patru linii negre i apoi unul colorat cu parametri ) !1c R!1N1 $! st(nga sus color%, A1cRA1N1, lcRl-0, hcRh-0. Deoarece parametrii primului dreptunghi sunt necesari i pentru al doilea, registrele care i conin se vor salva i apoi reface.

KK

Lucrarea de laborator nr. 1+ Utilizarea macroinstruc4iunilor


1+.1 Ieneralitati ,a fel ca n cazul utilizrii subrutinelor, atunci c(nd ntr-un program se folosete de mai multe ori un bloc de instruciuni, acesta poate fi scris o singur dat sub forma unei macroinstruc4iuni $numit i macrodefinitie% i reutiliza apoi n punctele n care este necesar. *locul coninut de o macroinstruciune va fi automat inserat n programul obiect n urma procesului de asamblare, ca i cum ele ar fi fost scrise ca atare n programul surs. cest proces se numete e!pandare a macroinstruciunii $macroe!pandare%. 9ezult ca utilizarea de macroinstruciuni nu economiseste spatiu n memoria de program, n schimb uureaz munca programatorului. -n plus, spre deosebire de subrutine, macroinstruc4iunile admit parametri e%plici4i' precum i unele directive specifice care cresc productivitatea dezvoltrii programelor. "i din punct de vedere al vitezei, macroinstruciunile sunt preferabile, deoarece elimin necesitatea salturilor suplimentare introduse de subrutine. ceste salturi penalizeaz puternic viteza procesoarelor care au coad de asteptare n care instruciunile se e!trag anticipat n ordine, coad care trebuie golit integral la apariia unui salt. <otui, utilizarea macroinstruciunilor genereaz anumite dificulti, a caror rezolvare va fi prezentat n cele ce urmeaz. 1+.+ "eclararea !i utilizarea macroinstruc4iunilor Declararea unei macroinstruciuni se face n forma urmtoare) =ume A<2( Uparametri formaliV U91+<V U#9+V U#9+'V corpul macroinstruc4iunii 5=" KL

<ermenii pui n paranteze drepte sunt opionali $pot s apar sau s nu apar la o macroinstruciune%. 'orpul macroinstruciunii conine date, instruciuni, din care unele care se pot referi la eventualii parametri, i chiar alte apeluri de macroinstruciuni sau subrutine. ?nele asambloare cer ca eventualele comentarii din declararea macroinstruciunii s fie precedate n mod obligatoriu de QHHQ deoarece la e!pandare din cele dou caractere QHQ va rm(ne unul singur. :acroinstruciunile se declar de regul la nceputul zonei de cod, nainte de eticheta de intrare n programul principal $"< 9<) %. ?tilizarea unei macroinstruciuni n program se face prin scrierea numelui acesteia urmat de lista de parametri actuali $cu valorile necesare in punctul respectiv%. =ume Xparametri actualiY Exemplul 12.1: 8ie programul de trasare a unei drepte orizontale cu parametrii !1,A1, lungimea i culoarea din lucrarea 17, punctul +17.17. "criind irul de instruciuni care traseaz linia ca o macroinstruciune, programul poate fi pus n urmtoarea forma) .%&D?3 S%(33 .ST(2U 100+ .D(T( x!B!00 F!B=0 lungB100 culoareaB= .2&D? ,(ici se *#n#eo mov mov mov mov mov s/l s/l a88 8eclara macroinstruc4iunea 8e trasare linie macro 8i,x! ,DC con4ine )! b",F! ,5< con4ine S! cx,lung ,2) con4ine numrul 8e "uncte al,culoarea,-n (3 este culoarea 8x,b" ,Se face .nmul4irea 8x,D ,lui 5< La8ic a lui S!M cu *10 b",@ ,<rin co"iere .n D) b",8x ,8e"lasri la stNnga 9i a8unare L7 ,(ici se 8eclar "arametrii liniilor

a88 8i,b" re"z stosb endm Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/

,De"lasamentul ob4inut se a8un la ,a8resa ini4ial ,Se face transferul 9irului

%&' (), 0(000+, (8resa segment ecran .n mo8ul !* %&' ?S, () ,.n ?S *#n#eo A#c# s8a chemat macro#nstruc)#unea o"rire: #m" ?ND Start v(nd ns n vedere posibilitile comode de transmitere a parametrilor catre o macroinstruciune, mai corect ar fi ca s se scrie lista de parametri formali la declarare i de parametri actuali la utilizare. De e!emplu, un programu care traseaz dou linii ar lua forma urmtoare) Exemplul 12.2: .%&D?3 S%(33 .ST(2U 100+ .D(T( x!B=0 F!B=0 lungB!00 culoareaB0?/ .2&D? ,(ici se 8eclara macroinstruc4iunea 8e trasare linie 3inieo macro (1,/1,lun",culoarea parametr## 2ormal# mov 8i,x! ,DC con4ine )! mov b",F! ,5< con4ine S! L1 o"rire

mov mov mov s/l s/l a88 a88

cx,lung ,2) con4ine numrul 8e "uncte al,culoarea,-n (3 este culoarea 8x,b" ,Se face .nmul4irea 8x,D ,lui 5< La8ic a lui S!M cu *10 b",@ ,<rin co"iere .n D) b",8x ,8e"lasri la stNnga 9i a8unare 8i,b" ,De"lasamentul ob4inut se a8una la ,a8resa ini4ial re"z stosb ,Se face transferul 9irului en8m Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ %&' %&' (), 0(000+, (8resa segment ecran .n mo8ul !* ?S, () ,.n ?S .arametr## actual# a# pr#me# l#n## .arametr## actual# a# alte# l#n##

l#n#eo 10,100,<0,= l#n#eo =0,1=0,<0,1 o"rire: #m" ?ND Start

o"rire

2bservaii) -n programul precedent nu era de fapt necesar declararea iniial a unor valori pentru !1,A1, lung i culoarea. Dac aceasta declarare apare, ea nu are nici un efect asupra macroinstruciunii, chiar dac n declararea acesteia s-au folosit aceleai simboluri. Dac ns la utilizarea macroinstruciunii sunt puse aceste simboluri, ele vor lua ca valori actuale cele declarate e!plicit $B7,B7,177 i 21h%. odul de lucru. P 1+.1 " se scrie i s se testeze programul din e!emplul 10.0. "e va observa mai nt(i n fiierul de listare modul n care macroinstruciunea este e!pandat n cele dou puncte unde este apelat i cum apar parametrii actuali. poi se vor modifica L0

parametrii actuali ai uneia dintre utilizri, folosind simbolurile declarate n partea de date a programului, i se va observa n fiierul de listare cum sunt nlocuite aceste simboluri. "e va mai declara n partea de date un alt set de simboluri, !1R1B7,A1RE7,lungR67,culoareaRK, care vor fi folosite pentru trasarea unei a treia linii orizontale. 1+.- Utilizarea etic7etelor locale cu directiBa L(<AL Dac, la declararea unei macroinstruciuni, n corpul acesteia e!ist etichete catre care se fac salturi, la e!pandarea n mai multe locuri se vor genera mesaje de eroare de tip Qsimbol deja utilizat n alt parteQ. ;u se va mai putea ti catre care din simbolurile identice aparute n urma e!pandarii s se faca saltul. +entru a se evita aceast situaie, dac n declararea unei macroinstruciuni se folosesc simboluri, se va folosi nainte de corpul macroinstruciunii directiva L(<AL urmat de lista de simboluri. >ume MA09O 6"arametri formali7 *O0A* s#mbol1,s#mbol=,? corpul macro#nstruc)#un## E>$M -n urma e!pandrii, simbolurile vor fi renumite automat de catre asamblor sub forma YY7771, YY7770, p(n la YYLLLL i nu vor mai fi posibile erori. Exemplul 12.3: .%&D?3 S%(33 .ST(2U 100+ .D(T( x!B=0 F!B=0 lungB!00 culoareaB0?/ .2&D? 3iniev macro x!,F!,lung,culoarea local *'1 mov 8i,x! ,DC con4ine )! mov b",F! ,5< con4ine S! mov cx,lung ,2) con4ine numrul 8e "uncte mov al,culoarea,-n (3 este culoarea L6

,Se face .nmul4irea ,lui 5< La8ic a lui S!M cu *10 ,<rin co"iere .n D) ,8e"lasri la stNnga 9i a8unare ,De"lasamentul ob4inut se a8un la ,a8resa ini4ial *'1: a88 8i,*10 ,Noul "unct este cu *10 mai ,8e"arte .n memoria 8e ecran mov es:68i7,al ,<une "unctul loo" 3v! ,Ie"et 8e 2) ori en8m Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ %&' %&' (), 0(000+, (8resa segmentului ecran mo8 !* ?S, () ,.n ?S

mov s/l s/l a88 a88

8x,b" 8x,D b",@ b",8x 8i,b"

liniev x!,F!,lung,culoarea liniev 10,!10,*0,! o"rire: #m" ?ND Start "e observ c n macroinstruciunea de trasare a unei linii verticale e!ist o bucla cu eticheta ,v1. ceasta este declarat cu directiva L(<AL LB1, astfel c dac este utilizat n mai multe locuri, la e!pandrile respective simbolul va cpta automat denumiri diferite. odul de lucru P 1+.+ "e va relua programul de desenare a unui dreptunghi din lucrarea precedent $+ 11.0% folosind macroinstruciuni. o"rire

L=

P 1+.- "e va scrie un program care s traseze un triunghi dreptunghic isoscel cu ipotenuza orizontal i unul cu ipotenuza oblic folosind macroinstruciuni pentru linii oblice , orizontale i verticale. P 1+.0 "e va relua programul de afiare a unor dreptunghiuri aleatoare cu parametri din memorie, prezentat n lucrarea precedenta $+ 11.B% folosind macroinstruciuni. 1+.0 Alte $acilit4i de macroasamblare 1!ist o serie de directive suplimentare de macroasamblare care permit un formalism de nivel crescut al scrierii fiierului surs, ls(nd macroasamblorului sarcina e!pandrii la nivel de limbaj de asamblare obinuit. Dei aceste faciliti sunt foarte puternice, ele sunt destul de rar necesare, datorit posibilitilor de integrare a programelor scrise n limbaj de asamblare n programe scrise n limbaj de nivel nalt sau mediu care pot prelua partea formal. 3om da n continuare, succint, numai c(teva e!emple de astfel de faciliti. 1le depind totui de implementare i se recomand consultarea documentaiei asamblorului de care se dispune pentru a vedea forma sintactic i toate opiunile prezente. :acrodefiniia 91+< este folosit atunci c(nd corpul macroinstruciunii respective trebuie transcris de mai multe ori. 8orma sintactic obisnuit este urmtoarea) 91+< e!presie 'orpul macro care se va repeta 1;D: 'a efect, instruciunile din corp se vor repeta de un numr de ori egal cu valoarea e!presiei. 1!presia poate fi un numr, un simbol care a fost asignat numeric anterior, sau poate fi o structur mai comple!a aritmetica sau logica. -n macroinstruciuni i e!presii se admit diversi operatori cum ar fi c $substituire%, ^F $ir de caractere pentru te!te%, b $ir de caractere%, \ $e!presie%, precum i structuri de tip #8d1,"1d1;D#8. lte definiii utile n macroinstruciuni sunt #9+ $repetare cu parametri% i #9+' $repetare cu parametru ir%. :acroinstruciunile pot fi imbricate $se poate chema o macroinstruciune din corpul alteia% i admit recursivitate - o macroinstruciune se poate chema pe ea insi de atatea ori c(te argumente se afl n lista de apel. 1le pot fi de asemenea anulate pe parcursul unui program pentru eliberarea memoriei QheapQ $cu directiva +?9S1% sau redefinite. 1ste admis de ctre unele asambloare chiar i folosirea unui nume rezervat pentru numirea unei macroinstruciuni, apr(nd ns un mesaj de avertizare. LB

"e recomand ca alte elemente ale limbajului de asamblare s fie consultate n documentaia asamblorului cu care se lucreaz, ele fiind utile atunci c(nd se scriu programe deosebit de lungi i comple!e e!clusiv n limbaj de asamblare.

A=5HA 1 S5TUL "5 I=ST2U<ZIU=I AL5 I<2(P2(<5S(A25L(2 I=T5L >D%>? N= ("UL 25AL SAU EI2TUAL >D>?.
A 1.1 =ota4ii' conBen4ii ;otaiile folosite n continuare sunt urmtoarele) (peranzi) - dst) operandul destinaie $al crui loc va fi ocupat de rezultatul instruciunii% - src) operandul surs $care va rm(ne neschimbat n urma instruciunii% "ate numerice &imediate)) - de K bii - n) 7..788h.;otaie echivalent8 imm>H - de 1E bii - nn) 7..78888h.;otatie echivalent) imm1?H - de 60 bii - nnnn)7..788888888h. ;otaie echivalent) imm-+H -pentru salturi relative se folosesc notaiile) rel>'rel1?'rel-+ 2egistre) - de K bii - r>) ,, @, *,, *@, ',, '@, D,, D@H - de 1E bii - r1?) C, *C, 'C, DC, "#, D#, "+, *+,8H - de 60 bii -r-+) 1 C,1*C,1'C,1DC,1"#,1D#,1"+,1*+,18H - registre de segment - rs) D", 1", "", '". emoria) - m>) 'oninutul unei locaii de memorie adresabil prin adresa efectiv H - m1?) 'oninutul a dou locaii consecutive de memorie, form(nd un operand de 1E bii $0 octei%. dresa efectiv indic octetul mai puin semnificativ al operandului, iar adresa efectiv N1 indic octetul mai semnificativH - m-+) 'oninutul a patru locaii consecutive de memorie, form(nd un operand de 60 bii $= octei% dresa efectiv indic octetul mai puin semnificativ al operandului, iar adresa efectiv N6 indic octetul mai semnificativ. (bserBa4ie) (peranzii de -+ de bi4i e%ist numai pentru procesoare ncepCnd cu Intel >D->?. Dac sunt folosii n programul surs astfel de operanzi, este obligatorie directiva .->? n preambulul programului. LE

A1.+. Instruc4iuni de trans$er A1.+.1. Trans$eruri cu memoria !i registrele8 (E - copierea datelor nemonic) (E dst' src Ac4iune) QdstQ ia valoarea QsrcQ. dst [ src. (peranzi) dst) rK, r 1E, rs, mK, m 1EH src) rK, r1E, rs, mK, m1E, n, nnH 2estric4ii) nu sunt posibile transferuri de tip) - :23 rs, rs - :23 rs, nn - :23 cs,T - :23 m, m. (ESH - transfer cu e!tensia de semn ntr-un format mai mare nemonic) (ESH dst'src. Ac4iune) dst[ src. 2perandul surs este transferat ntr-un registru cu dimensiune mai mare, pstr(nd semnul prin transferul bitului de semn n poziia cea mai semnificativ a operandului destinaie. (peranzi) src) mK,rK RF dst)r1E,r60H src) m1E,r1E RF dst)r60. (ESQ - transfer cu completare cu zerouri ntr-un format mai mare nemonic) (ESQ dst'src. Ac4iune) dst[ src. 2perandul surs este transferat ntr-un registru cu dimensiune mai mare, complet(nd cu zerouri biii suplimentari din operandului destinaie. (peranzi) src) mK,rK RF dst)r1E,r60H src) m1E,r1E RF dst)r60. H<@I - interschimbare ntre registre sau ntre un registru i memorie nemonic) H<@I dst' src. Ac4iune) "e interschimb coninuturile dst i src. dst [ srcH src [ dst. LJ

(peranzi) dst) rK, r1E,r60H src) rK, r1E, mK, m1E,m60. 2estric4ii) ;u e!ist instruciuni de tip) - C'@S rs, rs - C'@S cs, T. Eariant) C'@S dst - interschimb cu acumulatorul implicit 1 C $n funcie de mrimea dst%.

,, C sau

HLAT - translatare n , cu baza *C Ac4iune) , [ U*C N ,V. -n registrul , se ncarc coninutul locaiei de memorie a crei adres efectiv este dat de suma dintre *C i chiar ,. dresa de segment este data de D". L5A - calculul i ncrcarea adresei efective a unei variabile ntr-un registru general Ac4iune) r [ 1$mem%. nemonic) L5A r, mem. (peranzi) r) r1E, r60H mem) m1E,m60. Dac mrimile operanzilor sunt diferite, se fac automat trunchieri la mrimea operandului cel mai mic. LISOLSSOL"SOL5SOL*S - -ncarc un pointer $ca o adresa logic de 60 de bii% din memorie, de la adresa nn, ntr-o pereche format dintr-un registru de segment i un registru de 1E bii. nemonic) L"S r1?'2S8nn; LSS r1?'2S8nn; etc. Ac4iune) ,D" r1E, nn) 91E,[U9")nnV,91E@[U9")nnN1V,D",[U9")nnN0V,D"@ [ U9")nnN6V ,"" r1E, nn) 91E,[U9")nnV,91E@[U9")nnN1V,"",[U9")nnN0V, ""@ [ U9")nnN6V ,1" r1E, nn) 91E,[U9")nnV,91E@[U9")nnN1V,1",[U9")nnN0V,D1@ [ U9")nnN6V ,8" r1E, nn) 91E,[U9")nnV,91E@[U9")nnN1V,8",[U9")nnN0V, 8"@ [ U9")nnN6V ,S" r1E, nn) 91E,[U9")nnV,91E@[U9")nnN1V,S",[U9")nnN0V,S"@[ U9")nnN6V unde r1E este un registru de 1E bii de uz general, 9" este un registru de segment $D","",1",8" sau S"% iar nn este un numr de 1E bii.

LK

'bservaie: #nstruciunile ,"", ,S", ,8" nu apar la procesoare anterioare lui K76KE $nici nu e!istau registrele de segment 8" i S"%, de aceea, n cazul folosirii lor, n partea initial a programului trebuie introdus directiva .6KE. LA@* - citirea indicatorilor de condiii $octetul inferior al registrului 8% n @ Ac4iune) @ [ 8e @JR"8 $flagul de semn, 1 dac este minus, 7 dac este plus%H @ERM8 $flagul de zero, 1 dac este 7, 7 dac nu este 7%H @BR7 H @=R 8 $flagul de transport au!iliar de la cei = bii inferiori ai unui rezultat%H @6R7 H @0R+8 $flagul de paritate, 1 dac este par, 7 dac este impar%H @1R#8 $flagul de intreruperi, 1 dac dac ntreruperile sunt activate, 7 dac nu%H @7R'8 $flagul de transport 1 dac e!ista transport de la rezultat%H "tructura octetului inferior al registrului indicatorilor de condiii 8 este) " M ! ! + ! '

SA@* - "alvare @ n registrul de flaguri. Ac4iune) 8e [ @ "8R @J $flagul de semn, 1 dac este minus, 7 dac este plus%H M8R @E $flagul de zero, 1 dac este 7, 7 dac nu este 7%H 8R @= $flagul de transport au!iliar de la cei = bii inferiori ai unui rezultat%H +8R @0 $flagul de paritate, 1 dac este par, 7 dac este impar%H #8R @1 $flagul de intreruperi, 1 dac dac ntreruperile sunt activate, 7 dac nu%H '8R @7 $flagul de transport 1 dac e!ista transport de la rezultat%H *itii @B i @6 trebuie s fie 7. A1.+.+. Trans$eruri cu stiBa PUS@ - salvarea datelor n stiv nemonic) PUS@ src. (perand r1E, r60, m1E, m60. LL

Ac4iune) +entru operand de 1E bii) "+ [ "+-0H U"+V [ src1 $octetul inferior al sursei%H U"+N 1V [ src0 $octetul superior al sursei%H +entru operand de 60 bii) "+ [ "+-=H U"+V [ src1 $octetul inferior al sursei%H U"+N 1V [ src0H U"+N0V [ src6H U"+N 6V [ src= $octetul superior al sursei%. "escriere) #ndicatorul de stiv este decrementat cu un numr egal cu numrul de octei ai operandului, dup care operandul este salvat n stiv ncep(nd de la adresa coninut acum n indicatorul de stiv. 'bservaie) 1ste permis i salvarea din memorie $0 sau = locaii consecutive, adresate cu unul din modurile de adresare %. P(P - aducerea datelor din stiv nemonic) P(P dst. Ac4iune) +entru operand de 1E bii) dste U"+VH dsth [ U"+N 1VH "+ [ "+N0. +entru operand de 60 bii) "+ [ "+-=H dst1[ U"+V $octetul inferior al sursei%H dst0 [ U"+N 1VH dst6 [ U"+N0VH dst= [ U"+N6V $octetul superior al sursei%. (perand) r1E $cu e!cepia lui '"%,r60, m1E,m60 "escriere) 9egistrul sau locaiile de memorie specificate de operand se ncarc cu coninutul locaiilor de stiv a cror adresa de start se afl n indicatorul de stiv. poi indicatorul de stiv este incrementat cu un numr egal cu numrul de octei ai operandului. 2bservaie) 1ste permis i aducerea din stiv n locaii de memorie $0 sau = locaii consecutive, adresate cu unul din modurile de adresare%. PUS@*'PUS@*" - salvarea registrului indicatorilor de condiii n stiv, 177

respectiv a registrului e!tins al indicatorilor de conditii nemonic ) +?"@8 Ac4iune) "+ [ "+-0 U"+V [ 81 $octetul inferior al registrului 8%H U"+N1V [ 80 $octetul superior al registrului 8%. nemonic) +?"@8D Ac4iune) "+ [ "+-=H U"+V [ 181 $octetul inferior al registrului 18%H U"+N1V [ 180H U"+N0V [ 186H U"+N6V [ 18= $octetul superior al registrului 18%. P(P*' P(P*" - aducerea indicatorilor de condiii din stiv , respectiv a registrului e!tins al indicatorilor de conditii. nemonic ) P(P* Ac4iune) 81 [ U"+V $octetul inferior al registrului 8%H 8h [ U"+N1V $octetul superior al registrului 8%H "+ [ "+N0. nemonic ) P(P*" Ac4iune) 81 [ U"+V $octetul inferior al registrului 18%H 80 [ U"+N1V H 86 [ U"+N0V H 8= [ U"+N6V $octetul superior al registrului 18%H "+ [ "+N=. PUS@A,PUS@A"- salvarea tuturor registrelor n stiv nemonic ) PUS@A Ac4iune) "+ [ "+-1EH U"+V [ C,'C,DC,*C,"+$valoarea initiala%,*+,"#,D#. nemonic ) PUS@A" Ac4iune) "+ [ "+-60H U"+V [ 1 C,1'C,1DC,1*C,1"+$valoarea initiala%,1*+,1"#,1D#. P(PA,P(PA"- readucerea tuturor registrelor din stiv nemonic ) P(PA Ac4iune) U"+V [ C,'C,DC,*C,"+$nu se modific%,*+,"#,D#H "+ [ "+N1E. nemonic ) P(PA" 171

Ac4iune) U"+V [ 1 C,1'C,1DC,1*C,1"+$nu se modific%, 1*+,1"#,1D#H "+ [ "+N60.

A1.+.-. Trans$eruri cu porturile I= - citire din portul n sau a crui adresa este n DC nemonic) I= dst, src. Ac4iune) , [ UportVK sau C [ UportV1E sau 1 C [ UportV60 . , [ portUDCVK sau C [ portUDCV1E sau 1 C [ portUDCV60 . 2peranzi) port) n,UDCV. 2bservaii) "e poate face citire pe K bii $n ,, dintr-un port de K bii%, pe 1E bii $n C, dintr-un port de 1E bii% sau pe 60 bii $n 1 C, dintr-un port de 60 bii%. -n cazul n care adresa portului este coninutul lui DC, aceasta are 1E bii, deci sunt posibile EBB6E porturi. Dac adresa este un numr n, aceasta are numai K bii, deci sunt posibile 0BE de porturi. (UT - scriere n portul n sau a crui adresa este n DC nemonic) (UT dst, src Ac4iune) UportVK [ , sau UportV1E [ C sau UportV60 [ 1 C portUDCVK [ , sau portUDCV1E [ C sau portUDCV60 [ 1 C 2peranzi) port) n,UDCV 2bservaii) "e poate face citire pe K bii $n ,, dintr-un port de K bii%, pe 1E bii $n C, dintr-un port de 1E bii% sau pe 60 bii $n 1 C, dintr-un port de 60 bii%. -n cazul n care adresa portului este coninutul lui DC, aceasta are 1E bii, deci sunt posibile EBB6E porturi. Dac adresa este un numr n, aceasta are numai K bii, deci sunt posibile 0BE de porturi. A1.+.0. Instruc4iuni de trans$er de !iruri

170

L("SA' L("S.' L("S"'ST(SA' ST(S.'ST(S" nemonic) Ac4iune) nemonic) Ac4iune) L("SA - Nncarc un octet de la D")"# n , ,[ U"#VH "#[ "# N1 dac D8R7, "#[ "#-1 dac D8R1. L("S. - -ncarc un cuv(nt de la D")"# n C ,[ U"#VH @[ U"#N1VH "#[ "# N0 dac D8R7, "#[ "#-0 dac D8R1. L("S" - -ncarc un dublucuvant de la D")"# n 1 C 1 C7[ U"#V $octetul inferior al 1 C%H 1 C1[ U"#N1VH 1 C1[ U"#N0VH 1 C1[ U"#N6V $octetul superior al 1 C%H "#[ "# N= dac D8R7, "#[ "#-= dac D8R1. ST(SA - -ncarc , la 1")D# UD#V[ , D#[ D# N1 dac D8R7, D#[ D#-1 dac D8R1 ST(S. - -ncarc , la 1")D# UD#V[ ,H UD#N1V[ @H D#[ D# N0 dac D8R7, D#[ D#-0 dac D8R1. ST(S" - -ncarc un dublucuvant din 1 C la 1")D# UD#V[ 1 C7 $octetul inferior al 1 C%H UD#N1V[ 1 C1 H UD#N0V[ 1 C0 H UD#N6V [ 1 C6 $octetul superior al 1 C%H D#[ D# N= dac D8R7, D#[ D#-= dac D8R1.

nemonic) Ac4iune)

nemonic) Ac4iune) nemonic) Ac4iune)

nemonic) Ac4iune)

nemonic) L("S dst'src - :ut un octet, doi octei sau = octei de la adresa la adresa D")"# n ,, C sau 1 C. ceasta instruciune este echivalenta cu ,2D"*,,2D"4 i ,2D"D care nu au ns operanzi e!plicii.

176

nemonic) ST(S dst'src - :ut coninutul lui ,, C sau 1 C n memorie la adresa 1")D#. ceasta instruciune este echivalent cu "<2"*,"<2"4 i "<2"D care nu au ns operanzi e!plicii. +entru instruciunile de transfer ,2D"*, ,2D"4 i ,2D"4, sursa este locaia de memorie cu adresa efectiva data de registrul inde! sursa "# i adresa de segment dat de D". +entru instruciunile de transfer "<2"*, "<2"4 i "<2"D destinaia este locaia de memorie cu adresa efectiva data de registrul inde! destinaie D# i adresa de segment dat de 1". #n urma efecturii unei astfel de instruciuni, registrul inde! "# respectiv D# se modific n funcie de starea flagului D8 $de direcie%. Daca D8 este 7, registrul inde! va fi incrementat cu 1 la ,2D"* i "<2"*, cu 0 la ,2D"4 i "<2"4 i cu = la ,2D"D i "<2"D . Daca D8 este 1, registrul inde! va fi decrementat cu 1, 0, respectiv cu =. 9egistrul general implicit este , la transferul de un octet, C la transferul de doi octei i 1 C la transferul pe = octei. (ES' (ESA' (ES.' (ES"

ceste instruciuni combin instruciunile ,2D"* i "<2"*, respectiv ,2D"4 i "<2"4, fr a afecta , sau C. "egmentul destinaie este ntotdeauna 1". "egmentul surs implicit este D", dar poate fi i altul specificat n adresa surs. nemonic) Ac4iune) (ESA - :ut un octet de la adresa D")"# la adresa 1")D# UD"V[ U"#VH "#[ "# N1 dac D8R7, "#[ "#-1 dac D8R1H D#[ D# N1 dac D8R7, D#[ D#-1 dac D8R1. (ES. - :ut un cuv(nt de la adresa D")"# la adresa 1")D# UD#V[ U"#VH UD#N1V[ U"#N1VH "#[ "# N0 dac D8R7, "#[ "#-0 dac D8R1H D#[ D# N0 dac D8R7, D#[ D#-0 dac D8R1. (ES" - :ut un dublu-cuvant $60 de bii% de la adresa

nemonic) Ac4iune)

nemonic) D")"# la adresa 1")D# Ac4iune) UD#V[ U"#VH UD#N1V[ U"#N1VH

17=

UD#N0V[ U"#N0VH UD#N6V[ U"#N6VH "#[ "# N= dac D8R7, "#[ "#-= dac D8R1H D#[ D# N= dac D8R7, D#[ D#-= dac D8R1. nemonic) (ES dst'src - :ut un octet, doi octei sau = octei de la adresa "# la adresa 1")D#. 2peranzii sunt simboluri de o anumit lungime, declarai anterior n program. ceast instruciune este echivalent cu :23"*, :23"4 i :23"D care nu au ns operanzi e!plicii. I=S' I=SA' I=S.' I=S" nemonic) I=SA - -ncarc n memorie la 1")D# coninutul portului de K bii a crui adres este n DC Ac4iune) UD#V[portUDCVH D#[ D# N1 dac D8R7, D#[ D#-1 dac D8R1. nemonic) I=S. - -ncarc n memorie la 1")D# coninutul portului de 1E bii a crui adres este n DC Ac4iune)UD#V [ portUDCV7 $octetul inferior al portului a crui adresa e n DC%H UD#N1V[ portUDCV1$octetul superior al portului a crui adresa e n DC%H D#[ D# N0 dac D8R7, D#[ D#-0 dac D8R1. nemonic) I=S" - -ncarc n memorie la 1")D# coninutul portului de 60 bii a crui adres este n DC Ac4iune) UD#V[ portUDCV7 $octetul inferior al portului a crui adresa e n DC%H UD#N1V[portUDCV1H UD#N0V[portUDCV0H UD#N6V[ portUDCV6 $octetul superior al portului a crui adresa e n DC%H D#[ D# N= dac D8R7, D#[ D#-= dac D8R1. nemonic) I=S dst'src - :ut un octet, doi octei sau = octei din portul a crui adresa este coninut n DC, ntr-un registru sau n memorie la adresa 1")D#. ceasta instruciune este echivalenta cu instruciunile #;"*, #;"4 i #;"D care nu au ns operanzi e!plicii. (UTS' (UTSA' (UTS.' (UTS"

17B

nemonic) (UTSA - -ncarc din memorie de la D")"# n portul de K bii a crui adresa este n DC Ac4iune) portUDCV[ U"#VH "#[ "# N1 dac D8R7, "#[ "#-1 dac D8R1. nemonic) (UTS. - -ncarc din memorie de la D")"# n portul de 1E bii a crui adres este n DC. Ac4iune) portUDCV7[ U"#V $octetul inferior al portului a crui adresa e n DC%H portUDCV1[ U"#N1V $octetul superior al portului a crui adresa e n DC%H "#[ "# N0 dac D8R7, "#[ "#-0 dac D8R1. nemonic) I=S" - -ncarc din memorie de la D")"# n portul de 60 bii a crui adres este n DC Ac4iune) portUDCV7[ U"#V $octetul inferior al portului a crui adresa e n DC%H portUDCV1[ U"#N1V H portUDCV0[ U"#N0V H portUDCV6[ U"#N6V $octetul superior al portului a crui adresa e n DC%H "#[ "# N= dac D8R7, "#[ "#-= dac D8R1. nemonic) (UTS dst'src - :ut un octet, doi octei sau = octei n portul a crui adresa este coninut n DC, dintr-un registru sau din memorie de la adresa D")"#. ceasta instruciune este echivalent cu instruciunile 2?<"*, 2?<"4 i 2?<"D care nu au ns operanzi e!plicii. Pre$i%ul 25P #nstruciunile de transfer de iruri ,2D", ,2D"!, "<2", "<2"!, :23", :23"!, #;", #;"!, 2?<", 2?<"! $unde ! este *,4 sau D% pot fi precedate de prefi!ul 25P, care cere procesorului s repete instruciunea pe care o precede p(n c(nd 'C devine 7 $prin decrementare automat%. #n cazul instruciunilor ,2D"! se foloseste ns de regula prefi!ul ,22+, deoarece cu 91+ s-ar rescrie n mod inutil registrul ,, C sau 1 C de 'C ori.

17E

A1.-. Instruc4iuni de calcul 1!ist urmtoarele tipuri de operaii efectuate de ,?) - aritmeticeH - aritmetice specialeH - logiceH - deplasriH - rotaii. <oate acestea afecteaz corespunztor unul sau mai muli din urmtorii indicatori de condiii) - <* $'arrA 8lag% - indicator de transport - reflect transportul n e!terior al bitului cel mai semnificativ al rezultatului operaiilor aritmetice. cest indicator poate fi folosit n cazul adunrii sau scderii numerelor pe mai muli octei, semnific(nd n primul caz transport la adunare i n al doilea caz mprumut la scdere. #ndicatorul '8 nu este modificat de instruciuni de incrementare i decrementare. - P* $+aritA 8lag% - indicator de paritate - este poziionat pe 1 dac rezultatul are un numr par de bii 1. - A* $ u!iliarA 'arrA 8lag% - indicator de transport au!iliar - este poziionat n 1 dac a fost transport de la nivelul inferior la nivelul superior al semioctetului rezultatului $de la bitul 6 la bitul =%. cest indicator se folosete n programele de calcule n aritmetica zecimal. - Q* $Mero 8lag% - indicatorul de zero - este poziionat n 1 dac rezultatul operaiei a fost zero. - S* $"ign 8lag% indicatorul de semn - este poziionat n 1 dac cel mai semnificativ bit al rezultatului $:"*% este 1, adic n reprezentarea numerelor n '0 $complement fa de 0% rezultatul este negativ. - (* $2verflo5 8lag% - indicator de depire aritmetic $a gamei de valori posibil de reprezentat% - este poziionat n 1 dac dimensiunea rezultatului depete capacitatea locaiei de destinaie i a fost pierdut un bit $la valorile cu semn se altereaz semnul%. A1.-.1. Instruc4iuni aritmetice !i logice (bserBa4ii genera1e8 - 2peranzi) dst) rK, r1E, r60, mK, m1E, m60 src) rK, r1E, r60, mK, m1E, m60, n, nn, nnnn 17J

- 2peraiile sunt posibile pe K, 1E sau 60 bii $sursa i destinaia av(nd mrimi compatibile% - "ursa i destinaia nu pot fi concomitent locaii de memorie - dresarea imediat $specificarea valorii numerice a operandului% este posibil numai pentru surs. - "unt posibile adunri, scderi i nmuliri cu semn av(nd operandul destinaie registru sau memorie pe 1E sau 60 de bii, i operandul sursa o valoare imediat de K bii. #n acest caz, operandul de K bii este e!tins la 1E sau 60 de bii cu pstrarea semnului $bitul cel mai semnificativ, cel de semn, este copiat din pozitia a K-a n toi biii p(n la poziia 1E, respectiv 60%. ceasta posibilitate e!ist i pentru operaiile logice, cu e!cepia instruciunii <1"<. A"< dst,src - dunare cu carrA $transport% Ac4iune) dst [ dst N src N '8H A"" dst,src - dunare Ac4iune) dst [ dst N srcH SUA dst,src - "cdere Ac4iune) dst [ dst - srcH SAA dst,src - "cdere cu Qborro5Q $mprumut% Ac4iune) dst [ dst - src - '8H I=< dst - #ncrementare Ac4iune) dst [ dst N 1H ;u este afectat '8. "5< dst - Decrementare Ac4iune) dst [ dst - 1H ;u este afectat '8. =5I dst - ;egare aritmetic Ac4iune) dst [ - dst $complementare fa de doi% Descriere) "e obine operandul cu semn schimbat n complement fa de 0. '8 este setat automat, cu e!cepia cazului c(nd operandul este 7. =(T dst - 'omplementare fa de 1 Ac4iune) dst [ 788h - dst H pentru operand de K bii dst [ 78888h - dst H pentru operand de 1E bii dst [ 788888888h - dst H pentru operand de 60 bii Descriere) #nstruciunea ;2< inverseaz operandulH orice 1 devine 7 i viceversa. 17K

;u sunt afectai indicatorii de condiii.

UL src - -nmulirea fr semn lui ,, C sau 1 C cu un numar. Ac4iunea depinde de mrimea operandului src, lu(nd urmatoarele forme) - src de K bii) C [ , T srcKH src) rK,mKH Dac @ R 7 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8. -src de 1E bii) DC) C [ C T src1EH src) r1E,m1EH Dac DC R 7 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8. - src de 60 bii) 1DC) 1 C [ 1 C T src60H src) r60,m60H Dac 1DC R 7 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8. I UL $dst,% src - -nmulirea cu semn a lui ,, C , 1 C sau a altui registru cu un numr. Ac4iunea depinde de operandul destinaie i de marimea operandului src. #n cazul n care destinaia este acumulatorul ,, C sau 1 C se obine rezultatul complet, chiar dac apare flagul 2verflo5, deoarece rezultatul va fi memorat cu precizie dubl fa de a operanzilor) - src de K bii) C [ , T srcKH src) rK,mKH Dac @ R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8. - src de 1E bii) DC) C [ C T src1EH src) r1E,m1EH Dac DC R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8. - src de 60 bii) 1DC) 1 C [ 1 C T src60H src) r60,m60H Dac 1DC R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8. "pre deosebire de nmulirea numerelor fr semn cu instruciunea :?,, n cazul instruciunii #:?, este posibil ca denmulitul s fie i alt registru n afar de 17L

acumulator, iar sursa s fie o valoare numeric imediat. #n acest caz ns, dac rezultatul are mai multi bii dec(t registrul care conine denmulitul, se pierd bitii care depesc lrgimea acestuia. Ac4iunea este urmtoarea) - cu dst de 1E bii) #:?, dst,src dst [ dst T srcH $dstR r1EH srcRr1EIm1E IimmKIimm1E%H Dac DC R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8. Dac src este de tip immK, acesta se e!tinde cu semn p(n la lungimea dst. - cu dst de 60 bii) #:?, dst,src dst [ dst T srcH $dstR r60H srcRr60Im60 IimmKIimm60%H Dac DC R 7 sau @ R 88 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i 28 [ '8. Dac src este de tip immK, acesta se e!tinde cu semn p(n la lungimea dst. "IE src - -mprirea fr semn a acumulatorului cu un registru sau locaie de memorie. Ac4iune) - dac src este de K bii) , [ CIsrcK $c(tul mpririi%H , [ C \ srcK $restul mpririi%H src) rK,mK. - dac src este de 1E bii) C [ DC ) CIsrclE $c(tul mpririi%H DC [ DC ) C \ srclE $restul mpririi%H src) r1E,m1E. - dac src este de 60 bii) 1 C [ 1DC ) 1 CIsrclE $c(tul mpririi%H 1DC [ 1DC ) 1 C \ srclE $restul mpririi%H src) r60,m60. 2bservaii) Dac rezultatul $c(tul% nu ncape n registrul destinaie ,, C respectiv 1 C, sau mpritorul este 7, se genereaz -ntrerupere 7 $D1 - Divide 1rror% i se sare automat din program. De aceea trebuie fcuta o evaluare prealabil a domeniului de valori ale rezultatului i trebuie folosit un registru destinaie corespunztor. Dac c(tul este subunitar, el este ajustat la 7. 117

#ndicatorii de condiii sunt nedefinii.

I"IE src - -mprirea cu semn a acumulatorului cu un registru sau locaie de memorie. Ac4iune) - dac src este de K bii) , [ CIsrcK $c(tul mpririi%H , [ C \ srcK $restul mpririi%H src) rK,mK. - dac src este de 1E bii) C [ DC ) CIsrclE $c(tul mpririi%H DC [ DC ) C \ srclE $restul mpririi%H src) r1E,m1E. - dac src este de 60 bii) 1 C [ 1DC ) 1 CIsrclE $c(tul mpririi%H 1DC [ 1DC ) 1 C \ srclE $restul mpririi%H src) r60,m60. 2bservaie) Dac rezultatul $c(tul% nu ncape n registrul destinaie ,, C respectiv 1 C, sau mpritorul este 7, se genereaz ntrerupere 7 $D1 - Divide 1rror% i se sare automat din program. De aceea trebuie fcut o evaluare prealabil a domeniului de valori ale rezultatului i trebuie folosit un registru destinaie corespunztor. Dac c(tul este subunitar, el este ajustat la 7. "emnul restului este acelai cu al mpritorului. #ndicatorii de condiii sunt nedefinii. <A. - 'onversie de la *Ate $K bii% din , la 4ord $1E bii% n C, cu pstrare semn. Ac4iune) ,J R 7 RF @ [ 7H ,J R 1 RF @ [ 788h. *itul cel mai semnificativ al lui , este copiat n toi biii registrului @. #ndicatorii de condiii nu sunt afectai. <." - 'onversie de la 4ord $1E bii% din C la D5ord $60 bii% n DC) C, cu pstrare semn. Ac4iune) C1B R 7 RF DC [ 7H ,1B R 1 RF DC [ 78888h. *itul cel mai semnificativ al lui C este copiat n toi biii registrului DC. 111

#ndicatorii de condiii nu sunt afectai. <."5 - 'onversie de la 4ord $1E bii% la D5ord $60 bii% n 1 C, cu pstrare semn. Ac4iune) 1 C1B R 7 RF 1 C1E ..1 C61R 1 H 1 C1B R 1 RF 1 C1E ..1 C61R 1 . *itul cel mai semnificativ al lui C este copiat n toi bitii jumtii superioare a lui 1 C. #ndicatorii de condiii nu sunt afectai. <"[ - 'onversie de la D5ord $60 bii% n 1 C la X5ord $E= bii% n 1DC)1 C, cu pstrare semn. Ac4iune) 1 C61 R 7 RF 1DC [ 7H ,61 R 1 RF 1DC [ 788888888h. *itul cel mai semnificativ al lui 1 C este copiat n toi bitii registrului 1DC. #ndicatorii de condiii nu sunt afectai. A=" dst,src - "# logic pe bit Ac4iune) bn$dst% [ bn$dst% ;D bn$src% H dst) rK,r1E,r60,mK,m1E,m60H src) rK,r1E,r60,mK,m1E,m60,immK,imm1E,imm60. Descriere) 8iecare bit al rezultatului instruciunii ;D este un 1 dac ambii bii corespunztori ai operanzilor sunt 1H altminteri, devine un 7. "ursa i destinaia trebuie s fie de dimensiuni egale. 1ste posibil ca sursa s fie o valoare imediat de 1 octet iar destinaia s fie de 0 sau = octei, caz n care numarul sursa va fi e!tins cu semn p(n la valoarea destinaiei. ;u se admite ca ambii operanzi s fie locatii de memorie. (2 dst,src - " ? logic pe bit Ac4iune) bn$dst% [ bn$dst% 29 bn$src% H dst) rK,r1E,r60,mK,m1E,m60H src) rK,r1E,r60,mK,m1E,m60,immK,imm1E,imm60H Descriere) #nstruciunea 29 calculeaz " ? al celor doi operanzi i rezultatul este plasat n primul operand. 8iecare bit al rezultatului este 7 dac ambii bii corespunztori ai operanzilor sunt 7H altminteri, fiecare bit este 1. "ursa i destinaia trebuie s fie de dimensiuni egale. 1ste posibil ca sursa s 110

fie o valoare imediat de 1 octet iar destinaia s fie de 0 sau = octei, caz n care numarul sursa va fi e!tins cu semn p(n la valoarea destinaiei. ;u se admite ca ambii operanzi s fie locatii de memorie. H(2 dst,src - " ? 1C',?"#3 logic pe bit Ac4iune) bn$dst% [ bn$dst% C29 bn$src% H dst) rK,r1E,r60,mK,m1E,m60H src) rK,r1E,r60,mK,m1E,m60,immK,imm1E,imm60. Descriere) #nstruciunea C29 calculeaz " ? 1C',?"#3 al celor doi operanzi. 8iecare bit al rezultatului este 1 dac biii corespunztori ai operanzilor sunt diferiiH fiecare bit este 7 dac biii corespunztori sunt identici. 9ezultatul nlocuiete primul operand. "ursa i destinaia trebuie s fie de dimensiuni egale. 1ste posibil ca sursa sa fie o valoare imediat de 1 octet iar destinaia s fie de 0 sau = octei, caz n care numarul sursa va fi e!tins cu semn p(n la valoarea destinaiei. ;u se admite ca ambii operanzi s fie locatii de memorie. < P dst,src - 'omparaie aritmetic $prin scdere% Ac4iune) dst-srcH dst) rK,r1E,r60,mK,m1E,m60H src) rK,r1E,r60,mK,m1E,m60,immK,imm1E,imm60. Decriere) "e face diferena ntre dst i src, fr generare rezultat - se modific doar indicatorii de condiii. "ursa i destinaia trebuie s fie de dimensiuni egale. 1ste posibil ca sursa sa fie o valoare imediata de 1 octet iar destinaia s fie de 0 sau = octei, caz n care numarul surs va fi e!tins cu semn p(n la valoarea destinaiei. ;u se admite ca ambii operanzi s fie locatii de memorie. T5ST dst,src - testare $"# fr generare de rezultat% dst) rK,r1E,r60,mK,m1E,m60H src) rK,r1E,r60,mK,m1E,m60,immK,imm1E,imm60. Descriere) #nstruciunea <1"< calculeaz Q"# logic pe bitQ de cei doi operanzi. 8iecare bit al rezultatului este 1, dac ambii bii corespunztori ai operanzilor sunt lH altminteri, fiecare bit este 7. 9ezultatul operaiei este ters i doar f1agurile sunt modificate. "ursa i destinaia trebuie s fie de dimensiuni egale. ;u se admite ca ambii operanzi s fie locaii de memorie.

116

S<AS'S<ASA'S<AS.'S<AS" - 'ompar acumulatorul cu un sir nemonic) S<AS dst Descriere - 'ompar coninutul registrului $1% C cu coninutul locaiilor de memorie $una, doua sau patru% care ncep la adresa 1")UD#V i poziioneaz corespunzator flagurile dst) mK,m1E,m60 Ac4iune) , - 1")UD#VH D#[ D#Nn dac D8R7, D#[ D#-n dac D8R1 unde nR1I0I= n funcie de dimensiunea operandului. nemonic) S<ASA - 'ompar coninutul registrului locaiei 1")D# i poziioneaz corespunzator flagurile Ac4iune) , - 1")UD#VH D#[ D#N1 dac D8R7, D#[ D#-1 dac D8R1. , cu coninutul

nemonic) S<AS. - 'ompar coninutul registrului C cu coninutul locaiilor 1")UD#V i 1")UD#N1V i poziioneaz corespunzator flagurile Ac4iune) , - 1")UD#VH @ - 1")UD#N1VH D#[ D#N0 dac D8R7, D#[ D#-0 dac D8R1. nemonic) S<AS" - 'ompar coninutul registrului 1 C cu coninutul locaiilor 1")UD#V, 1")UD#N1V, 1")UD#N0V i 1")UD#N6V i poziioneaz corespunzator flagurile. Ac4iune) 1 C1 - 1")UD#V - octetul cel mai puin semnificativ al lui 1 CH 1 C0 - 1")UD#N1V H 1 C6 - 1")UD#N0V H 1 C= - 1")UD#N6V - octetul cel mai semnificativ al lui 1 CH D#[ D#N= dac D8R7, D#[ D#-= dac D8R1. ,a aceste instruciuni operandul este ntotdeauna n segmentul 1", i nu este posibil schimbarea acestui segment. #nstruciunea S<ASA compar octetul din locaia de memorie cu adresa 1")D# cu coninutul lui , i poziioneaz indicatorii de conditii n functie de

11=

rezultatul comparrii. 9egistrul D# va fi incrementat cu 1 dac D8R7 i decrementat cu 1 dac D8R1. #nstruciunea S<AS. compar cuv(ntul punctat de locatia de memorie cu adresa 1")D# $octetul inferior fiind la aceasta adresa, iar cel superior la cea urmtoare%, cu coninutul lui C i poziioneaz indicatorii de conditii n functie de rezultatul comparrii. 9egistrul D# va fi incrementat cu 0 dac D8R7 i decrementat cu 0 dac D8R1. #nstruciunea S<AS" compar cuv(ntul punctat de locatia de memorie cu adresa 1")D# $octetul inferior fiind la aceasta adresa, iar cel superior la cea de a treia din cele care urmeaz%, cu coninutul lui 1 C i pozitioneaza indicatorii de conditii n functie de rezultatul compararii. 9egistrul D# va fi incrementat cu = dac D8R7 i decrementat cu = dac D8R1. #n conformitate cu regulile aritmeticii n complement fata de 0 $numerele negative au bitul cel mai semnificativ 1 iar scderea cu rezultat negativ d un mprumut% , dac numarul din memorie este mai mic dec(t cel din registru, indicatorii < $transport la adunare i mprumut la scadere% i S $semn% se pozitioneaza n 1 . Daca numarul din memorie este mai mare dec(t cel din cu cel din registru, indicatorii < i S se pozitioneaza n 7. Daca numarul din memorie este egal cu cel din registru, se pozitioneaza n 1 indicatorul Q. < PS' < PSA' < PS.' < PS" -compar dou seturi de locaii de memorie nemonic) < PS dst,src - 'ompara coninutul locatiilor $una, doua sau patru% care incep la adresa D")U"#V cu coninutul aceluiai numar de locatii care ncep la adresa 1")UD#V i poziioneaz corespunztor flagurile. dst,src) mK,m1E,m60. Ac4iune) D")U"#V - 1")UD#VH "#["# Nn dac D8R7, "#["#-n dac D8R1H D#[D# Nn dac D8R7, D#[D#-n dac D8R1 unde nR1I0I= n funcie de dimensiunea operanzilor.

nemonic) < PSA - 'ompar coninutul locaiei D")U"#V cu coninutul locaiei 1")UD#V i pozitioneaz corespunztor flagurile Ac4iune) D")U"#V - 1")UD#VH "#["# N1 dac D8R7, "#["#-1 dac D8R1H D#[D# N1 dac D8R7, D#[D#-1 dac D8R1. 11B

nemonic) < PS. - 'ompar coninutul locatiilor D")U"#V i D")U"#N1V cu coninutul locaiilor 1")UD#V i 1")UD#N1V i poziioneaz corespunztor flagurile Ac4iune) D")U"#V - 1")UD#VH D")U"#N1V - 1")UD#N1VH "#["# N0 dac D8R7, "#["#-0 dac D8R1H D#[D# N0 dac D8R7, D#[D#-0 dac D8R1.

nemonic) < PS" - 'ompar coninutul a patru locaii care ncep la adresa D")U"#V cu coninutul a patru locatii care ncep la adresa 1")UD#V i pozitioneaz corespunztor flagurile Ac4iune) D")U"#V - 1")UD#VH D")U"#N1V - 1")UD#N1VH D")U"#N0V - 1")UD#N0VH D")U"#N6V - 1")UD#N6VH "#["# N0 dac D8R7, "#["#-0 dac D8R1H D#[D# N0 dac D8R7, D#[D#-0 dac D8R1. ,a aceste instruciuni operandul al doilea este ntotdeauna n segmentul 1", i nu este posibila schimbarea acestui segment. +rimul operand este implicit n segmentul D", dar se acest segment poate fi schimbat $ prin Qsegment override bAteQ%. +entru instruciunea de comparaie ':+"* primul operand este locaia de memorie cu adresa efectiv dat de registrul inde! surs "# i adresa de segment dat de D" iar al doilea operand este locaia de memorie cu adresa efectiv data de registrul inde! destinaie D# i adresa de segment data de 1". +entru instruciunea de comparatie ':+"4 primul operand este dat de locatiile de memorie cu adresele D")U"#V $octetul inferior% i D")U"#N1V $octetul superior% iar al doilea operand este dat de locatiile de memorie cu adresele 1")UD#V $octetul inferior% i 1")UD#N1V $octetul superior%. +entru instruciunea de comparatie ':+"D primul operand este dat de patru locatii de memorie care ncep la adresa D")U"#V $octetul inferior% i se termin la D") U"#N1V $octetul superior%, iar al doilea operand este dat de patru locatii de memorie care ncep la adresa 1")UD#V $octetul inferior% i se termin la 1")UD#N1V $octetul superior%. +entru instruciunea de comparatie ':+" primul operand este dat de una doua sau patru locatii de memorie care ncep la adresa D")U"#V $octetul inferior% i se termin iar al doilea operand este dat de patru locatii de memorie care ncep la adresa 1")UD#V $octetul inferior% i se termin la 1")UD#N1V $octetul superior%.

11E

#n urma efectuarii unei astfel de instruciuni, registrele inde! "# respectiv D# se modific n funcie de starea flagului D8 $de directie%. Daca D8 este 7, registrele inde! vor fi incrementate cu 1 la ':+"* i cu 0 la ':+"4. Daca D8 este 1, registrele inde! vor fi decrementate cu 1, respectiv cu 0. A1.-.+. Ajustri zecimale pentru opera4ii cu numere A<" AAA - justare n cod *'D despachetat a lui , dup adunare Ac4iune) #8 $ , ;D 28@% F L% 29 $ 8R1% <@1; , [ $ , N E% ;D 28@H @ [ @ N 1H 8 [ 1H '8 [ 1H 1,"1 '8 [ 7H 8 [ 7. 8#. Descriere) 1!ecuia instruciunii AAA se face numai dup instruciunea A"" $sau A"<%, care las rezultatul n registrul ,. "emiocteii inferiori ai operanzilor instruciunii de adunare trebuie s fie n intervalul 7...L. -n acest caz, instruciunea AAA ajusteaz registrul C pentru a conine rezultatul zecimal corect n format *'D despachetat. Dac adunarea a dus la un transport zecimal, registrul @ este incrementat iar flagurile '8 i 8 sunt setate. Dac nu a fost transport zecimal, flagurile '8 i 8 sunt terse iar @ rm(ne neschimbat. -n ambele cazuri, registrul , rm(ne cu jumtatea superioar n 7 $*'D despachetat%. De e!emplu, dac @R7 i dac ,R7 h atunci C devine 7177, dac ,R7*h atunci C devine 7171, dac ,R7'h atunci C devine 7170, s.a.m.d.%. Dupa instruciunea AAA se poate obtine n , rezultatul n cod "'## e!ecut(nd o instruciune (2 AL'-D7 AAS - justare n cod *'D despachetat a lui , dup scdere Ac4iune) #8 $ , ;D 28@% F L% 29 $ 8R1% <@1; , [ , - E% ;D 28@H @ [ @ - 1H 8 [ 1H 'W [ 1H 11J

1,"1 '8 [ 7H 8[7 8#. Descriere) 1!ecuia instruciunii AAS se face numai dup instruciunea SUA $sau SAA%, care las rezultatul n registrul ,. "emiocteii inferiori ai operanzilor instruciunii de scdere trebuie s fie n intervalul 7...L. -n acest caz, instruciunea AAS ajusteaz registrul C pentru a conine rezultatul zecimal corect n format *'D despachetat Dac scaderea a dus la un transport zecimal, registrul @ este decrementat iar flagurile '8 i 8 sunt setate. Dac nu a fost transport zecimal, flagurile '8 i 8 sunt terse iar @ rm(ne neschimbat. -n ambele cazuri, registrul , rm(ne cu jumtatea superioar n 7 $*'D despachetat%. Dupa instruciunea AAA se poate obtine n , rezultatul n cod "'## e!ecut(nd o instruciune (2 AL'-D7 "AA - justare , dup adunare $*'D mpachetat% Ac4iune) #8 $ , ;D 28@% F L% 29 $ 8R1% <@1; , [ , N EH 8 [ 1H 1,"1 8 [ 7H 8# #8 $ ,F L8@% 29 $'8R1% <@1; , [ , NE7@H '8 [ 1H 1,"1 '8 [ 7H 8#. Descriere) 1!ecuia instruciunii D se face numai dup instruciunea A"" $sau A"<%, care las un rezultat de doi digii *'D mpachetat n registrul ,. 'ei doi operanzi ai instruciunii de adunare trebuiau s fi fost de asemenea n format *'D mpachetat pe c(te doi digii. -n acest caz, instruciunea "AA ajusteaz registrul , pentru a conine cele dou cifre *'D mpachetat corecte ale rezultatului. "AS - justare , dup scadere $*'D mpachetat% Ac4iune) #8 $ , ;D 28@% F L% 29 $ 8R1% 11K

<@1; , [ , - EH 8 [ 1H 1,"1 8 [ 7H 8# #8 $ ,F L8@% 29 $'8R1% <@1; , [ , -E7@H '8 [ 1H 1,"1 '8 [ 7H 8#. Descriere) 1!ecuia instruciunii D se face numai dup instruciunea SUA $sau SAA%, care las un rezultat de doi digii *'D mpachetat n registrul ,. 'ei doi operanzi ai instruciunii de scadere trebuiau s fi fost de asemenea n format *'D mpachetat pe c(te doi digii. -n acest caz, instruciunea "AS ajusteaz registrul , pentru a conine cele dou cifre *'D mpachetat corecte ale rezultatului. AA - justare , dup nmulire Ac4iune) @ [ ,I17H , [ , modulo 17. Descriere) 1!ecuia instruciunii : se face numai dup instruciunea :?, ntre dou cifre *'D despachetate $fiecare ocup c(te un octet%, care las rezultatul n registrul C. Deoarece rezultatul este mai mic de 177, el este coninut integral n registrul ,. #nstruciunea : despacheteaz rezultatul din , prin mprire cu 17, ls(nd c(tul $cifra cea mai semnificativ% n @, i restul $cifra mai puin semnificativ% n registrul ,. AA" - justare , nainte de mprireH Ac4iune) , [ @ T 17 N ,H @ [ 7. #nstruciunea D este folosit pentru a pregti doua cifre n format *'D despachetat $cifra mai putin semnificativa n , i cea mai semnificativa n @% pentru o mprire care va genera un rezultat n format *'D despachetat. ceasta se realizeaz d(nd lui , valoarea ,N$17T @% i lui @ valoarea 7. C va deveni 11L

egal deci cu echivalentul binar al numrului initial de doua cifre *'D despachetat.

A1.-.-. "eplasri !i rota4ii S@L src,UnrV -Deplasare logic spre st(nga cu nr poziii $numere fr semn% Ac4iune) ' 2peranzi) :"* ,"* 7 -src)rK,r1E,r60,mK,m1E,m60H -UnrV) 1, ',,immK. Descriere) 2perandul src este nmulit cu 0 de UnrV ori. S@2 src,UnrV -Deplasare logica spre dreapta cu nr poziii $numere fr semn% Ac4iune) :"* ,"* ' 7 2peranzi) -src)rK,r1E,r60,mK,m1E,m60H -UnrV) 1, ',,immK. Descriere) 2perandul src este mprit cu 0 de UnrV ori. SAL semn% Ac4iune) ' 2peranzi) :"* ,"* 7 -src)rK,r1E,r60,mK,m1E,m60H -UnrV) 1, ',,immK. Descriere) 2perandul src cu semn este nmulit cu 0 de UnrV ori. #nstruciunea este echivalent cu instruciunea "@, src,UnrV -Deplasare aritmetica spre st(nga cu nr poziii $numere cu

107

SA2 semn%

src,UnrV -Deplasare aritmetic spre dreapta cu nr poziii $numere cu :"* ,"* '

Ac4iune)

2peranzi)

-src)rK,r1E,r60,mK,m1E,m60H -UnrV) 1, ',,immK. Descriere) 2perandul src cu semn este mprit cu 0 de UnrV ori. 2(L src,UnrV-9otaie prin carrA spre st(nga cu UnrV poziii Ac4iune) ' :"* ,"*

2peranzi)

-src)rK,r1E,r60,mK,m1E,m60H -UnrV) 1, ',,immK.

2(2 src,UnrV-9otaie prin carrA spre dreapta cu UnrV poziii Ac4iune) :"* ,"* '

2peranzi)

-src)rK,r1E,r60,mK,m1E,m60H -UnrV) 1, ',,immK.

2<L src,UnrV-9otaie cu carrA spre st(nga cu UnrV poziii Ac4iune) ' :"* ,"*

2peranzi)

-src)rK,r1E,r60,mK,m1E,m60H -UnrV) 1, ',,immK.

2<2 src,UnrV-9otaie cu carrA spre dreapta cu UnrV poziii 101

Ac4iune) :"* ,"* '

-src)rK,r1E,r60,mK,m1E,m60H -UnrV) 1, ',,immK. Descriere) 8iecare instruciune de rotaie 92, i 929 deplaseaz biii operandului src $registru sau locaie de memorie%. #nstruciunile de rotaie spre st(nga deplaseaz toi biii ctre poziia cea mai semnificativ $ctre :"*%, e!cept(nd bitul din poziia cea mai semnificativ, care este mutat n poziia cea mai puin semnificativ $,"*%. #nstruciunile de rotaie spre dreapta acioneaz invers) biii sunt deplasai ctre poziia cea mai puin semnificativ iar bitul din poziia cea mai puin semnificativ ajunge n poziia cea mai semnificativ. +entru instruciunile 9', i 9'9, flagul '8 este o parte a cantitii rotite. #nstruciunea 9', deplaseaz flagul '8 n bitul cel mai puin semnificativ i cel mai semnificativ bit n flagul '8H instruciune a 9'9 deplaseaz flagul '8 n bitul cel mai semnificativ i bitul cel mai semnificativ n flagul '8. ,a instruciunile 92, i 929, valoarea flagului '8 nu este parte a rezultatului, dar flagul '8 recepioneaz o copie a bitului care a fost deplasat de la un capt la altul. 9otaia este repetat de un numr de ori indicat de al doilea operand, care este 1, o valoare imediata de K bii, sau coninutul registrului ',. ;umarul de deplasari ma!im admis este de 61H dac se specific UnV mai mare, se trunchiaz automat la cei mai putin semnificativi B bii. 8lagul 28 este definit numai pentru forme cu o singur rotaie ale instruciunilor $al doilea operand este un 1%. 1ste nedefinit n toate celelalte cazuri. +entru deplasriIrotiri spre st(nga, bitul '8 de dup deplasare este Q sau-e%clusiBatQ cu bitul rezultat de cel mai nalt ordin, spre a rezulta flagul 28. +entru deplasriIrotiri spre dreapta, cei doi bii cu cel mai nalt ordin ai rezultatului sunt ,sau-e%clusiBa4i, spre a rezulta flagul 28. S@L" dst,src,UnV - deplasare st(nga cu dubl precizie ' 2peranzi) :"* dst ,"* :"* src ,"*

2peranzi)

-src)r1E,r60,m1E,m60H -UnrV) 1, ',,immK.

Descriere) 'oninutul dst $registru sau locaie de memorie% este deplasat spre 100

st(nga de UnV ori mpreun cu registrul src, ai crui bii ptrund n dst. 9egistrul src rm(ne neschimbat. *itul '8 ia valoarea ultimului bit care a fost deplasat din :"* al dst. Deoarece bitii care vor intra prin deplasare n dst sunt provenii de la un alt registru, aceasta instruciune este util pentru deplasari cu dubla precizie $pe E= de bii% S@2" dst,src,UnV- deplasare dreapta cu dubla precizie :"* 2peranzi) src ,"* :"* dst ,"* '

-src)r1E,r60,m1E,m60H -UnrV) 1, ',,immK.

Descriere) 'oninutul dst $registru sau locaie de memorie% este deplasat spre dreapta de UnV ori mpreun cu registrul src, ai crui bii ptrund n dst. 9egistrul src rm(ne neschimbat. *itul '8 ia valoarea ultimului bit care a fost deplasat din :"* al dst. Deoarece bitii care vor intra prin deplasare n dst sunt provenii de la un alt registru, aceasta instruciune este util pentru deplasri cu dubl precizie $pe E= de bii%. A1.0 Instruc4iuni de lucru pe bit <L< - tergere flag transport $'8 R 7% ST< - setare flag transport $'8 R 1% < < - complementarea transport $'8 R ;2< '8% <L" - stabilire direcie cresctoare $D8 R 7% Dupa aceasta instruciune, la operatiile cu siruri registrele inde! vor fi incrementate. ST" - stabilire direie descresctoare $D8 1% Dupa aceasta instruciune, la operatiile cu siruri registrele inde! vor fi decrementate. STI - activare ntreruperi $#8 R 1% <LI - dezactivare ntreruperi $#8 R 7%

106

AT - <estare bit $'opiere bit n '8% nemonic) *< dst,src dst) r1E,r60,m1E,m60H src) r1E,r60,immK. Ac4iune) '8[ *it$ *aza, inde!%. Descriere) +rimul operand specific baza iar al doilea inde!ul. *itul cu inde!ul dat de ala doilea operand din registrul sau locatia de memorie specificat de primul operand este copiat n '8. Daca baza este un registru, inde!ul este ajustat automat modulo 1E sau modulo 60 n functie de marimea registrului. Daca baza este o locaie de memorie, ea reprezint adresa locaiei de memorie care conine bitul cu inde! 7. "unt posibile valori ale inde!ului ntre -0 61 i 061-1 dac al doilea operand este un registru sau ntre 7 i 61 dac al doilea operand este o valoare imediata. AT2 - <estare bit i resetare $'opiere bit n '8 i resetare% nemonic) *< dst,src dst) r1E,r60,m1E,m60H src) r1E,r60,immK. Ac4iune) '8[ *it$ *aza, inde!% *it$ *aza, inde!%[ 7. Descriere) +rimul operand specific baza iar al doilea inde!ul. *itul cu inde!ul dat de al doilea operand din registrul sau locaia de memorie specificat de primul operand este copiat n '8, dupa care este resetat $adus la 7%. Daca baza este un registru, inde!ul este ajustat automat modulo 1E sau modulo 60 n functie de marimea registrului. Daca baza este o locaie de memorie, ea reprezint adresa locaiei de memorie care conine bitul cu inde! 7. "unt posibile valori ale inde!ului ntre -0 61 i 061-1 dac al doilea operand este un registru sau ntre 7 i 61 dac al doilea operand este o valoare imediat. ATS - <estare bit i setare $'opiere bit n '8 i setare% nemonic) *< dst,src dst) r1E,r60,m1E,m60H src) r1E,r60,immK. Ac4iune) '8[ *it$ *aza, inde!% *it$ *aza, inde!%[ 1. Descriere) +rimul operand specific baza iar al doilea inde!ul. *itul cu inde!ul dat de ala doilea operand din registrul sau locatia de memorie specificat de primul operand este copiat n '8, dupa care este setat $adus la 1%. Daca baza este un 10=

registru, inde!ul este ajustat automat modulo 1E sau modulo 60 n functie de marimea registrului. Daca baza este o locaie de memorie, ea reprezint adresa locaiei de memorie care conine bitul cu inde! 7. "unt posibile valori ale inde!ului ntre -0 61 i 061-1 dac al doilea operand este un registru sau ntre 7 i 61 dac al doilea operand este o valoare imediata.

AT< - <estare bit i complementare $'opiere bit n '8 i complementare% nemonic) *< dst,src dst) r1E,r60,m1E,m60H src) r1E,r60,immK. Ac4iune) '8[ *it$ *aza, inde!%H *it$ *aza, inde!%[ ;2< *it$ *aza, inde!%. Descriere) +rimul operand specific baza iar al doilea inde!ul. *itul cu inde!ul dat de ala doilea operand din registrul sau locatia de memorie specificat de primul operand este copiat n '8, dupa care este complementat $ia valoarea opus%. Daca baza este un registru, inde!ul este ajustat automat modulo 1E sau modulo 60 n functie de marimea registrului. Daca baza este o locaie de memorie, ea reprezint adresa locaiei de memorie care conine bitul cu inde! 7. "unt posibile valori ale inde!ului ntre -061 i 061-1 dac al doilea operand este un registru sau ntre 7 i 61 dac al doilea operand este o valoare imediat. AS* - "canare nainte a biilor nemonic) *"8 dst,src dst) r1E,r60H src) r1E,r60,m1E,m60. Ac4iune) dst[inde!$src,7%. Descriere) *itii din src sunt testai pe rand incep(nd cu cel mai putin semnificativ, i dac toti sunt 7 este sters flagul M8. Daca vreunul este gsit n 1, inde!ul sau incep(nd de la 7 este scris n dst. AS* - "canare napoi a bitilor nemonic) *"9 dst,src dst) r1E,r60H src) r1E,r60,m1E,m60. Ac4iune) dst[inde!$src,7%. Descriere) *itii din src sunt testai pe rand ncepand cu cel mai semnificativ, i dac toti sunt 7 este sters flagul M8. Daca vreunul este gsit n 1, inde!ul sau ncepand de la 7 este scris n dst.

10B

S5Tcc - "eteaz octet dac condiia cc este indeplinit #nstruciunea are una din urmatoarele forme) S5TA rImK "eteaz octetul dac este peste $'8R7 and M8R7% S5TA5 rImK "eteaz octetul dac este peste sau egal $'8R7% S5TA rImK "eteaz octetul dac este sub $'8R1% S5TA5 rImK "eteaz octetul dac este sub sau egal $'8R1 or $M8R1% S5T< rImK "eteaz octetul dac este transport $'8R1% S5T5 rImK "eteaz octetul dac este egal $M8R1% S5TI rImK "eteaz octetul dac este mai mare $M8R7 or "8R28% S5TI5 rImK "eteaz octetul dac este mai mare sau egal $"8R28% S5TL rImK "eteaz octetul dac este mai mic $"8[F28% S5TL5 rImK "eteaz octetul dac este mai mic sau egal $M8R1 i "8[F28% S5T=A rImK "eteaz octetul dac nu este peste $'8R1% S5T=A5 rImK "eteaz octetul dac nu este peste sau egal $'8R1% S5T=A rImK "eteaz octetul dac nu este sub $'8R7% S5T=A5 rImK "eteaz octetul dac nu este sub sau egal $'8R7 i M8R7% S5T=< rImK "eteaz octetul dac nu este transport $'8R7% S5T=5 rImK "eteaz octetul dac nu este $M8R7% S5T=I rImK "eteaz octetul dac nu este mai mare $M8R1 or "8[F28% S5T=I5 rImK "eteaz octetul dac nu este mai mare sau egal $"8[F28% S5T=L rImK "eteaz octetul dac nu este mai mic $"8R28% S5T=L5 rImK "eteaz octetul dac nu este mai mic sau egal $M8R1 i "8[F28% S5T=( rImK "eteaz octetul dac nu este overflo5 $28R7% S5T=P rImK "eteaz octetul dac nu este paritate $+8R7% S5T=S rImK "eteaz octetul dac semnul este 7 $"8R7% S5T=Q rImK "eteaz octetul dac nu este zero $M8R7% S5T( rImK "eteaz octetul dac este overflo5 $28R1% S5TP rImK "eteaz octetul dac este paritate $+8R1% S5TP5 rImK "eteaz octetul dac este paritate par $+8R1% S5TP( rImK "eteaz octetul dac este paritate impar $+8R7% S5TS rImK "eteaz octetul dac semnul este 1 $"8R1% S5TQ rImK "eteaz octetul dac este zero $M8R1% Descriere) Daca condiia este ndeplinit, atunci operandul $registru de K bii sau locaie de memorie% devine 1. Daca nu, acesta devine 7.

A1.3. Instruc4iuni de rami$icare n program

10E

T P adr - salt necondiionat adr) r1E,r60,m1E,m60,relK,rel1E,rel60,ptr1E)1E,ptr1E)60,m1E)1E,m1E)60. Descriere) #nstruciunea _:+ transfera controlul catre un alt punct n lanul de instruciuni fr a se memora adresa de revenire. 2perandul adr $inta% specific adresa instruciunii la care se sare. cest operand poate fi o valoare imediat, un registru de uz general sau o locaie de memorie. ceasta instruciune poate e!ecuta patru tipuri diferite de salturi) "alt apropiat $near% - ?n salt catre o instruciune din segmentul de cod curent, segment indicat de coninutul curent al registrului '"%, numit i salt intrasegment. "alt scurt $short% - ?n salt apropiat la care deplasamntul este limitat intre -10K i N10J fata de valoarea curenta a 1#+ "alt indeprtat $far% - ?; salt catre o instruciune aflata intr-un segment diferit de segmentul curent de cod, dar cu acelasi nivel de privilegii, numit i salt intersegment <as> s5itch - ?n salt catre o instruciune aflata intr-un alt tas> $posibil numai n modul virtual protejat - v. U0V % Salturile apropiate !i scurte. 'nd se e!ecut un salt apropiat, procesorul sare la adresa $din segmentul de cod curent% care este specificat de operandul int. cesta specific fie un deplasament absolut $fa de baza segmentului de cod% fie un deplasament relativ $o valoare cu semn fa de valoarea curent a numratorului de program%.9egistrul '" nu se modific la astfel de salturi. ?n deplasamet absolut este specificat indirect printr-un registru general sau o locaie de memorie $operandul este r1EIm1E sau r60Im60%.?n deplasament absolut se ncarc direct n 1#+. :arimea operandului determin i coninutul 1#+H dac acesta este de 1E bii, cei 1E bii superiori din 1#+ sunt pui n 7, rezultand un deplasament care nu depaete 1E bii. ?n deplasament relativ este n general specificat n limbaj de asamblare printr-o etichet, dar la nivel de cod masin acesta este decodificat ca o valoare imediat cu semn, de K, 1E sau 60 de bii. ceasta valoare este adunat la valoarea din 1#+, adic la adresa instruciunii imediat urmatoare celei de salt. Salturi ndeprtate n modul 2eal sau Eirtual >D>?. '(nd se e!ecut un salt ndeprtat n modul 9eal sau 3irtual K7KE, procesorul sare la un segment de cod i un deplasament specificat de operandul instruciunii. cesta specific o adresa absolut departat, fie direct printr-un pointer $ptr1E)1E sau ptr1E)60% fie indirect printr-o locaie de memorie $m1E)1E sau m1E)60%.

10J

#n varianta cu pointer, segmentul i deplasamentul adresei la care se sare sunt specificate de instruciune printr-o valoare imediata de = octei $operand de 1E bii% sau de E octei $operand de 60 de bii%. #n varianta indirect, operandul specific o locaie de memorie care conine = octei $operand de 1E bii% sau E octei $operand de 60 de bii%. dresa ndeprtat este ncrcat direct n registrele '" $primii doi octei% i 1#+ $uramtorii 0 sau = octei%. Daca operandul este de 1E bii, cei 1E bii superiori din 1#+ sunt pusi n 7, rezultand un deplasament care nu depaseste 1E bii. Tcc adr - "alt condiionat adr) relK,rel1E,rel60. Descriere) #nstruciunea Tcc transfer controlul catre un alt punct n lanul de instruciuni fr a se memora adresa de revenire, numai dac este indeplinit condiia cc. Dac aceasta condiie nu este indeplinit, se coninu cu instruciunea imediat urmatoare. 2perandul adr $int% specific adresa instruciunii la care se sare. cest operand este un deplasament relativ. #n general, n limbaj de asamblare, deplasamentul relativ este specificat printr-o etichet, dar la nivel de cod masin acesta este decodificat ca o valoare imediata cu semn, de K, 1E sau 60 de bii. ceasta valoare este adunat la valoarea din 1#+, adica la adresa instruciunii imediat urmatoare celei de salt. ceasta instruciune poate e!ecuta dou tipuri diferite de salturi) "alt apropiat $near% - ?n salt catre o instruciune din segmentul de cod curent, segment indicat de coninutul curent al registrului '"%, numit i salt intrasegment. "alt scurt $short% - ?n salt apropiat la care deplasamntul este limitat ntre -10K i N10J fata de valoarea curent a 1#+ -n funcie de rezultatul operaiei aritmetice sau logice precedente $care modific anumii indicatori de conditii% pot e!ista urmtoarele forme de instruciuni de salt conditionat) TP adr $TP5 adr% - salt condiionat de paritate par. $+8R1% T=P adr $TP( adr% - salt condiionat de paritate impar $+8R7% T( adr - salt condiionat de 28 R 1 - a fost depire. T=( adr - salt condiionat de 28 R 7 - nu a fost depire. TS adr - salt condiionat de "8 R 1 - rezultatul a fost negativ. T=S adr - salt condiionat de "8 R 7 - rezultatul a fost pozitiv. T5 adr $TQ adr% - salt condiionat de M8 R 1 - egalitate la comparaia anterioar. T=5 adr $T=Q adr% - salt condiionat de M8 R 7 - inegalitate la comparaia anterioar. 10K

"alturi condiionate de comparaii ale unor numere cu semn) TL adr $T=I5 adr% - salt condiionat de "8 f 28 $"8 !or 28 R 1% - mai mic la comparaia anterioar a unor valori cu semn. TL5 adr $T=I adr% - salt condiionat de M8 R 1 sau "8 f 28 - mai mic sau egal la comparai a anterioar a unor valori cu semn. TI adr $T=L5 adr% - sat condiionat de M8 R 7 i "8 R 28 - mai mare la comparaia anterioar a unor valori cu semn. TI5 adr $T=L adr% - salt condiionat de "8 R 28 - mai mare sau egal la comparaia anterioar a unor valori cu semn. "alturi condiionate de comparaii ale unor numere fara semn) TA adr $T=A5 adr, T< adr% - salt condiionat de '8 R 1 - mai mic la comparaia anterioar a unor valori cu fara semn sau transport la operaia anterioar. TA5 adr $T=A adr% - salt condiionat de '8 R 1 sau M8 R 1 - mai mic sau egal la comparaia anterioar a unor valori fr semn. TA adr $T=A5 adr% & salt condiionat de '8 R M8 R 7 & mai mare la comparaia anterioara a unor valori fr semn. TA5 adr $T=A adr, T=< adr% & salt condiionat de '8 R 7 & mai mare sau egal la comparaia anterioar a unor valori fr semn sau nu e!ist transport la operaia anterioar. T<HQ & salt condiionat de coninutul lui 'C R 7.Deplasament numai pe K bii. T5<HQ & salt condiionat de coninutul lui 1'C R 7.Deplasament numai pe K bii.

L((P' L((P5'&L((PQ)'L((P=5&L((P=Q) nemonic) L((P' L((P5'&L((PQ)'L((P=5&L((P=Q) Descriere) #nstruciunea ,22+ decrementeaz contorul 'C sau 1'C fr s schimbe flagurile. poi sunt testate condiiile specificate de forma ,22+ folosit. Dac condiia este ndeplinit, se face un salt scurt $domeniul &10K p(n la N10J% la eticheta dat de operandul instruciunii ,22+. cest lucru se repet p(n c(nd contorul ajunge la 7 sau p(n c(nd condiia nu mai este ndeplinit. Daca atributul de lungime al operandului este 1E bii contorul va fi 'C, iar dac este de 60 de bii contorul va fi 1'C . #nstruciunea ,22+ permite controlul iteratiilor prin combinarea decrementarii automate a inde!ului cu saltul conditionat. "e foloseste introduc(nd n 10L

registrul contor $'C sau 1'C% numarul fr semn al iteratiilor i pun(nd instruciunea ,22+ la sf(rsitul seriei de instruciuni care vor fi repetate. 2perandul instruciunii ,22+ este eticheta de la inceputul secventei care se va repeta. L((P W 9epetare de 'C ori a secvenei nemonic ) L((P relK. 2perand) n) numr cu semn pe K bii. Ac4iune) 'C [ 'C - 1H dac 'C f 7 atunci #+ [ #+ N n. "e repet secvena de instruciuni de lungime n octei, marcat cu un capt de instruciunea ,22+ p(n c(nd 'C R 7. ,ungimea fiind dat de un numr cu semn, poate fi cuprins ntre -10K i N10K octei. L((PQ $sau L((P5% & 9epetare de 'C ori a secvenei, condiionat de M8 R 1 nemonic) L((PQ relK. 2perand) n) numr cu semn pe K bii. Ac4iune) 'C [ 'C & 1H dac M8 R1 i 'C f 7 atunci #+ [ #+ N n. "e repet secvena de instruciuni de lungime n octei, marcat cu un capt de instruciunea ,22+ p(n c(nd 'C R 7, dar numai c(t timp M8 R1. 2rice resetare a fanionului M8 duce la ieirea forat din ciclu. ,ungimea fiind dat de un numr cu semn, poate fi cuprins ntre -10K i N10K octei. L((P=Q $sau L((P=5%&9epetare de 'C ori a secvenei, condiionat de M8 R 7. nemonic) L((P=Q relK 2perand) n) numr cu semn pe K bii. Ac4iune) 'C [ 'C -1H dac M8 R 7 i 'C f 7 atunci #+ [ #+ N n. "e repet secvena de instruciuni de lungime n octei, marcat cu un capt de instruciunea ,22+ p(n c(nd 'C R 7, dar numai c(t timp M8 R 7. 2rice resetare a fanionului M8 duce la ieirea forat din ciclu. ,ungimea fiind dat de un numr cu semn, poate fi cuprins ntre -10K i N10K octei. <ALL adr - apel de subrutin "escriere) #nstruciunea ' ,, conduce la e!ecuia subrutinei $procedurii% al carei nume este specificat de operand. '(nd aceasta procedur s-a terminat $apare o instruciune 91< de rentoarcere%, e!ecuia programului continu cu instruciunea imediat urmtoare instruciunii ' ,,. 167

Ac4iune8 1!ist doua variante ale acestei instruciuni, a caror Ac4iune este urmatoarea) <ALL apropiat &near). "unt acele apeluri de proceduri care au operandul de tip r1E, m1E, r060, m60, rel1E i rel60, care se e!ecut n interiorul aceluiasi segment. +rin urmare, schimbarea i salvarea registrului de segment de cod nu este necesara. 8ormele ' ,, rel1E i ' ,, rel60 aduna un deplasament cu semn la coninutul lui 1#+ $adresa instruciunii care urmeaza lui ' ,,%, pentru a determina destinaia. :arimea operandului determina i coninutul 1#+H dac acesta este de numai 1E bii, cei 1E bii superiori din 1#+ sunt pusi n 7, rezultand un deplasament care nu depaseste 1E bii. 8ormele ' ,, r1EIm1E i ' ,, r60Im60 specific un registru sau o adresa de memorie de unde se e!trage deplasamentul absolut fata de baza segmentului $adresa efectiva%. :arimea operandului determina i marimea deplasamentului e!tras. 3aloarea curenta a lui 1#+ $adresa instruciunii imediat urmatoare lui ' ,,% este salvat n stiv nainte de incrcarea 1#+ cu noua adres efectiv $deplasament fa de baza segmentului%. ceasta va fi readus n 1#+ de instruciunea 91< cu care se termina subrutina. <ALL indeprtat &$ar). 8ormele ' ,, ptr1E)1E i ' ,, ptr 1E)60 folosesc un pointer de = sau E octei catre subrutina chemat. 8ormele ' ,, m1E)1E i ' ,, m1E)60 e!trag pointerul respectiv din locatia de memorie specificata. #n modul 9eal sau 3irtual K7KE, pointerul da 1E bii pentru registrul '" i restul de 1E sau 60 de bii pentru registrul 1#+. #nstruciunile ' ,, indeprtat salveaz n stiva i registrul '" i registrul #+ $sau 1#+%. 25T & re(ntoarcere din subrutin nemonic) 91< 91< n "escriere) #nstruciunea 91< produce rentoarcerea dintr-o subrutin prin transferarea controlului la instruciunea a crei adresa se afl n stiv. cest adresa este n mod normal plasat n stiv de o instruciune ' ,,, iar rentoarcerea se face la instruciunea imediat urmtoare acesteia. +arametrul numeric opional al instruciunii 91< da numarul de octei din stiv $dac operandul e pe 1E bii% sau de cuvinte $dac operandul e pe 60 de bii% care s fie eliberai dup ce este e!tras adresa de rentoarcere. +entru o rentoarcere intrasegment $apropiat%, adresa e!tras din stiv este un deplasament fa de baza segmentului $adresa efectiv% care va fi ncarca n #+. 9egistrul '" ram(ne neschimbat. 161

+entru o rentoarcere intersegment $ndeprtat%, adresa e!tras din stiv este un pointer. :ai nt(i este e!tras deplasamentul i ncarcat n #+ iar apoi adresa de segment i ncarcata n '". I=T & apelare ntrerupere soft5are nemonic) #;< n #;<2 "escriere) #nstruciunea #;< genereaza o chemare prin soft5are a unei subrutine de tratare a unei intreruperi. 2perandul imediat, cuprins ntre 7 i 0BB da inde!ul n tabela de intreruperi al subrutinei care este chemat. -n modul 9eal, aceasta tabel cuprinde pointeri de cte = octei -ntreruperea condiionat #;<2 este identic cu #;<, dar operandul implicit este =, i poate apare numai dac flagul 2verflo5 este setat. +rimele 60 de ntreruperi sunt rezervate de #ntel pentru utilizri speciale. ?nele dintre ele sunt folosite de e!cepiile generate intern de procesor. #;< se comport n principiu ca un ' ,, $far% dar nainte de a se salva n stiv adresa de reintoarcere, se salveaz i registrul de flaguri. "ubrutinele de tratare a ntreruperilor se ncheie cu instruciunea #91< care aduce din stiv i adresa de reintoarcere i coninutul registrului de flaguri #nstruciunea #;< este folosit frecvent pentru apelarea unor subrutine standard din *#2" sau din sistemul de operare $vezi ane!ele 0 i 6%, care pot realiza foarte eficient o serie de aciuni de larg rsp(ndire. I25T & rentoarcere din ntrerupere "escriere) #n modul 9eal, instruciunea #91< e!trage din stiv adresa de rentoarcere din subrutina de tratare a unei intreruperi, precum i registrul de flaguri. ceasta are ca efect revenirea n program la instruciunea imediat urmatoare celei care a precedat ntreruperea, cu reactivarea ntreruperilor $acceptarea unei cerei de ntrerupere sterge flagul de ntreruperi%. 'a alternativ, dac s-ar folosi la sf(ritul rutinei de ntrerupere o instruciune de tip 91<, aceasta ar trebui precedat de o instruciune "<# pentru reactivarea intreruperilor. A1.?. Instruc4iuni speciale @LT - oprirea oricrei activiti a procesorului. "e poate iei numai cu 91"1< sau ntrerupere hard. Daca se iese din aceasta stare cu o intrerupere $inclusiv ;:#%, programul coninu cu instruciunea imediat urmtoare instruciunii @,<. =(P - #nstruciune fr operaie.

160

166

A=5HA + Lista serBiciilor de ecran I=T 1D7


-ntreruperea 17h pune la dispoziia programatorului urmtoarele servicii pentru lucrul cu ecranul ) 77h - "tabilire mod videoH 71h - "tabilire dimensiune cursorH 70h - "tabilire poziie cursorH 76h - 'itete cursorH 7=h - 'itete poziia creionului graficH 7Bh - "electeaz pagina videoH 7Eh - "croll n susH 7Jh - "croll n josH 7Kh - 'itete carcter i atributulH 7Lh - "crie carcter i atributulH 7 h -"crie caracter numai la cursorH 7*h - "tabilire chenar i paletH 7'h - "crie pi!elH 7Dh - 'itete pi!elH 71h - "crierea caracterului n modul <eletApe $<<W%H

16=

78h - 'itete modul video curentH 17h - "etarea regitrilor paletei la 1S I3S H 11h - Seneratorul de caractere 1S H 10h - 8uncii speciale 1S H 16h - "crierea unui ir de caractereH 1=h - ?tilizarea ,'DH 1Bh - 'itete caracteristicile fizice ale adaptorului grafic.

ceste servicii sunt prezentate detailat n continuare. Dei ofer i posibiliti de scriere pe ecran, nu este recomandat utilizarea acestora datorit vitezei reduse. 3ariante mai performante sunt cele care folosesc #;< 01h i mai ales cele cu scriere direct n memoria de ecran.

I=T 1D7' DD7 &D) Stabilire mod Bideo


,ntrr#: (+ (3 00/, %o8ul vi8eo. (), S<, 5<, SC, DC.

9e+ultate: Nici unul. 9e"#stre mod#2#cate:

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 4abelul modur#lor '#deo Adresa de Mod 4#p 9e+olu)#a Adaptor 0ulor# memor#e 00/ 0!/ 01/ 0*/ 0>/ 0=/ 0D/ 0Q/ 0@/ 0O/ 0(/ 05/ 02/ 0D/ 0?/ 0K/ Text Text Text Text Wra"/ics Wra"/ics Wra"/ics Text Wra"/ics Wra"/ics Wra"/ics Ieserve8 Ieserve8 Wra"/ics Wra"/ics Wra"/ics >0 >0 @0 @0 *10 *10 D>0 @0 !D0 *10 D>0 x 1= (ll but %D( x 1= (ll but %D( x 1= (ll but %D( x 1= (ll but %D( x 100 (ll but %D( x 100 (ll but %D( x 100 (ll but %D( x 1= %D(,?W( x 100 <2#r x 100 <2#r x 100 <2#r Linternal to ?W(M Linternal to ?W(M *10 x 100 ?W( D>0 x 100 ?W( D>0 x *=0 ?W( !D graF !D fore/@ back !D graF !D fore/@ back > > graF 1 b/w !D !D > !D !D b/w 5@000 5@000 5@000 5@000 5@000 5@000 5@000 50000 50000 50000 50000 (0000 (0000 (0000

16B

!0/ Wra"/ics D>0 x *=0 ?W( !D (0000 HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Obser'a)## (tunci can8 mo8ul vi8eo se sc/imb, ecranul se 9terge automat. Totu9i, nu se recoman8 folosirea acestui serviciu "entru 9tergerea ecranului 8eoarece este mai lent 8ecNt serviciile normale 8e stergere a ecranului Lserviciile 0D/ sau 0Q/M. <entru a evita 9tergerea ecranului se va c/ema .ntreru"erea cu bitul cel mai semnificativ 8in (3 .n !. -n mo8ul grafic, cursorul nu este afi9at Lel "oate fi totu9i cititM. Sc/imbarea mo8ului vi8eo sc/imb 9i 8imensiunea cursorului. Se "oate folosi serviciul 0K/ al .ntreru"erii !0/ "entru a citi mo8ul vi8eo curent.

Eezi !i 8 #;< 17h, 7Eh #;< 17h, 7Jh #;< 17h, 78h.

I=T 1D7' D17 &1) - Stabilire dimensiune cursor


(#usteaz 8imensiunea .nce"ut 9i 8e sfNr9it. ,ntrr#: (+ 2+ 23 cursorului "rin stabilirea liniei 8e

0!/, 3inia 8e .nce"ut a cursorului L0 H *!M, 3inia 8e sfNr9it a cursorului L0 H *!M.

9e+ultate:

Nici unul. (), S<, 5<, SC, DC.

9e"#stre mod#2#cate:

Valor#le l#n##lor de &nceput 1# s2:r1#t ale cursorulu# 30@ s# 0*5 .erm#se -nce"ut 0 0 0 SfNr9it Q !* !* ,mpl#c#te -nce"ut D !! DL!!M SfNr9it Q !1 QL!1M De"in8e 8e mo8

Adaptor 2W( %D( ?W(, 'W(

Obser'a)##: Numerotarea liniilor .nce"e 8in "artea su"erioar a blocului unui caracter L0M 9i cre9te .n #os. Dac se s"ecific o linie 8e sfNr9it cu un numr mai mic 8ecNt al celei 8e .nce"ut, cursorul va a"are format 8in 8ou linii conform "rinci"iului: 8u" ultima linie a blocului 8e caracter urmeaz "rima linie.

16E

<unerea .n ! a bi4ilor > sau = 8in 23 sau 2+ "ro8uce rezultate 8e"en8ente 8e "lac grafic, 9i 8e regul se evit. ?xist o singur 8imensiune a cursorului la un moment 8at "entru toate "aginile vi8eo 2li"irea cursorului nu "oate fi 8ezactivat Leste "ro8usa 8e /ar8wareM, 8ar se "oate face cursorul invizibil. -n acest sco" se "ozi4ioneaz cursorul cu serviciul 01/ .n afara zonei vizibile a ecranului L8e exem"lu "e linia 1=M. (cest serviciu afecteaz 8oar mo8urile text, .n mo8urile grafice cursorul nu este afi9at. <entru citirea 8imensiunii cursorului se "oate folosi serviciul 0*/.

Eezi !i8 #;< 17h, 76h #;< 17h, 70h .

I=T 1D7' D+7 &+) - Stabilire pozi4ie cursor


Seteaz "ozi4ia cursorului Llinie 9i coloanM "entru o "agin afi9at s"ecificat. ,ntrr#: (+ 5+ D+ D3 01/, Numarul "aginii afi9ate, 3inie, 2oloan.

9e+ultate:

Nici unul. (), S<, 5<, SC, DC.

9e"#stre mod#2#cate:

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Obser'a)##: (cest serviciu "oate "ozi4iona cursorul "e "agina activ afi9at sau "e o "agin inactiv. -n mo8urile grafice, acest serviciu seteaz "ozi4ia logic a cursorului, c/iar 9i 8ac cursorul .n sine nu este afi9at Lcursorul nu este afi9at .n nici unul 8in mo8urile graficeM. <entru a face cursorul invizibil, acesta se "oate "ozi4iona la linia 1=. 2ol4ul stNnga sus al imaginii este D+ B 0/, D3 B 0/, iar col4ul 8rea"ta este D+ B !@/ L1>M, D3 B 1Q/ L*OM "entru ecran cu >0 8e coloane, sau >K/ LQOM "entru ecran cu @0 8e coloane. ( se ve8ea serviciul 0=/ "entru o list 8e numere 8e "agin vali8e "entru 8iferitele mo8uri 8e afi9are. Deoarece servi ciul nu verifica valoarea, "ot a"rea rezultate eronate 8ac se s"ecific un numr 8e "agin invali8. Numrul "aginii "entru mo8urile grafice este 0.

16J

Eezi !i 8 #;< 17h, 76h #;< 17h, 7Bh.

I=T 1D7' D-7 &-)

<ite!te pozi4ia !i mrimea cursorului


cursorului

Ia"orteaz "ozi4ia Llinia 9i coloanaM 9i mrimea "entru "agina afi9at s"ecificat. ,ntrr#: 9e+ultate: (+ 5+ 2+ 23 D+ D3 0*/, Numrul "aginii afi9ate. 3inia 8e start a cursorului, 3inia 8e sfNr9it a cursorului, 3inie, 2oloan. (), S<, 5<, SC, DC.

9e"#stre mod#2#cate:

Valor#le l#n##lor de &nceput 1# s2:r1#t ale cursorulu# 30@ s# 0*5 .erm#se -nce"ut SfNr9it 0 Q 0 !* 0 !* -nce"ut D !! DL!!M ,mpl#c#te SfNr9it Q !1 QL!1M De"in8e 8e mo8

Adaptor 2W( %D( ?W(, 'W(

Obser'a)##: (cest serviciu "oate ra"orta "ozi4ia cursorului .n "agina activ, afi9at, sau .ntrHo "agin inactiv. Deoarece exist numai un cursor /ar8ware, linia 8e start a cursorului L2+M 9i cea 8e sfNr9it L23M L9i 8eci mrimea cursoruluiM vor avea aceea9i valoare in8iferent ce numar 8e "agin a fost s"ecificat. -n mo8urile grafice, acest serviciu ra"orteaz "ozi4ia logic a cursorului, c/iar 8ac cursorul nu este afi9at.

16K

2ol4ul 8in stNnga sus al imaginii este D+ B 0/, 3 B 0/, "e cNn8 cel 8in 8rea"ta #os este D+ B !@/L1>M, D3 B 1Q/ L*OM "entru mo8ul 8e >0 8e coloane sau >K/ LQOM "entru mo8ul 8e @0 8e coloane. ( se ve8ea Serviciul 0=/ "entru o list 8e numere 8e "agin vali8e "entru 8iferite mo8uri 8e afi9are. Deoarece serviciul nu verific valorile, "ot s a"ar rezultate eronate 8ac se s"ecific un numr invali8. Numrul "aginii "entru mo8ul grafic este 0. Se folose9te Serviciul 01/ "entru a seta "ozi4ia curent a cursorului. Se folose9te Serviciul 0!/ "entru a seta mrimea curent a cursorului.

Eezi !i8 #;< 17h, 71h #;< 17h, 70h #;< 17h, 7Bh.

I=T 1D7' D07 &0)


,ntrare: 9e+ultate: (+ (+ 5) 2+ 2) D+ D3

<ite!te pozi4ia creionului optic


0>/. Stare L0Bneactivat, !BactivatM, Numrul coloanei unui "ixel L0HD*OM, Numrul liniei unui "ixel L0H!OOM, Numrul liniei "entru mo8urile 0K/H!0/L0HnnnM, Numrul liniei caracterului L0H1>M, Numrul coloanei caracterului L0H*O sau 0HQOM. (), S<, 5<, SC, DC.

Ia"orteaz "ozi4ia 9i starea creionului o"tic.

9e"#stre mod#2#cate:

Obser'a)##: <ozi4ia este ra"ortat sub 8ou forme: "ozi4ia caracterului Llinie .n D+, coloana in D3M, sau loca4ia "ixelului Llinia raster .n 2+, coloana/"unct .n 5)M. Dac rezult (+ este 0, creionul o"tic nu este su"ortat. 2oor8onatele "ixelului "entru "ozi4ia creionului o"tic nu sunt exacte. 2oor8onatele F sunt .ntot8eauna un multi"lu 8e 1, "e cNn8 coor8onatele x sunt un multi"lu 8e > "entru rezolu4ia *10x100 9i multi"lu 8e @ "entru rezolu4ia 8e D>0x100.

16L

I=T 1D7' D37 &3)


,ntrare: 9e+ultate: (+ (3

Seteaz pagina actiB a$i!at


0=/, Numrul "aginii afi9ate.

Seteaz "agina activ afi9at.

Nici unul. (), S<, 5<, SC, DC.

9e"#stre mod#2#cate:

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Valor#le 'al#de de pa"#n 3A*5 Mod '#deo .a"#n# 'al#de 00/ 0HQ 0!/ 0HQ 01/ 0H* 0*/ 0H* 0>/ 0 0=/ 0 0D/ 0 0Q/ 0 0@/ 0 0O/ 0 0(/ 0 0D/ 0HQ 0?/ 0H* 0K/ 0H! !0/ 0H! HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Obser'a)##: 2on4inutul "aginii afi9ate nu este 8istrus cNn8 "agina curent este mo8ificat. De fa"t, se "oate scrie "e o

1=7

"agina inactiv, a"oi s se sc/imbe ob4inNn8 astfel mo8ificri ra"i8e ale ecranului. Kolosi4i serviciul 0K/ "entru a 8etermina "agina activ curent.

Eezi !i8 #;< 17h, 78h.

I=T 1D7' D?7 &?)

"eruleaz $ereastra n sus

Deruleaz fereastra s"ecificat, .n sus, cu numrul 8e linii s"ecificat. ,ntrare: (+ (3 0D/, Numrul 8e linii 8e 8erulat L8aca este 0, 9terge .ntreaga fereastrM,

*@ goaleH

tributele displaA-ului pentru liniile


2+ 23 D+ D3 Numrul Numrul Numrul Numrul liniei 8in col4ul stNnga sus, coloanei 8in col4ul stNnga sus, liniei 8in col4ul 8rea"ta #os, coloanei 8in col4ul 8rea"ta #os.

9e+ultate:

Nici unul. (), S<, 5<, SC, DC.

9e"#stre mod#2#cate:

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 3iniile sunt inserate .n "artea 8e #os a ecranului, mutNn8 toate liniile .n sus. Noile linii sunt scrise cu atributuele stabilite 8e valoarea 8in 5+. 3iniile care 8is"ar 8in "artea 8e sus a ferestrei se "ier8. Obser'a)##: Dac numarul 8e linii 8e 8erulat este s"ecificat ca fin8 0, .ntreaga fereastr este um"lut cu s"a4ii. Kolosi4i serviciul 0Q/ "entru a 8erula fereastra .n #os. (cest serviciu afecteaz numai "agina activ curent afi9at.

Eezi !i8 #;< 17h, 7Jh.

1=1

I=T 1D7' DJ7 &J)

"eruleaz $ereastra n jos

Deruleaz fereastra s"ecificat .n #os cu un numr s"ecificat 8e linii. ,ntrr#: (+ (3 5+ 2+ 23 D+ D3 9e+ultate: 0Q/, Numrul 8e linii 8e 8erulat L8ac este 0, 9terge .ntreaga fereastrM, (fi9eaz atributele "entru liniile libere, Numrul liniei 8in col4ul stNnga sus, Numrul coloanei 8in col4ul stNnga sus, Numrul liniei 8in col4ul 8rea"ta #os, Numrul coloanei col4ul 8rea"ta #os.

Nici unul. (), S<, 5<, SC, DC

9e"#stre mod#2#cate:

3iniile sunt intro8use .n "artea 8e sus, iar toate celelalte linii se 8e"laseaz .n #os. Noile linii sunt scrise cu caractere blanc avNn8 atributele 8ate 8e valoarea 8in 5+. 3iniile care 8is"ar .n "artea 8e #os a ferestrei se "ier8. Obser'a)##: Dac numrul 8e linii 8e 8erulat este 8at ca fiin8 0, .ntreaga fereastr este um"lut cu s"a4ii. Kolosi4i serviciul 0D/ "entru a 8erula fereastra .n sus. (cest serviciu afecteaz numai "agina activ curent.

Eezi !i8 #;< 17h, 7Eh

1=0

I=T 1D7' D>7 &>)

<ite!te caracterul &!i atributele) de la cursor


mo8ul textM atributele cursorului .n "agina

Ia"orteaz valoarea (S2CC 9i L.n caracterului 8e la loca4ia curent a s"ecificat. ,ntrare: 9e+ultate: (+ (+ (3 5+

0@/, (fi9eaz numrul "aginii Lnumai .n mo8urile textM. (tributele caracterului Lmo8 textM, 'aloarea (S2CC a caracterului. (), S<, 5<, SC, DC.

9e"#stre mod#2#cate:

Obser'a)##: -n mo8ul grafic, "agina afi9at nu mai trebuie s"ecificat. (tributele 9i caracterul curent "ot fi ob4inute "entru orice "agin, c/iar 9i 8ac "agina nu este cea activ, curent. Kolosi4i Serviciul 0O/ "entru a scrie un caracter cu atribute s"ecifice.

Eezi !i8 #;< 17h, 7Lh

1=6

I=T 1D7' DK7 &K)

Scrie un caracter &!i atributele) la cursor

(fi9eaz caracterul 8at, cu atributul s"ecificat, 8e un numr 8e ori 8at. ,ntrare: () (3 5+ 53 2) 0O/, 'aloarea (S2CC a caracterului, (fi9eaz "agina Lnumai .n mo8ul textM, (tribute/2uloare, De cNte ori se scrie caracterul.

9e+ultate:

Nici unul. (), S<, 5<, SC, DC.

9e"#stre mod#2#cate:

Obser'a)##: (fi9area .nce"e la loca4ia curent a cursorului "e "agina afi9at, s"ecificat, 8ar cursorul nu este mi9cat. -n mo8ul text, caracterele care se extin8 "este marginea 8in 8rea"ta ecranului sunt ata9ate liniiei urmtoare, .n mo8ul grafic, acest lucru nu se .ntam"l. (cest serviciu afi9eaz caracterele control ca "e ni9te caractere "rintabile, .n loc 8e ec/ivalentul acestora "entru controlul cursorului. De exem"lu, 8ac (3 este !*, atunci se va afi9a nota muzical, .n loc 8e 2arriage Ieturn. -n mo8urile grafice, 8ac atributul L53M este 8at cu bitul cel mai semnificativ .n !, se face un )&I .ntre bi4ii 8e culoare ai caracterului s"ecificat 9i bi4ii 8e culoare ai caracterului curent. Se "oate utiliza aceast o"4iune "entru scrierea 8e caractere iar a"oi 9tergerea acestora.

Eezi !i8 #;< 17h, 7 h #;< 17h, 71h #;< 17h, 16h #;< 17h, 7Kh.

1==

I=T 1D7' DA7 &1D)


,ntrare: (+ (3 5+ 2)

Scrierea caracterului la cursor


0(/, 'aloarea (S2CC a caracterului, (fi9eaz numarul "aginii Lnumai mo8 textM, Numrul 8e ori 8e scriere al caracterului.

(fi9eaz caracterul s"ecificat 8e un numr 8e ori 8at.

9e+ult:

Nici unul. (), S<, 5<, SC, DC. "e "agina

9e"#stre mod#2#cate:

(fi9area .nce"e la loca4ia curent a cursorului afi9at, s"ecificat, 8ar cursorul nu este miscat.

Obser'a)##: Kolosi4i Srviciul 0O/ "entru mo8ul grafic, 8eoarece "ermite s se sc/imbe culorile. -n mo8ul text, caracterele care se .ntin8 "este marginea 8rea"t a ecranului sunt li"ite liniiei urmatoare, .n mo8ul grafic acest lucru nu se .ntam"l. (cest serviciu afi9eaz caracterele control ca "e ni9te caractere "rintabile, .n loc 8e ec/ivalentul acestora "entru controlul cursorului. De exem"lu, 8ac (3 este !*, atunci se va afi9a nota muzical, .n loc 8e 2arriage Ieturn. Diferen4a 8intre acest serviciu 9i Serviciul 0O/ este ca, acest serviciu nu acor8 8re"tul 8e a s"ecifica octetul 8e atribute (cest serviciu folose9te atributul 8e la "ozitia curenta a cursorului "entru noul caracter.

Eezi !i8 #;< 17h, 7Lh #;< 17h, 71h #;< 17h, 16h.

1=B

I=T 1D7' DA7 &11)


Selecteaz afi9are. ,ntrare:

Seteaz paleta de culori


8e culori "entru 8iferitele mo8uri 8e

"aleta () 5+ 53

05/, C8Hul <aletei 8e culori L0 sau !, vezi mai #osM, 'aloarea culorii sau "aletei, "entru a fi utilizat cu CDHul 2ulorii L0 H*!M.

9e+ultate:

Nici unul. (), S<, 5<, SC, DC.

9e"#stre m#d#2#cate:

Daca 5+ LCDHul <aletei 8e 2uloriM este 0, atunci: . Seteaz culoarea 8e fon8 "entru rezolu4ia *10 x 100 . Seteaz culoarea c/enarului "entru mo8urile text . Seteaz culoarea frontal "entru rezolu4ia 8e D>0 x 100 53 con4ine culoarea 8e utilizat. ?W(Hul va seta culoarea 8e fon8 "entru rezolu4ia 8e D>0 x 100. 2Nn8 se seteaz culorile c/enarelor "entru mo8urile text, culorile !D H*! vor selecta setul 8e fon8 8e intensitate mare. Daca 5+ LCDHul "aletei 8e culoriM este !, atunci: . Selecteaz "aleta 8e culori "entru rezolu4ia 8e *10 x 100 'aloarea .n 53 8etermin care combina4ie 8e "alet s fie utilizat, 8u" cum este 8efinit mai #os: HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH .aleta 0 3B* - 05 Valoare .#(el 0uloare 0 2uloarea curent 8e fon8 ! 'er8e 1 Io9u * %aro HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH .aleta 1 3B* - 15 Valoare .#(el 0uloare 0 2uloarea curent 8e fon8 ! 2Fan

1=E

1 *

%agenta (lb

Eezi !i8 #;< 17h, 17h.

I=T 1D7' D<7 &1+)

Scriere pi%el

Scrie un "unct "ixel 8e culoare 8at la coor8onatele 8e ecran s"ecificate. ,ntrare: (+ (3 2) D) 5+ Nici unul. (), S<, 5<, SC, DC. 02/, 2uloare "ixel, <ozi4ia "e orizontal a "ixelului, <ozi4ia "e vertical a "ixelului, (fi9eaz numarul "aginii Lmo8urile grafice cu mai mult 8e o "aginM.

9e+ultate:

9e"#stre mod#2#cate:

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Valor# 'al#de Mode 0X3@or#+ontal5 $X3Vert#cal5 A*3.#(el 0olor5 B@3.a"e >umber5 0>/ 0H*!O 0H!OO 0H* 0=/ 0H*!O 0H!OO 0H* 0D/ 0HD*O 0H!OO 0H! 0D/ 0H*!O 0H!OO 0H!= 0HQ 0?/ 0HD*O 0H!OO 0H!= 0H* 0K/ 0HD*O 0H*>O 0H! 0H! !0/ 0HD*O 0H*>O 0H!= 0H! HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Obser'a)##: Dac culoarea "ixelului L(3M este 8at cu bitul cel mai semnificativ .n !, se face un )&I .ntre bi4ii 8e culoare ai caracterului s"ecificat 9i bi4ii 8e culoare ai caracterului curent. Se "oate utiliza aceast o"4iune "entru scrierea 8e caractere iar a"oi 9tergerea acestora.

Eezi !i8 #;< 17h, 7Dh.

1=J

I=T 1D7' D"7 &1-)


Ia"orteaz "recizate. ,ntrare:

<itire pi%el
culoarea (+ 2) D) 5+ "ixelului la coor8onatele 8e ecran

0D/ <ozi4ia "e orizontal a "ixelului <ozi4ia "e vertical a "ixelului (fi9eaz numrul "aginii Lmo8urile grafice cu mai mult 8e o "aginM 2uloarea "ixelului (), S<, 5<, SC, DC

9e+ultate:

(3

9e"#stre mod#2#cate:

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Valor# 'al#de Mode 0X3@or#+ontal5 $X3Vert#cal5 A*3.#(el 0olor5 B@3.a"e >umber5 0>/ 0H*!O 0H!OO 0H* 0=/ 0H*!O 0H!OO 0H* 0D/ 0HD*O 0H!OO 0H! 0D/ 0H*!O 0H!OO 0H!= 0HQ 0?/ 0HD*O 0H!OO 0H!= 0H* 0K/ 0HD*O 0H*>O 0H! 0H! !0/ 0HD*O 0H*>O 0H!= 0H! HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Obser'a)##: <entru mo8urile 0D/ "Nn la !0/, numarul "aginii este necesar s fie "recizat .n 5+.

Eezi !i8 #;< 17h, 7'h.

1=K

I=T 1D7' D57 &10)


Scrie avanseaz. un

Scrierea caracterului n modul TeletVpe &TT\)


la loca4ia curent a cursorului 9i .l

caracter (+ (3 53 5+

,ntrare:

0?/, 2aracterul 8e scris, 2uloarea Lnumai mo8urile graficeM, Numarul "aginii afi9ate Lnumai mo8urile textM.

9e+ultat:

>#c# unul.

Obser'a)##: -n mo8urile text, caracterul afi9at are atributele 8e afi9are ale caracterului anterior, care ocu" acea loca4ie 8e ecran. -n mo8urile grafice, este necesar s se "recizeze culoarea 8e front L.n 53M 8e fiecare 8at, cNn8 se utilizeaz acest serviciu. -n mo8urile text, caracterele "ot fi scrise s afi9eze alte "agini 8ecNt cea activ. (cest serviciu rs"un8e la valorile (S2CC ale caracterelor 0Q/ LbellM, 0@/ Lbacks"aceM, 0(/ Llinefee8M, 9i 0D/ Lcarriage returnM. Toate celelalte valori (S2CCau ca efect afi9area unui caracter, mutNn8 cursorul cu o "ozi4ie. Dac cursorul se afl la sfNr9itul unei linii, este ata9at urmatoarei linii. Dac cursorul este la sfNr9itul ultimei linii a ecranului, ecranul este 8erulat .n sus iar atributul 8e afi9are "entru .ntreaga nou linie este luat 8e la ultimul caracter al liniei anterioare.

Eezi !i8 #;< 17h, 7Lh #;< 17h, 7 h #;< 17h, 16h.

1=L

I=T 1D7' D*7 &13)

<ite!te modul Bideo curent

Ia"orteaz mo8ul vi8eo curent, numrul "ozi4iilor caracterelor "er linie .n acel mo8 vi8eo, 9i "agina curent afi9at. ,ntrare: 9e+ultte: (+ (3 (+ 5+ 0K/, %o8 vi8eo, Numr 8e coloane 8e caractere "er linie, Numrul "aginii active afi9ate. (), S<, 5<, SC, DC.

9e"#stre mod#2#cate:

Obser'a)##: 'ezi serviciul 00/ "entru un tabel 8e mo8uri vi8eo 9i cum se seteaz mo8ul vi8eo curent.

Eezi !i8 #;< 17h, 77h

1B7

I=T 1D7' 1D7 &1?)


,ntrare:

Setarea regi!trelor paletei la 5IA OEIA


(+ (3 !0/, %ubser'#c#u: 0XSeteaz registrul "aletei: 53 Iegistru "alet, 5+ 'aloarea 8e setat, !XSeteaz registrul culorii 8e contur: 5+ 'aloarea 8e setat, 1XSeteaz regi9trii "aletei 9i conturului: ?S:D) <ointerul listei 8e culori. *X(ctiveaz bitul intensificare/cli"ire: 53 0 X (ctiveaz intensificare, ! X (ctiveaz cli"ire.

Seteaz regi9trii 8e "aleta 9i contur la ?W(/'W(.

%ubser'#c## numa# VAA: QX53 B registrul culoare 8e luat .n 5+, @XIezult valoarea conturului .n 5+, OXIezult lista registrilor "aletei 9i valoarea conturului: ?S:D) "ointer ctre lista, !0/XSeteaz registrul culorii: 5) Iegistrul 8e setat, 2+,23,D3 ver8e/albastru/Iosu, !(/XCnforma4ie 8es"re culoarea "aginii: 53 %o8, 5+ <agin. 9e"#1tr## mod#2#cat#: (), S<, 5<, SC, DC.

Sunt !D regi9tri 8e "alete .n mo8urile 8e afi9are ?W(/'W( 9i un registru 8e contur. (cest serviciu ofer utilizatorului control asu"ra acestor regi9tri. %ubser'#c#ul 0 3%etarea 9e"#strulu# .alete#5

Kiecare 8in cei !D regi9trii 8e "alete "oate lua o valoare 8e la ! la D>. 'aloarea .n 5+ are forma urmtoare: 5it 5it 5it 5it 5it 5it 5it Q D = > * 1 ! X X H H H X X Iezervat Iezervat Io9u Secun8ar 'er8e Secun8ar (lbastru Secun8ar Io9u 'er8e

1B1

5it 0 X (lbastru 2ulorile secun8are au intensita4i 8e !/*, "e cNn8 culorile normale au o intensitate 8e 1/*. De exem"lu, 5+ B 01/ va "ro8uce ver8e, 5+ B !0/ va "ro8uce un ver8e "al, iar 5+ B 01/ va "ro8uce un ver8e intens. 'alorile im"licite "entru regi9trii "aletelor, care sunt aceea9i ca cei ai a8a"torului grafic color L2W(M, sunt 8efini4i mai #os: HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 9e"#stru de Valoare culoare 0uloare paleta 00/ 00/ Negru 0!/ 0!/ (lbastru 01/ 01/ 'er8e 0*/ 0*/ 2ian 0>/ 0>/ Io9u 0=/ 0=/ %ov 0D/ !>/ %aro 0Q/ 0Q/ (lb 0@/ *@ Wri inc/is 0O/ *O/ (lbastru 8esc/is 0(/ *(/ 'er8e 8esc/is 05/ *5/ 2ian 8esc/is 02/ *2/ Io9u 8esc/is 0D/ *D/ %ov 8esc/is 0?/ *?/ Walben 0K/ *K/ (lb intens HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH %ubser'#c#ul 1 3%etea+ re"#strul de contur5 (cest subserviciu seteaz culoarea conturului. este su"ortat numai .n mo8uri 8e 100 8e linii. Subserviciul

%ubser'#c#ul = 3%etea+ tot# re"#1tr## paletelor 1# de contur5 ?S:D) in8ic o list 8e !Q octe4i 8e culoare, .n care "rimii !D octe4i con4in in valori noi "entru cei !D regi9tri ai "aletelor 9i ultimul octet con4ine este noua valoare a registrului 8e contur. -n mo8 normal, bitul Q al octetului 8e atribut este folosit "entru a in8ica cli"irea. 2u acest subserviciu, bitul Q "oate in8ica cli"irea L53B!M sau intensitatea 8e fon8 L53B0M. %ubser'#c#ul < 30omut b#tul #ntens#tateBcl#p#re 5

1B0

>uma# VAA: %ubser'#c#ul C 30#te1te 'aloarea re"#str#lor de culoare5 %ubser'#c#ul 6 30#te1te 'aloarea conturulu#5 %ubser'#c#ul D 30#te1te re"#1tr## de culoare5 %ubser'#c#ul 10h 3%etea+ 9e"#1tr## de culoare5 %ubser'#c#ul 1=h 3Mod#2#c re"#1tr## de culoare5 %ubser'#c#ul 1<h 3%etea+ pa"#na5 %ubser'#c#ul 1Eh 30#te1te 9e"#strul de culoare5 %ubser'#c#ul 1Ch 3!ncarc 9e"#1tr## de culoare &n memor#e5 %ubser'#c#ul 1Ah 30#te1te #n2orma)#a de culoare a pa"#n##5

Eezi !i8 #;< 17h, 7*h.

1B6

I=T 1D7' 117 &1J)

Ieneratorul de caractere 5IA

%o8ific fonturile 8in a8a"torul grafic .n fonturi "re8efinite sau 8efinite 8e utilizator .n ambele mo8uri, text sau grafic. ,ntrare: (+ (3 !!/, %ubser'#c#u: 00/ X-ncarc fontul 8efinit 8e utilizator Lmo8uri textM: ?S:5< Cn8icator ctre tabelul 8e fonturi, 2) Numarare caractere, D) &ffsetHul tabelei 8e caractere, 53 5locul 8e fonturi 8e .ncarcat L0H*M, 5+ &cte4i "er caracter, 0!/ X -ncarc fontul 8e @ x!> "uncte Lsetul monocromM: 53 5locul 8e fonturi 8e .ncarcat L0H*M, 01/ X -ncarc fontul 8ubluH"unct, @ x @ 8e caractere Lmo8urile textM: 53 5locul 8e fonturi 8e .ncarcat L0H*M, 0*/ X Seteaz s"ecificatorul 8e bloc Lmo8urile textM: 53 5i4ii *, 1: Selecteaz blocul L0H*M 8e utilizat cNn8 bitul * al atributului este !, 5i4ii !, 0: Selecteaza blocul L0H*M 8e utilizat cNn8 bitul * al atributului este 0 , 0>/ X-ncarca fontul 8e @ x !D "uncte L'W(M: 53 5locul 8e fonturi 8e .ncarcat, !0/ X -ncarc fontul 8efinit 8e utilizator Lmo8urile textM: ?S:5< Cn8icator ctre tabelul 8e fonturi, 2) Numrul 8e caractere, D) &ffsetHul tabelei 8e caractere, 53 5locul 8e fonturi 8e .ncarcat L0H*M, 5+ &cte4i "er caracter.

!!/ X -ncarc fontul 8e @ x !> "uncte Lsetul monocromM 53 5locul 8e fonturi 8e .ncarcat L0H*M: !1/ X -ncarc fontul @ x @ 8ubluH"unct Lmo8urile textM 53 5locul 8e fonturi 8e .ncarcat L0H*M, 10/ X -ncarc fontul 8e @ x @ "uncte 8efinit 8e utilizator Lmo8urile graficeM:

1B=

?S:5< Cn8icator ctre tabelul grafic al utilizatorului "entru caracterele grafice !1@H1==. CNT !K/ este setat ctre acest in8icator. 1!/ X -ncarca fontul 8e caractere 8efinit 8e utilizator Lmo8urile graficeM, ?S:5< Cn8icator ctre tabelul grafic "entru caracterele grafice 0H1==.CNT >*/ 8 in8icatorul. 2) &cte4i "er caracter, 53 Numrul 8e linii: 00/ X D3 con4ine numrul 8e linii, 0!/ X !> L0?/M linii, 01/ X 1= L!O/M linii, 0*/ X >* L15/M linii. 11/ X -ncarc fontul I&% 8e @ x !> "uncte Lmo8urile graficeM: 53 Numrul 8e linii L(cela9i format ca subserviciul 1!/M, 1*/ X -ncarc fontul I&% @ x @ 8ubluH"unct Lmo8urile graficeM: 53 Numrul 8e linii L(cela9i format ca subserviciul 1!/M, 1>/ X-ncarc fontul @ x !D 8e caractere: 53 Numrul 8e linii L(cela9i format ca Subserviciul 1!/M, *0/ X Iezult informa4ii 8es"re font: 5+ Ti"ul 8e "ointer care rezult: 00/ X <ointerul curent CNT !K/, 0!/ X <ointerul curent CNT >>/, 01/ X <ointerul I&% @ x !> "uncte , 0*/ X <ointerul I&% @ x @ 8ubluH"unct, 0>/ X <ointerul I&% @ x @ 8ubluH"unct LsusM, 0=/ X <ointerul I&% text alternativ O x !>, 0D/ H @ x !D L'W(M, 0Q/ H O x !D L'W(M. 9e+ultate: LNumai Subserviciul *0/ X D informa4ii 8es"re fontM, ?S:5< Cn8icator ctre tabelul s"ecificat .n 5+, 2) 3inii "er caracter, D3 3inii.

Eezi !i8 #;< 17h, 10h.

1BB

I=T 1D7' 1+7 &1>)

*unc4ii speciale 5IA


9i "ermite selectarea unei

Iezult informa4ii asu"ra ?W( rutine alternative ?W( <rint Screen. ,ntrare: (+ 53

!1/, %ubser'#c#u: !0/ X Iezult informa4ia ?W(, 10/ H Selecteaz rutina ?W( <rint Screen alternativ. >uma# VAA: *0/ H Seteaz numrul 8e linii 0H100, 0H*=0, 1H>00. Se activeaz 8u" sc/imbarea mo8ului, *!/ H () B 0/! HY "ermite/interzice .ncarcarea "aletei o8at cu noul mo8, *1/ H (3 B 0/! HY 'i8eo <ornit/&"rit, **/ H (3 B 0/! HY -nsumarea scale 8e gri <ornit/&"rit, *>/ H (3B0/! HYScalarea cursorului cu fontul "ornit/o"rit, *=/ X Sc/imb .ntre "laca vi8eo 9i vi8eo 8e "e "laca 8e baz: (3 B 0 a8a"tor "ornit, es:8x salveaz starea, B ! vi8eo 8e "e "laca 8e baz "ornit, B 1 vi8eo activ o"rit, es:8x salveaz starea, B * vi8eo inactiv "ornit, es:8x salveaz starea, *D/ X <orne9te/o"re9te ecranul : (3 B 0/! HY ?cran "ornit/o"rit. Lnumai "entru Subserviciul !0/M: 5+ %o8ul rezultat: 00/ %o8 color L8omeniu 8e a8resare *Dx/M, 0!/ %o8 monocrom L8omeniu 8e a8resare *5x/M, 53 %emorie ?W( 00/ D>U, 0!/ !1@U, 01/ !O1U, 0*/ 1=DU, 2+ 5i4ii a8a"torului, 23 Setrile comutarii.

9e+ultate:

Eezi !i8 #;< 17h, 11h.

1BE

I=T 1D7' 1-7 &1K)

Scrierea unui !ir de caractere

Scrie un 9ir 8e caractere cu atributele "recizate "e orice "agina afi9at. ,ntrare: (+ (3 5+ 53 2) D+ D3 ?S:5< !*/, Subserviciul L0H*M, (fi9eaz numrul "aginii, (tribute LSubseviciile 0 si !M, 3ungimea 9irului, <ozi4ia liniei un8e urmeaz s fie scris 9irul, <ozi4ia coloanei un8e urmeaz s fie scris 9irul, Cn8icatorul ctre 9irul 8e scris.

9e+ultate:

Nici unul. (), S<, 5<, SC, DC.

9e"#stre mod#2#cate:

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Obser'a)##: (cest serviciu are > subservicii 8u" cum urmeaz: (3B00/: ("lic tuturor caracterelor atributele 8in 53, nu mo8ific cursorul, (3B0!/: ("lic tuturor caracterelor atributele 8in 53, mo8ific cursor, (3B01/: Kolose9te atributele 8in sir, nu mo8ific cursorul, (3B0*/: Kolose9te atributele 8in 9ir, mo8ific cursorul.

Eezi !i8 #;< 17h, 7Lh #;< 17h, 7 h #;< 17h, 71h.

1BJ

I=T 1D7' 107 &+D) Utilizarea L<"


<ermite utilizarea 8e fonturi 8efinite 8e utilizator 9i sc/imbarea atributului 8e intensitate mare .ntrHun alt atribut "e un ecran 32D. ,ntrare: (+ !>/, (3 %ubser'#c#u: 00/ H -ncarc fontul "recizat 8e utilizator: ?S:DC Cn8icator ctre "rimul tabel 8e fonturi, 2) Numrul 8e caractere 8e stocat L! H 1=DM, D) &ffsetHul caracterului .n bufferHul 8e fonturi 8in I(%, 53 5locul 8e fonturi 8e .ncarcat: 0 X Kont "rinci"al Lbloc 0M, ! X Kont alternativ Lbloc !M, 5+ &cte4i "er c/aracter L! H 1==M, 0!/ H -ncarc blocul 8e fonturi im"licit 8in I&%: 53 5locul 8e fonturi 8e .ncrcat: 0 X Kont "rinci"al Lbloc 0M, ! X Kont alternativ Lbloc !M, 01/ X Transformarea atributului 8e intensitate mare: 53 Sc/ema 8e transformare: 0 H Cgnor atributul 8e intensitate mare, ! X Transform .n vi8eo invers, 1 H Transform .n subliniat, 9e+ultate:

6 & "electeaz font alternativ.


Nici unul.

Eezi !i8 #;< 17h, 1Bh.

1BK

I=T 1D7' 137 &+1) <ite!te caracteristicile $izice ale adaptorului gra$ic
Iezult ti"ul 8e a8a"tor vi8eo alternativ 9i un tabel care 8escrie caracteristicile ecranului curent. ,ntrare: 9e+ult: (+ () !=/. Ti"ul 8e a8a"tor vi8eo alternativ: 00/ X Nici un a8a"tor alternativ, =!>0/ X 32D, =!=*/ X Ti"ul 2W( 8e afi9are, =!=!/ X Ti"ul monocrom 8e afi9are, Cn8icator ctre tabelul 8e Q cuvinte al a8a"torului vi8eo curent Lvezi mai #osM. Korma tabelului a8a"torului vi8eo este 2uvNnt 2uvNnt 2uvNnt 2uvNnt 2uvNnt 2uvNnt Numrul mo8elului vi8eo, <ixeli "e metru "e vartical, <ixeli "e metru "e orizontal, Total "ixeli "e vertical, Total "ixeli "e orizontal, -nal4imea "ixel .n micrometrii L8irec4ie verticalM, 2uvNnt Q X 3a4imea "ixel .n micrometrii L8irec4ie orizontalM, ! 1 * > = D X X X X X X

?S:DC

urmtoarea:

Obser'a)##:

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 4abelul adaptoarelor '#deo compat#b#le .0 0u'ant Monocrom 0AA *0$ 30AA5 *0$ 3Monocrom5 ! 1 * > = D Q =!=!/ 0 0 0 0 0 0 =!=*/ 0>O@/ 0(!=/ 002@/ 01@0/ 0*=1/ 0!@>/ =!>0/ 0@?!/ 0O@Q/ 002@/ 01@0/ 0!Q1/ 0!Q1/ =!>0/ 0 0 0 0 0 0

Eezi !i8 #;< 17h, 1=h.

A=5HA 1BL

Lista $unc4iilor sistemului de operare I=T +17


8unciile sistem reprezint o colecie de subrutine standard foarte performante, care pot fi chemate de un program n limbaj de asamblare prin intermediul ntreruperii 01h. Diferenierea ntre ele se face prin valoarea care se ncarc n prealabil n registrul @, conform tabelului de mai jos. A@ "escriere 71 'itete un caracter de la "<D#; 7B "crie un caracter la imprimant 7J 'itete direct un caracter de la "<D#; far ecou A@ "escriere 70 "crie un caracter la "<D2?< 7E #ntrareI#eire 'onsol 7K 7 'itete un caracter de la "<D#; fr ecou #ntrare bufferat

7L "crie un ir la "<D2?< 7* 7D 1L 0 0' 6B 6E 6 fl starea "<D#; 9eset dis> fl unitatea curent implicit fl data sistemului fl ora sistemului fl vectorul de nterupere fl spaiul liber de pe disc Zterge un subdirector

7' Solete bufferul de la "<D#; 71 "electeaz unitatea implicit 0B "eteaz vectorul de ntrerupere 0* "eteaz data sistemului 0D "eteaz ora sistemului 67 fl versiunea D2"

01 "eteaza fanionul de verificare

6L 'reaz un subdirector 6* "eteaz directorul de lucru 6D Deschide un fiier 68 'itete un fiier =1 Zterge un fiier =6 B= BJ flI"eteaz atributele fiierelor fl fanionul de verificare flI"eteaz data fiierului =' #ese din program

6' 'reaz un fiier 61 -nchide un fiier =7 "crie un fiier =0 'aut un fiier =J =D fl directorul curent fl return code

BE 9edenumete fiierul

1E7

I=T +17' D17 <IT5]T5 U= <A2A<T52 "5 LA I=T2A25A STA="A2"' <U 5<(U
Intrare8 @R71h. 5$ect) , R caracter citit. 2bservaii)

g'Ig*rea> sunt testateH g+ comut starea fanionului intern D2" al ecoului la imprimantH gM nu este interpretat, aadar nu cauzeaz un 128. Dac intrarea este redirecionat, caracterul este trimis n ecou la ieirea standard.

3ezi i) @R7Eh, @R7Jh, @R7Kh, @R7 h.

I=T +17' D+7 WS<2I5 U= <A2A<T52 LA I5]I25A STA="A2"


Intrare) @R70hH D, R caracter de scris. 5$ect) , R ultimul caracter ieit. 2bservaii)

g'Ig*rea> sunt testateH ultimul caracter ieit va fi caracterul din D, e!cepie fc(nd D,R7Lh la intrare, caz n care ,R07h deoarece tab-urile sunt nlocuite cu blan>-uriH dac intrarea standard este redirecionat ntr-un fiier, nu se ine cont de nici o eroare $protecie la scriere, mediu de stocare plin, etc.%.

3ezi i) @R7Eh, @R7Lh.

I=T +17' D37 W S<2I5 U= <A2A<T52 LA I P2I A=T^


Intrare) @R7Bh D, R caracter de printat.

1E1

2bservaii)

se testeaz imprimanta pentru g'Ig*rea>H "<D+9; este de obicei primul port paralel, dar poate fi redirectat sub D2" 0N H Dac imprimanta e ocupat, aceast funcie va atepta.

3ezi i) #;< 1JI @R77h.

I=T +17' D?7 W I5]I25 "I25<T^ LA <(=S(L^


Intrare) @R7EhH D, R caracter $e!cepie 88h%. 5$ect) , R caracter ieit. 2bservaii) nu testeaz g'Ig*rea>. 3ezi i) @R70h, @R7Lh.

I=T +17' D?7 W I=T2A25 "I25<T^ "5 LA <(=S(L^


Intrare) @ R 7EhH D, R 88h. 5$ect)

M8 setat dac nu e!ist caracter disponibil i , R 77hH M8 ters dac e!ist caracter disponibil , R caracter citit.

2bservaii)

g'Ig*rea> nu sunt testateH dac rezultatul returnat este 77h, utilizatorul a apsat o tast cu un cod de tast e!tins, care se va returna la urmtoarea apelare a acestei funcii. 1E0

Dei returnarea lui ,R77h atunci c(nd nici un caracter nu e disponibil nu este documentat, unele programe se bazeaz pe acest comportament.

3ezi i) @R7*h.

I=T +17' DJ7 W I=T2A25A "I25<T^ A U=UI <A2A<T52' *^2^ 5<(U


Intrare) @R7JhH 5$ect) , R caracter citit de la intrarea standard.

2bservaii) nu testeaz g'Ig*rea>. 3ezi i) @R71h, @R7Eh, @R7Kh, @R7 h.

I=T +17' D>7 W I=T2A25 <A2A<T52 *^2^ 5<(U


Intrare) @R7KhH 5$ect) , R caracter citit de la intrarea standard. 2bservaii) g'Ig*rea> sunt testate. 3ezi i) @R71h, @R7Eh, @R7Jh, @R7 h, @RE=h.

I=T +17' DK7 W S<2I5 U= ]I2 LA I5]I25A STA="A2"


Intrare) @R7LhH D")DC -F ir terminat cu `a`. 5$ect) , R 0=h. 2bservaii) g'Ig*rea> sunt testate. 3ezi i) @R70h, @R7EhQ2?<+?<Q. 1E6

I=T +17' DA7 W I=T2A25 AU**52AT^


Intrare) @R7 hH D")DC -F buffer $vezi mai jos%. 5$ect) buffer umplut cu informaia introdus de utilizator. 2bservaii)

g'Ig*rea> sunt testate H citete de la intrarea standard.

3ezi i) @R7'h. 8ormatul buffer-ului de intrare D2") Inde% 77 71 70 rime "escriere 1 1 ; ;umrul ma!im de caractere ce pot intra n buffer ;umrul ma!im de caractere de de la ultima intrare care pot fi rechemate sau numrul de caractere din citirea actual, fr '9 'aracterul actual citit, incluz(nd '9-ul final

I=T +17' DA7 W A*L^ STA25A ST"I= &Intrare standard)


Intrare) @R7*hH 5$ect8

, R 77h dac nu e!ist caracter disponibilH , R 88h dac caracterul este disponibil.

2bservaii) g'Ig*rea> sunt testate. 3ezi i) @R7EhQ#;<9 91Q. 1E=

I=T +17' D<7 - I(L5]T5 AU**52UL ]I <IT5]T5 "5 LA I=T2A25A STA="A2"


Intrare8

@R7'hH , R funciea de e!ecutat dup golirea bufferuluiH celelalte registre corespunztoare funciei de intrare.

5$ect8 corespunztor funciei de intrare specificate. 2bservaie) dac , nu are una dintre valorile 71h,7Eh,7Jh,7Kh, sau 7 h, bufferul e golit dar nu este ateptat nici o intrare. 3ezi i) @R71h, @R7EhQ#;<9 91Q, @R7Jh, @R7Kh, @R7 h.

I=T +17' D"7 - 25S5TA25A "IS<ULUI


Intrare) @R7DhH 2bservaii) ceast funcie scrie pe disc toate bufferele modificate, dar nu actualizeaz informaia directoarelor. 3ezi i) CRBD71h.

I=T +17' D57 W S5L5<T5AQ^ U=ITAT5A I PLI<IT^


Intrare8 @R71hH D, R noua unitate implicit $7R ), 1R*), etc%. 5$ect8 , R numrul unitilor potenial valide. 2bservaii) valoarea ntoars reprezint valoarea corespunztoare ultimei uniti prezente. 1EB

3ezi i) @R1Lh, @R6*h, @RD*h.

I=T +17' 1K7 - A*L^ U=ITAT5A <U25=T^ I PLI<IT^


Intrare) @R1LhH 5$ect8 , R unitate $7R ), 1R*), etc%. 3ezi i) @R71h, @R=Jh, @R**h.

I=T +17' +37 - S5T5AQ^ E5<T(2UL "5 N=T252UP525


Intrare8

@R0BhH , R numrul ntreruperiiH D")DC -F noua tratare a ntreruperii.

2bservaii) aceast funcie este de preferat modificrii directe a tabelei vectorilor de ntrerupere. 3ezi i) CR0B71h, @R6Bh.

I=T +17' +A7 W A*L^ "ATA SIST5 ULUI


Intrare8 @R0 hH 5$ect8 'C R an $1LK7-07LL% D@ R lun D, R zi $77hRDuminic%. 3ezi i) @R0*hQD2"Q, @R0'h, @R1Jh. 1EE , R zi a sptm(nii

I=T +17' +A7 W S5T5AQ^ "ATA SIST5 ULUI


Intrare8 @R0*hH 'C R an $1LK7-07LL% D@ R lun D, R zi. 5$ect8 , R 77 operaie reuitH 88h dat invalid, data sistemului neschimbat. 2bservaie) D2" 6.6N seteaz deasemenea ceasul din ':2"H 3ezi i) @R0 h, @R0Dh.

I=T +17' +<7 W A*L^ (2A SIST5 ULUI


Intrare8 @R0'hH 5$ect8 '@ R ora ', R minute D@ R secunde D, R 1I177 secund. 2bservaie) pe majoritatea sistemelor, rezoluia ceasului sistem este de BI177sec, aa c valoarea lui D, nu se incrementeaz cu 1 pe unele sisteme, acesta return(nd ntotdeauna 77h. 3ezi i) @R0 h, @R0Dh, @R1Jh.

I=T +17' +"7 W S5TA25A (25I SIST5 ULUI


Intrare8 @R0DhH '@ R ora ', R minute D@ R secunde D, R 1I177 secund. 5$ect8 , R 77h operaiune reuitH 88h dac valoarea este invalid, ora sistemului rm(ne neschimbat.

1EJ

2bservaie) De la D2" 6.6 in sus , funcia seteaz si ceasul din ':2". 3ezi i) @R0*hQD2"Q, @R0'h.

I=T +17' -D7 W A*L^ E52SIU=5A "5 "(S


Intrare8 @R67hH , R ce s ntoarc n *@ $77h 21: numr, 71h localizarea sistemului de operare%. 5$ect8

, R numrul superior al versiunii $77h dac D2" 1.!%H @ R numrul inferior al versiuniiH *,)'C R seria utilizatorului pe 0=-biti $majoritatea versiunilor nu folosesc aceasta% dac D2" ^B or ,R77hH *@ R;umr furnizorului sistemului dac D2" BN i ,R71hH *@ R ,ocalizarea sistemului) 7Kh in 92:, 17h in C: .

2bservaii)

D2" =.71 i =.70 se identific ca versiune =.77H :"-D2" E.01 raporteaza versiunea ca E.07H versiunea E.00 returneaz valoarea corectH 4indo5sLBN returneaz versiunea J.77 $ :"-D2"-ul asociat%.

3ezi i) CR6777hI*CR6777h, CR667Eh, CR==B0h.

I=T +17' -37 W A*L^ E5<T(2UL "5 N=T252UP525


Intrare) @R6BhH , R numrul ntreruperii.

5$ect) 1")*C -F tratarea ntreruperii curente. 3ezi i) @R0Bh, CR0B76h.

1EK

I=T +17' -?7 W A*L^ SPAZIUL LIA52 "5 P5 "IS<


Intrare8 @R6EhH D, R numrul unitii $7Rimplicit, 1R ), 0R*),6R'),etc%. 5$ect8

C R 8888h dac unitatea este invalidH C R sectoare per cluster *C R numrul de clustere libere 'C R bAtes per sector DC R numr total de clusteri per unitate.

2bservaii)

spaiul liber pe unitate n bAtes este C T *C T 'C H spaiul total pe unitate n bAtes este C T 'C T DCH clusterii indisponibili sunt considerai a fi utilizai H aceasta funcie nu d rezultate corecte pe unitile 'D-92:H folosii n schimb CR==70h pentru 'D-92:.

3ezi i) @R1*h, @R1'h, CR==70hQ'D-92:Q.

I=T +17' -K7 - <255AQ^ U= "I25<T(2


Intrare8 @R6LhH D")DC -F "'##M numele cii. 5$ect8

'8 ters dac C a fost tersH '8 setat n caz de eroare C R cod eroare $76h,7Bh%.

2bservaii)

<ooate directoarele din calea dat trebuie s e!iste, mai puin ultimulH eueaz dac directorul printe este rdcina i este plinH D2" 0.!-6.6 permite crearea unui director suficient de ndeprtat n structura arborescent de directoare, dar nu din directorul curent dac calea depete E= de caractere. 1EL

3ezi i) @R6 h, @R6*h, @REDh.

I=T +17' -A7 - ]T52I5 "I25<T(2UL


Intrare8 @R6 hH D")DC -F "'##M calea directorului de ters. 5$ect8

'8 ters dac C a fost tersH '8 setat n caz de eroare C R cod eroare $76h,7Bh,7Eh,17h%.

2bservaii) directorul trebuie s fie gol $s conin numai intrri `.` i `..` %. 3ezi i) @R6Lh, @R6*h.

I=T +17' -A7 - S<@I AA "I25<T(2UL <U25=T


Intrare8 @R6LhH D")DC -F "'##M calea directorului ce va deveni curent $ma!im E= bAtes% 5$ect8

'8 ters dac C a fost ters '8 setat n caz de eroare C R cod eroare $76h%

2bservaii) dac numele directorului include litera unei uniti, unitatea curent nu este schimbat ci numai directorul curent pe unitatea respectiv. 3ezi i) @R=Jh, @RJ1h,#;< 08I CR117Bh.

I=T +17' -<7 W <25AQ^ SAU T2U=<@5AQ^ *I]I52UL


1J7

Intrare8

CR6'h 'C R atribute fiierH D")DC -F "'##M nume fiier.

5$ect8

'8 ters dac a reuit, C R tratare fiierH '8 setat n caz de eroare, C R cod eroare $76h,7=h,7Bh%.

2bservaii) dac un fiier cu numele dat e!ist este trunchiat la dimensiunea zero. 3ezi i) @R1Eh, @R6Dh, @RB h, @RB*h.

I=T +17' -"7 W "5S<@I"5 *I]I52UL 5HIST5=T


Intrare8 CR6DhH , R modurile de acces i partajare) *it 7..0) :odul de acces) 777 R numai citireH 771R numai scriereH 717 R citireIscriere. *it 6) rezervatH *it =..E) :odul de partajare) 777 R modul compatibilH 771 R numai programul curent are accesH 717 R interzice scrierea $alte programe pot doar citi fiierul%H 711 R interzice citirea $alte programe pot doar s scrie in fiier%H 177 R permite totul $alte programe pot scrie i citi fiierul%. *it J) "e motenesc proprietile. D")DC -F "'##M nume fiier. 5$ect8

'8 ters dac a reuit, C R tratare fiierH '8 setat n caz de eroare C R cod eroare $71h,70h,76h,7=h,7Bh,7'h,BEh%H 71h R nu e!ista soft5are pentru partajareH 1J1

70h R fiierul nu este gsitH 76h R calea nu este gasita sau fiierul nu e!istH 7=h R nu e!ista program de tratare a fisieruluiH 7Bh R accesul interzisH 7'h R modul de acces specificat nu este permis. 2bservaii) #ndicatorul fiierului este setat la nceputul fiieruluiH 8iierele trunchiate motenesc de la fiierul printe din care au fost trunchiateH restriciile de acces i partajareH fiierele pot fi deschise chiar dac li se dau atribute hidden sau sAstem. 3ezi i) @R78h, @R6'h, CR=671h, CRBD77h.

I=T +17' -57 W N=<@I"5 *I]I52UL


Intrare8 @R61hH *C R tratare fiier 5$ect8

'8 ters dac a reuit, C tersH '8 setat n caz de eroare, C R cod eroare $7Eh%.

2bservaie) odat ce fiierul a fost scris, etichetele cu timpul i data creerii fiierului sunt actualizate la valorile curente, iar intrarea n director este reactualizat. 3ezi i) @R17h, @R6'h, @R6Dh.

I=T +17' -*7 - <IT5]T5 "I= *I]I52 SAU "ISP(QITIE


Intrare8

@R68hH *C R nume fiierH 'C R numr bAtes de cititH D")DC -F buffer de date.

5$ect8 1J0

'8 ters dac operaiunea a reuit - C R numr de bAtes citii $7 dac 128 apare naintea chemrii funciei%H '8 setat n caz de eroare C R cod eroare $7Bh,7Eh%.

2bservaii)

datele sunt citite ncep(nd de la locaia curent din fiier, iar poziia locaiei curente este reactualizat dup o citire reuitH rezultatul returnat n C poate fi mai mic dec(t cel solicitat n 'C dac survine o citire paralH dac se citete de la '2;, citirea se oprete la primul '9.

3ezi i) @R0Jh, @R=7h, @RL6h.

I=T +17' 0D7 - S<2I5 N=T2-U= *I]I52 SAU "ISP(QITIE


Intrare8

@R=7hH *C R nume fiierH 'C R numr bAtes de scrisH D")DC -F date de scris.

5$ect8

'8 ters dac operaiunea a reuit - C R numr de bAtes scris la actuala scriereH '8 setat n caz de eroare - C R cod eroare $7Bh,7Eh%.

2bservaii)

Dac 'C este zero, datele nu sunt scrise, iar fiierul este trunchiat sau e!tins p(n la poziia curentH datele sunt scrise ncep(nd de la poziia curent, iar poziia n fiier este reactualizat dup fiecare scriere reuitH cauza uzual pentru care se returneaz C ^ 'C este lipsa de spaiu liber pe disc. 1J6

3ezi i) @R0Kh, @R68h.

I=T +17' 01@ - ]T52I5 *I]I52UL


Intrare8

@R=1hH D")DC -F "'##M nume fiierH ', R masca atributului fierului de ters.

5$ect8

'8 ters dac operaiunea a reuit, C tersH '8 setat n caz de eroare, C R cod eroare $70h,76h,7Bh%.

2bservaii)

$D2" 6.1N% caracterele de nlocuire sunt permise dac sunt apelate via CRBD77h, caz n care specificaiile fiierului trebuie s fie valide $cum sunt citite cu funcia @RE7h%, i numai fiierele a cror atribute se potrivesc cu masca atributelor din ', sunt terseH D2" nu terge datele din fiierH pur i simplu fiierul devine inaccesibil deoarece lanul de locaii asociate fiierului este ters din 8 <H tergerea unui fiier deschis poate conduce la erori n sistemul de fiiere.

3ezi i) @R16h, CR=671h, CR=6K7h, CRBD77h, @RE7h, @RJ1h.

I=T +17' 0+7 - S5T5AQ^ P(QIZIA <U25=T^ N= *I]I52


Intrare8

@R=0hH , Roriginea deplasrii) 77h nceputul fiierului 71h poziia curent n fiier 70h sf(ritul fiieruluiH *C R nume fiierH 'C)DC R deplasarea $'C octetul mai semnificativ, DC octetul mai puin semnificativ%.

1J=

5$ect8

'8 ters dac operaiunea a reuit, DC) C R noua poziie n fiier n bAtes de la nceputul fiierului H '8 setat n caz de eroare, C R cod eroare $71h,7Eh%.

2bservaii)

+entru originile 71h i 70h, deplasarea este un numar cu semn, deci indicatorul ar putea fi poziionat naintea nceputului fiieruluiH nici o eroare nu este semnalat n acest caz, dar ncercrile ulterioare de intrareIieire vor produce eroriH dac noua poziie este dincolo de sf(ritul fiierului, fiierul va fi e!tins la urmtoarea scriere $vezi @R=7h%.

3ezi i) @R0=h.

I=T +17' 0- - A*L^ AT2IAUT5L5 *I]I52ULUI


Intrare8

@R=6hH , R 77hH D")DC -F ;ume fiier $ "'##M%.

5$ect8

'8 ters dac operaiunea a reuit, 'C R atributele fiieruluiH '8 setat n caz de eroare, C R cod eroare $71h,70h,76h,7Bh%.

2bservaie) 4indo5s for 4or>groups returneaz cod eroare 7Bh $acces nepermis% n locul codului de eroare 70h $fiierul nu a fost gsit% atunci c(nd se ncearc aflarea atributelor unui fiier ine!istent. 3ezi i) CR=671h, CR=617h, CRJ1=6h, @R*Eh.

I=T +17' 0- W S5T5AQ^ AT2IAUT5L5 *I]I52ULUI


1JB

Intrare8

@R=6hH , R 71hH 'C R noile atribute fiierH D")DC -F ;ume fiier $ "'##M%.

5$ect8

'8 ters dac operaiunea a reuit, C tersH '8 setat n caz de eroare, C R cod eroare $71h,70h,76h,7Bh%.

2bservaii)

nu va schimba eticheta de volum a directorului sau biii atributelorH directorului, dar va schimba ali bii ai atributelor din directorH :"-D2" =.71 raporteaz fiierul nchis dac acesta era deschis.

3ezi i) CR=677h, CR=611h, CRJ1=6h,#;< 08I CR1171h. '(mpul biilor pentru atributele fiierelor) Ai4i J E B = 6 0 1 7

"escriere +artajabil - arhiv director eticheta volum sistem ascuns numai citire

I=T +17' 0J7 W A*L^ "I25<T(2UL <U25=T


Intrare8

@R=JhH D, R numr unitate $77h R implicit, 71h R ), etc%H D")"# -F buffer de E= bAtes pentru numele cii $ "'##M %.

5$ect8

'8 ters dac operaiunea a reuitH '8 setat n caz de eroare, C R cod eroare $78h%.

1JE

2bservaii)

'alea returnat nu include unitatea sau primul bac>slashH :ulte din produsele :icrosoft 4indo5s se bazeaz pe faptul c 7177h c(nd operaiunea a reuit.

C devine

3ezi i) @R1Lh, @R6*h, @RJ1h.

I=T +17' 0<7 W I5]I25 <U <(" "5 *I=ALIQA25


Intrare8 @R='hH , R cod finalizare. 5$ect) nu se mai ntoarce. 2bservaii) n afara cazului n care procesul este propriul su printe, toate fiierele sunt nchise i toat memoria aparinnd procesului este eliberat. 3ezi i) @R77h, @R0Eh, @R=*h, @R=Dh.

I=T +17' 0"7 W A*L^ <("UL 25TU2=AT &=IE5LUL 52(2II)


Intrare8 @R=DhH 5$ect8

@ R tip terminare $77Rnormal, 71h control-' abandon, 70hRabandon eroare critic, 76h termin i rm(ne resident%H , R codul returnat.

2bservaii)

1JJ

,ocaia n care sistemul D2" stocheaz codul returnat este tears dup ce a fost citit de aceast funcie, aadar codul returnat poate fi aflat o singur datH '2:: ;D.'2: stocheaz codul returnat la ultima comand e!tern, ca nivel al erorii

3ezi i) @R=*h, @R='h, @RK h.

I=T +17' 307 W A*L^ STA25A *A=I(=ULUI "5 E52I*I<A25


Intrare8 @RB=hH 5$ect8 , R fanion de verificare $77hRoff, 71hRon, deci toate scrierile pe disc sunt verificate dup scriere%.

3ezi i) @R01h.

I=T +17' 3?7 - 25"5=U 5]T5 *I]I52UL


Intrare8

@RBEhH D")DC -F ;umele e!istent al fiierului $ "'##M fr caractere speciale%H 1")D# -F ;oul nume al fiierului $ "'##M fr caractere speciale%H ', R masca atributelor.

5$ect8 '8 ters dac operaiunea a reuitH '8 setat n caz de eroare, CR cod eroare $70h,76h,7Bh,11h%. 2bservaii) +ermite mutarea ntre directoare cu acelai volum logicH aceast funcie nu seteaz atributul arhivH fiierele deschise nu vor fi redenumiteH $D2" 6.7N% permite redenumirea directoarelor.

1JK

I=T +17' 3J7 W A*L^ "ATA ULTI 5I S<2I52I N= *I]I52


Intrare8

@RBJhH , R 77h $ fl attributele%H *C R nume fiier.

1fect)

'8 ters dac operaiunea a reuit, 'C R file`s time DC R file`s dateH '8 setat n caz de eroare, C R cod eroare $71h,7Eh%.

3ezi i) CRBJ71h. '(mpul biilor pentru ora crerii fiierului) Ai4i 1B-11 17-B =-7

"escriere ora

minutul secunda

'(mpul biilor pentru data crerii fiierului) Ai4i 1B-L K-B =-7

"escriere anul $1LK7-% luna ziua

I=T +17' 3J7 W S5TA25A "AT5I ULTI 5I S<2I52I N= *I]I52


Intrare8

@RBJhH , R71h $"eteaz atributele%H *C R nume fiierH 'C R noua orH DC R noua dat.

5$ect8 1JL

'8 ters dac operaiunea a reuitH '8 setat n caz de eroare C R cod eroare $71h,7Eh%.

3ezi i) CRBJ77h.

A=5HA 0 2ezolBrile programelor


.ro"ramul =.1 .mo8el small .stack !00/ .co8e start: mov mov mov mov al,OO/ bl,0((/ cl,055/ 8l,022/

, terminate "rogram term: #m" term en8 start

.ro"ramul =.= .mo8el small .stack !00/ .co8e start: mov al,11/ mov bl,al 1K7

mov b/,al mov cl,al mov 8/,al , terminate "rogram term: #m" term en8 start .ro"ramul =.< .mo8el small .stack !00/ .co8e mov ax,!!11/ mov bx,**>>/ mov cx,==DD/ mov 8x,QQ@@/ #m" term en8 start

start:

term:

.ro"ramul =.F .mo8el small .stack !00/ .co8e mov bx,!!11/ mov cx,**>>/ mov 8x,bx mov ax,cx #m" term en8 start

start:

term:

.ro"ramul =.E 1K1

start: term:

.mo8el small .stack !00/ .co8e mov ax,!1*>/ mov 8s,ax mov 8x,=DQ@ #m" term en8 start

.ro"ramul =.7 .mo8el small .stack !00/ .co8e start: mov al,OO/ mov b/,0((/ mov a/,al mov al,b/ mov b/,a/ term: #m" term en8 start

.ro"ramul =.C .mo8el small .stack !00/ .co8e start: mov mov mov mov al,!!/ bl,11/ cx,**>>/ 8x,==DD/ 1K0

xc/g al,bl xc/g cx,8x term: #m" term en8 start

.ro"ramul =.6 .mo8el small .stack !00/ .co8e mov al,0((/ mov a/,055/ mov bl,022/ mov b/,0DD/ xc/g al,a/ xc/g a/,bl xc/g bl,b/ #m" term en8 start

start:

term:

.ro"ramul =.D .mo8el small .stack !00/ .co8e start: mov mov mov mov a88 a88 sub sub ax,!!11/ bx,**>>/ cx,==DD/ 8x,QQ@@/ al,DD/ al,bl al,cl al,11/ 1K6

a88 al,bl ,Iezultatul este in (3 a88 al,cl ,si se a8una cu termenul al treilea a88 al,8l ,si a"oi cu al "atrulea , Se va observa ca la ultima a8unare L??/;@@/M apare carr/ term: #m" term en8 start

.ro"ramul =.10 .mo8el small .stack !00/ .co8e start: mov ax,!!11/ mov bx,**>>/ mov cx,==DD/ mov 8x,QQ@@/ a88 ax,DDDD/ a88 ax,bx sub ax,cx sub ax,11/ a88 ax,bx ,Iezultatul este in (3 a88 ax,cx ,si se a8una cu termenul al treilea a88 ax,8x ,si a"oi cu al "atrulea , Se va observa ca la ultima a8unare LDD??/;QQ@@/M a"are carrF term: #m" term en8 start

.ro"ramul =.11 .mo8el small .stack !00/ .co8e mov ax,!!11/ mov bx,**>>/ mov cx,==DD/ 1K=

start:

mov 8x,QQ@@/ a88 bx,8x ,NG a"are trans"ort a8c ax,cx ,8eci urmatoarea a8unare NG necesita ,saHl inclu8a si "e acesta ,2orect este totusi sa se tina seama 8e aceasta ,eventualitate term: #m" term en8 start .ro"ramul =.1= .mo8el small .stack !00/ .co8e start: mov mov mov mov a88 a8c term: ax,==DD/ bx,QQ@@/ cx,OO((/ 8x,05522/ bx,8x ,("are trans"ort ax,cx ,8eci urmatoarea a8unare va trebui ,saHl inclu8a si "e acesta

#m" term en8 start

.ro"ramul =.1< .mo8el small .stack !00/ .co8e start: mov mov mov mov sub ax,==DD/ bx,QQ@@/ cx,!!11/ 8x,**>>/ bx,8x ,Nu a"are im"rumut 1KB

sbb ax,cx ,totusi corect este ca urmatoarea ,sca8ere saHl inclu8a si "e acesta term: #m" term en8 start

.ro"ramul =.1F .mo8el small .stack !00/ .co8e start: mov mov mov mov sub sbb term: ax,11**/ bx,>>==/ cx,DDQQ/ 8x,@@OO/ bx,8x ,("are im"rumut ax,cx ,8eci urmatoarea sca8ere va trebui ,saHl inclu8a si "e acesta

#m" term en8 start

.ro"ramul <.1 .mo8el small .stack !00 start: .co8e mov al,11 %&' 5),0 %&' bx6107,al %&' DS:6*07,al 1KE

term:

#m" term en8 start

.ro"ramul <.= .mo8el small .stack !00/ .co8e mov al,11/ %&' 5), !0/ %&' 6bx7,al mov bx,*0/ %&' 6bx7,al mov b",!10/ mov 6b"7,al term: #m" term en8 start

start:

,<entru segmentul 8e stiva se ,a8resarea "rin interme8iul 5<

face

.ro"ramul <.< .mo8el small .stack !00/ .co8e start: mov ax,**>>/ %&' 5), 10/ %&' 6bx7,al term: #m" term en8 start

.ro"ramul <.F .mo8el small 1KJ

.stack !00 start: .co8e %&' 5),0 %&' 6bx;10/7,!!11/ %&' 65);*0/7,bFte "tr >>/ #m" term en8 start

term:

.ro"ramul <.E .ra8ix !D .mo8el small .stack !00 start: .co8e mov ax,**??/ %&' 5),0 %&' 6bx;*0/7,ax mov al,11/ mov a/,0 a88 6bx;*0/7,ax #m" term en8 start

term:

.ro"ramul <.7 .ra8ix !D .mo8el small .stack !00 start: .co8e mov bx,0 mov wor8 "tr 6bx;!07, >>, S"ecifica 1 octeti a88 6bx;!07,!11 ,"entru a a8una "e 1 octeti 1KK

term:

#m" term en8 start

.ro"ramul <.C .ra8ix !D .mo8el small .stack !00 start: .co8e mov al,>> mov wor8 "tr 8s:6*07, al , Nu sHa folosit nici a88 8s:6*07,!11,un registru "t a8resare

in8irecta ,SHau folosit a8resari ime8iate term: #m" term en8 start

.ro"ramul <.6 .ra8ix !D .%&D?3 S%(33 .ST(2U !00+ .2&D? Start: mov c/,8s:6!07 mov 8x,8s:6!!7 mov 8s:6107,bFte "tr 11 mov 8s:61!7,wor8 "tr @@QQ mov 8s:6*07,c/ mov 8s:6*!7,8x , SHau folosit a8resari ime8iate Lnerecoman8atM term: #m" term 1KL

?ND Start %A;: .ra8ix !D .%&D?3 S%(33 .ST(2U !00+ a8r eAu 0 .2&D? Start: mov c/,8s:6a8r;!07 mov 8x,8s:6a8r;!!7 mov 8s:6a8r;107,bFte "tr 11 mov 8s:6a8r;1!7,wor8 "tr @@QQ mov 8s:6a8r;*07,c/ mov 8s:6a8r;*!7,8x ,(vanta#ul este ca mo8ifican8 valoarea adr se ,translateaza intreaga structura un8e se 8oreste term: #m" term ?ND Start

.ro"ramul <.D .ra8ix !D .%&D?3 S%(33 .ST(2U !00+ .8ata 8ateo 8b !!,11 ,se 8eclara 1 locatii 8e ! octet 8atec 8w >>==,DDQQ ,se 8eclara 1 locatii 8e 1 octeti .co8e Start: mov ax,R8ata mov 8s,ax mov al,8ateo

, Desi nu a"ar "aranteze 8re"te,dateo 1L7

a88 mov a88 mov sub term:

al,8ate0;!,simbolizeaza continutul unei locatii bx,8atec ,8e memorie, iar datec continutul a bx,8atec;1,8oua locatii 8e memorie a/,0 bx,ax

#m" term ?ND Start .ro"ramul <.10 .ra8ix !D .%&D?3 S%(33 .ST(2U !00+ .8ata a8r! 8w J .2&D? Start: mov ax,R8ata, (ceste 1 instructiuni nu sunt ,obligatorii "entru ca nu se 8eclara mov 8s,ax ,8ate numerice initiale mov ax,@@OO mov cx,11!! mov 8l,!0 mov bx,10 mov a88 mov a88 mov mov sub mov term: #m" term ?ND Start 1L1 a8r!,ax ,Salveaza continutul initial al lui () ax,cx 8/,0 ,<entru a8unarea cu 5) a lui D)B00!0 bx,8x 6bx7,ax ax,a8r! ax,cx 6bx;17,ax, <rimul rezultat a fost 8e 1 octeti

.ro"ramul <.11 .ra8ix !D .%&D?3 S%(33 .ST(2U !00+ .8ata a8r! 8w J .2&D? Start: mov ax,R8ata, (ceste 1 instructiuni nu sunt ,obligatorii "entru ca nu se 8eclara mov 8s,ax ,8ate numerice initiale mov ax,!!11 mov bx,**>> mov cx,==DD mov 8x,QQ@@ mov a8r!,ax ,sau mov DS607,ax ,sau mov 6bx7,ax ,se scrie in locatia 6**>>7 mov ax,bx mov bx,cx mov cx,8x mov 8x,a8r! term: #m" term ?ND Start

.ro"ramul <.1= .ra8ix !D .%&D?3 S%(33 .ST(2U !00+ 1L0

.2&D? Start: mov bx,!0 mov al,! mov 6bx7,al inc al inc bx mov 6bx7,al inc al inc bx mov 6bx7,al inc al inc bx mov 6bx7,al term: #m" term ?ND Start

.ro"ramul <.1< .ra8ix !D .%&D?3 S%(33 .ST(2U !00+ .2&D? Start: mov bx,!0 mov ax,!000 mov 6bx7,ax inc ax inc bx ,() ocu"a 1 locatii consecutive inc bx ,8eci 5) trebuie marit cu 1 mov 6bx7,ax inc ax inc bx inc bx mov 6bx7,ax inc ax inc bx inc bx 1L6

mov term:

6bx7,ax #m" term

?ND Start

.ro"ramul <.1F .ra8ix !D .%&D?3 S%(33 .ST(2U !00+ .2&D? Start: mov bx,!0 mov al,= mov 6bx7,al a88 al,= inc bx mov 6bx7,al a88 al,= inc bx mov 6bx7,al a88 al,= inc bx mov 6bx7,al term: #m" term ?ND Start

.ro"ramul <.1E 1L=

.ra8ix !D .%&D?3 S%(33 .ST(2U !00+ .2&D? Start: mov bx,!0 mov ax,10! mov 6bx7,ax a88 ax,10! inc bx inc bx mov 6bx7,ax a88 ax,10! inc bx inc bx mov 6bx7,ax a88 ax,10! inc bx inc bx mov 6bx7,ax term: #m" term ?ND Start

.ro"ramul F.1 .%&D?3 S%(33 .ST(2U !00+ .2&D? Start: mov mov mov mov ax,!!11 bx,**>> cx,==DD 8x,QQ@@

"us/ ax "us/ bx "us/ cx 1LB

"us/ 8x "o" cx "o" bx "o" ax "o" 8x term: #m" term ?ND Start .ro"ramul F.<

,3a <&<, stiva furnizeaza informatia ,in or8ine inversa fata 8e <GS+ ,8u"a "rinci"iul E3ast CnHKirst &utE

.ra8ix !D .%&D?3 S%(33 .ST(2U !00+ .8ata sursa 8w !!11,**>>,==DD 8est 8w * DG<LJM .2&D? Start: mov ax,R8ata mov 8s,ax mov ax,sursa mov 8est,ax mov ax,sursa;1 , Kusesera ocu"ate 1 locatii mov 8est;1,ax ,8eci sHa avansat cu 1 in memorie mov ax,sursa;> mov 8est;>,ax term: #m" term ?ND Start

.ro"ramul F.F .Ia8ix !D .%o8el small .Stack !00/ 1LE

.Data sir D5 !,1,*,>,=,D,Q,@,O,0a .2o8e start: mov mov mov mov mov mov mov mov mov mov ax,seg sir, Se "utea folosi si %&' (S,R8ata 8s,ax al,sir a/,sir;O sir;O,al sir,a/ al,sir;! a/,sir;@ sir;@,al sir;!,a/

term: #m" term en8 start

.ro"ramul F.E .ra8ix !D .mo8el small .stack !00/ .8ata tabela! 8b !*,!>,!=,!D,!,1,*,>,= .co8e start: mov ax,R8ata ,(8resa segmentului 8e 8ate mov 8s,ax ,se incarca in DS mov bx,0 mov al,= xlat mov 8l,al ,Cn8exarea ince"e 8e la 0 8eci elementul = are valoarea 1 mov al,@ xlat mov 8/,al ,Cn8exarea ince"e 8e la 0 8eci elementul @ are valoarea = term: #m" term en8 start 1LJ

.ro"ramul F.7 .ra8ix !D .mo8el small .stack !00/ .co8e start: les ax,8s:!0 , Se va observa efectul asu"ra lui ?S si () in functie ,8e 8atele existente initial in memorie ince"an8 8e la ,a8resa !0/. term: #m" term en8 start

.ro"ramul F.C .ra8ix !D .mo8el small .stack !00/ .8ata a8resa! 8b !*,!>,!=,!,1,* a8resa1 8b !D,!Q,!@,!O .co8e start: mov ax,R8ata ,(8resa segmentului 8e 8ate mov 8s,ax ,se incarca in DS lea bx,a8resa! ,Cn DC se va afla offsetHul in ,memoria 8e 8ate al sirului ,notat Ea8resa!E Lin acest caz 0DM mov al,6bx;17 ,Transfera 8in a treia locatie a ,sirului in (3 lea bx,a8resa1 ,Noua a8resa efectiva mov a/,6bx;*7 ,8e la care este luat !O/ mov 6bx;*7,al ,si la care este trimis !=/ lea bx,a8resa! ,(8resa efectiva un8e trebuie mov 6bx;17,a/ ,trimis !O/ 1LK

term: en8 start

#m" term

.ro"ramul E.1 .ra8ix !D .mo8el small .stack !00/ .co8e start: mov mov mov mov mov a88 a8c sub mov mov term: al,!! bx,!0 cl,** 8l,>> 6bx7,bFte "tr OO, Transfer "e ! octet al,cl al,8l,Cn cazul general, "utea sa a"ara 2S 6bx7,al ,Iezultatul in memorie la 6bx7 al,6bx7 6bx;!7,al ,Se trimite la 6bx;!7

#m" term en8 start

.ro"ramul E.= .ra8ix !D .mo8el small .stack !00/ .co8e start: mov mov mov mov mov ax,!!11 bx,!0 cx,**>> 8x,==DD 6bx7,0((55/ 1LL

a88 a8c sub mov mov term:

ax,cx ax,8x, Cn cazul general, "utea sa a"ara 2S 6bx7,ax ax,6bx7 6bx;17,ax ,Iezultatul era "e 1 octeti #m" term en8 start

.ro"ramul E.< .ra8ix !D .mo8el small .stack !00/ .co8e start: mov mov mov inc inc inc mul mov mul term: al,O bl,!O cl,1O al bl cl bl c/,0 ,<regatim 2) "entru inmultire cu rezultat cx ,8e !D biti #m" term en8 start

.ro"ramul E.F .ra8ix !D .mo8el small .stack !00/ .8ata 1 8u"LJM, > locatii "entru rezultat c1=!ecO@ 1 8u"LJM, salvari tem"orare 8e registre .co8e 077

rez 8w tem" 8w

start: mov mov mov mov mov mov mov mul mov mov mul mov mov mov mul a88 term:

ax,R8ata 8s,ax bx,!!11 cx,==DD 8x,11 tem",8x ,tem" B11 ax,bx cx ,Iezultat in D):()B0=bQ!8@c tem";1,8x,Stoc/eaza 8x la tem";1B0=bQ bx,tem" ,Ieface bxB11 bx ,Cnmulteste axB!D@2 cu 11 rez;1,ax ,Stoc/eaza in ultimii 1 octeti ax rez,8x ,si in "rimii 1 octeti 8x ax,tem";1,<regateste 0=5Q bx ,si inmulteste cu 11 rez,ax ,a8una rezultatul la "rimii 1 octeti

#m" term en8 start

.ro"ramul E.E .ra8ix !D .mo8el small .stack !00/ .8ata tem"w 8w J, locatie tem"orara "entru ! wor8 tem"b 8b J, locatie tem"orara "entru ! bFte .co8e start: mov ax,R8ata mov 8s,ax mov cx,DD== mov bl,>> mov 8l,11 mov tem"b,8l, Cm"artirea se face cu !D biti mov 8x,0 ,8eci trebuie a8us D) la 0 mov ax,cx ,forman8 cu () 8eim"artitul 071

mov 8iv mov mov mul a8c term:

b/,0 ,"regateste cei !D biti bx ,ai im"artitorului tem"w,8x,tem"wBrestul 8l,tem"b,reface D3 8l ,Si inmulteste cu catul ax,tem"w,iar rezultatul cu 2S a8una la rest #m" term en8 start

.ro"ramul 7.1 .ra8ix !D .mo8el small .stack !00/ .co8e start: mov ax,0????/ an8 ax,0K term: #m" term en8 start

.ro"ramul 7.= .ra8ix !D .mo8el small .stack !00/ .co8e start: mov ax,0????/ or ax,!!!!!!!!0000!!!!b term: #m" term en8 start

070

.ro"ramul 7.< .ra8ix !D .mo8el small .stack !00/ .co8e start: mov bl,!0!00!!0b, mov cl,000!!!!!b, an8 bl,0000!!00b, an8 cl,!!!!00!!b, or cl,bl , term: #m" term en8 start 'aloare initiala 53 'aloare initiala 23 Se"ara bitii 1 si * 8in 53 5itii omologi 8in 23 anulati 2ombina rezultatele

.ro"ramul 7.F .ra8ix !D .mo8el small .stack !00/ .co8e mov 8l,0= ,'aloarea initiala a lui D3 mov al,0 ,<regateste (3 "entru a "relua 2(IIS mov bx,0 ,<regateste "ointerul in memorie ror 8l,! ,Iotire 8rea"ta. 5itul 0 in 2(IIS a8c al,0 ,(8una cu 2(IIS. Iezulta (3B2(IIS mov 6bx7,al,Trimite in "rima locatie xor al,al ,Sterge (3 "entru urmatorul 2(IIS

start:

,"rocesul se re"ata "entru celelalte * locatii ror 8l,! a8c al,0 mov 6bx;!7,al xor al,al ror 8l,! a8c al,0 mov 6bx;17,al 076

xor al,al ror 8l,! a8c al,0 mov 6bx;*7,al term: #m" term en8 start

.ro"ramul 7.E .ra8ix !D .mo8el small .stack !00/ .co8e start: mov mov mov mov an8 an8 bl,!1 ,'aloarea initiala a lui 53 c/,=D ,'aloarea initiala a lui 2+ al,bl ,2o"ii 8e lucru in 8/,c/ ,(3 si D+ al,0K/ ,Ca semioctetul inferior 8in 53 bl,0K0/,Iamine in 53 8oar octetul su"erior

an8 8/,0K0/,Ca semioctetul su"erior 8in 2+ an8 c/,0K/ ,Iamine in 2+ 8oar octetul inferior s/r bx,> s/l cx,> or c/,al or bl,8/ xc/g bl,c/ term: #m" term en8 start ,De"laseaza cu un semioctet 8rea"ta ,De"laseaza cu un semioctet stanga ,2ombina semioctetii ,Cnverseaza registrele

.ro"ramul 7.7 .ra8ix !D 07=

.mo8el small .stack !00/ .co8e start: mov mov mov xor ,'aloarea initiala a lui 23 ,'aloarea initiala a lui D+ ,2o"ie 8e lucru a lui 23 ,Daca 1 biti omologi sunt i8entici, ,)&I .i anuleaza, restul 8evin ! an8 cl,al ,Sunt "usi in 0 in 23 numai bitii ,care fusesera i8entici cu ai lui D+ #m" term en8 start cl,1= 8/,== al,cl al,8/

term:

.ro"ramul 7.C .ra8ix !D .mo8el small .stack !00/ .co8e start: mov mov mov xor )&I not al or cl,al term: #m" term en8 start cl,1= 8/,== al,cl al,8/ ,'aloarea initiala a lui 23 ,'aloarea initiala a lui D+ ,2o"ie 8e lucru a lui 23 ,Daca 1 biti omologi sunt i8entici, ,ii anuleaza, restul 8evin ! ,Cnverseaza bitii ,Sunt "usi in ! in 23 numai bitii ,care fusesera i8entici cu ai lui D+

.ro"ramul 7.6 .ra8ix !D .mo8el small 07B

.stack !00/ .co8e start: mov mov s/l s/l a88 term: b",QQ 8x,b" 8x,@ b",D b",8x , 'aloarea initiala in 5< ,2o"ie 8e lucru in D) ,Cnmulteste co"ia cu 1=D ,Cnmulteste valoarea initiala cu D> ,(8una 1=D;D>B*10 ori valoarea initiala

#m" term en8 start

.ro"ramul 7.D .ra8ix !D .mo8el small .stack !00/ .co8e start: mov mov s/l s/l a88 term: b",** 8x,b" 8x,O b",Q b",8x , 'aloarea initiala in 5< ,2o"ie 8e lucru in 8x ,Cnmulteste co"ia cu =!1 ,Cnmulteste valoarea initiala cu !1@ ,(8una =!1;!1@BD>0 ori valoarea initiala

#m" term en8 start

.ro"ramul C.1 .ra8ix !D .mo8el small .stack !00/ .8ata a8r! 8w QQQQ a8r1 8w **** a8r* 8w 1111 07E

.co8e start: mov ax,R8ata mov 8s,ax mov ax,a8r! mov bx,a8r1 cm" ax,bx ,2om"ara numerele ! si 1 #b com"1 ,Daca ! e mai mic, treci la com"aratia 1 mov a8r!,bx,Daca ! e mai mare se trimit in memorie mov a8r1,ax,Cn or8ine inversa com"1: mov ax,a8r1 mov bx,a8r* cm" ax,bx ,2om"ara numerele 1 si * #b com"* ,Daca 1 e mai mic, treci la com"aratia * mov a8r1,bx,Daca 1 e mai mare se trimit in memorie mov a8r*,ax,Cn or8ine inversa com"*: mov ax,a8r!,<osibil ca in urma inversarii 1 cu * mov bx,a8r1,in "ozitia 1 sa fie acum un numar cm" ax,bx ,mai mic si 8ecat cel 8in "ozitia ! #b term ,Daca sunt in or8ine, termina mov a8r!,bx,Daca nu, se face 8in nou mov a8r1,ax,inversarea in memorie term: #m" term en8 start

.ro"ramul C.= .ra8ix !D .mo8el small .stack !00/ .co8e start: reia: mov mov mov inc bx,0 cx,10 6bx7,bFte "tr ** bx 07J

8ec cx #nz reia term: #m" term en8 start

.ro"ramul C.< .ra8ix !D .mo8el small .stack !00/ .co8e start: mov mov mov mov inc inc 8ec #nz bx,0 cx,10 al,= 6bx7,al al bx cx reia

reia:

term:

#m" term en8 start

.ro"ramul C.F .ra8ix !D .mo8el small .stack !00/ .co8e start: mov mov mov mov inc bx,0 cx,10 al,= 6bx7,al al 07K

reia:

inc 8ec #nz ,(cum se mov mov mov mov reia!: mov a88 inc 8ec #nz mov mov term:

bx cx reia ,SHa terminat incarcarea in memorie vor suma numerele 8in memorie cx,10 ax,0 ,Cn () va a"are suma bx,0 8/,0 ,Suma va fi "e 8oi octeti, 8l,6bx7,8eci se "regateste a8unarea cu D) ax,8x bx cx reia! 6bx7,a/,5x este acum 10 6bx;!7,al

#m" term en8 start

.ro"ramul C.E .ra8ix !D .mo8el small .stack !00/ .co8e mov bx,0 mov cx,10 mov ax,!0 ,<rogresia 8a si numere "e 1 octeti mov 6bx7,ax,8eci se va folosi () a88 ax,!0 inc bx ,Kiecare numar ocu"a 1 octeti inc bx ,8eci bx se incrementeaza 8e 1 ori 8ec cx #nz reia ,SHa terminat incarcarea in memorie #m" term en8 start

start: reia:

term:

07L

.ro"ramul C.7 .ra8ix !D .mo8el small .stack !00/ .co8e start: mov mov mov mov sub inc inc 8ec #nz bx,0 cx,10 ax,100 6bx7,ax ax,!0 bx bx cx reia ,Numere "e 1 octeti ,8eci se va folosi () ,Kiecare numar ocu"a 1 octeti ,8eci bx se incrementeaza 8e 1 ori ,SHa terminat incarcarea in memorie

reia:

term:

#m" term en8 start

.ro"ramul C.C .ra8ix !D .mo8el small .stack !00/ .co8e start: mov bx,0 mov cx,!0 mov a/,6bx7 inc bx 8ec cx mov al,6bx7 cm" a/,al #a conti mov a/,al inc bx 8ec cx #nz reia ,2onsi8eram "rimul numar ca maxim ,Ca urmatorul numar ,com"ara cu cel maxim ,Daca "rimul e mai mare continua ,Daca cel nou e mai mare, acesta ,8evine noul maxim ,Cncrementeaza a8resa ,8ecrementeaza contorul ,reia cautarea 017

reia:

conti:

mov 6bx7,a/ ,Du"a ultima locatie citita scrie ,numarul maxim gasit term: #m" term en8 start

.ro"ramul 6.1 .ra8ix !D .mo8el small .stack !00/ 3ungime5loc eAu 10 .D(T( 5locSursa 8w 3ungime5loc 8u"L!!11M 5locDest 8w 3ungime5loc 8u"LJM .co8e start: mov ax,seg 5locSursa , Se "utea folosi si , mov ax,R8ata mov 8s,ax ,Segmentul sursa .n DS mov ax,seg 5locDest ,Necesar numai 8aca ,blocurile sunt .n ,segmente 8iferite mov es,ax ,Segmentul 8estinatie ?S cl8 ,8irectia .n sensul ,cresterii a8reselor mov si, offset 5locSursa ,(? a sursei .n SC mov 8i, offset 5locSursa;D0,(? a 8estinatiei .n DC mov cx, 3ungime5loc ,Numarul 8e transferuri .n 2) bucla: lo8sw ,-ncarca .n () un octet stosw ,si .l trimite la 8estinatie loo" bucla ,Decrementeaza 2) si reia ,bucla "Nna cNn8 2) 8evine 0 term: #m" term en8 start 011

.ro"ramul 6.F .ra8ix !D .mo8el small .stack !00/ .D(T( 5locSursa 8b 35 eAu .co8e start: mov ax,R8ata mov 8s,ax mov es,ax

P#gas#agsasasgaua/8#us/8P TH5locSursa ,(samblorul ,calculeaza lungimea blocului

,-ncarca .n ?S segmentul 8e ,8ate L"entru S2(S5M mov 8i, offset 5locSursa ,-ncarca .n DC a8resa ,siruluiL<entru S2(S5M mov cx, 35 ,-n 2) lungimea sirului mov al,PaP ,2onstanta 8e com"arat mov b/,0 ,'aloare initiala contor bucla: scasb ,2om"ara (3 cu un octetul 8e ,la 6?S:DC7 8in sir #nz conti ,Daca nu e egalitate sare inc b/ ,Daca e PaP, incrementeaza 5+ conti: loo" bucla ,Ieluare 8aca nu sHa terminat term: #m" term en8 start

.ro"ramul 6.E .ra8ix !D .ra8ix !D 010

.mo8el small .stack !00/ .8ata 5locSursa 8b 35 eAu .co8e start: mov ax,R8ata mov 8s,ax mov es,ax

Pg/fafasfasfa/sFf///saa8P TH5locSursa

,Cncarca in ?S segmentul 8e 8ate ,L"entru S2(S5M mov 8i, offset 5locSursa,Cncarca in DC a8resa ,siruluiL<entru S2(S5M mov cx,35 mov ax,PafP ,2ontorul 8e com"aratii in 2) ,2onstanta 8e com"arat cu octetii ,inversati Lcum se com"ara ,cu cuvintele 8in memorieM ,2om"ara () cu cuvantul res"ectiv ,Daca nu este secventa PfaP, se sare ,Daca sHa gasit PfaP incrementeaza 5+ ,Ieluare 8aca nu sHa terminat sirul

bucla: scasw #nz b! inc b/ b!: 8ec 8i loo" bucla term: #m" term en8 start

.ro"ramul 6.C .ra8ix !D .mo8el small .stack !00/ .D(T( Sir! 35 eAu Sir1 8b PD=!1D*!@1QOD!QO1P THSir! ,3ungimea este 8ata 8e sirul ! 8b PQ=*!QO0Q*>1D>Q1=P 016

.co8e start: mov ax,R8ata mov 8s,ax mov es,ax mov si, offset mov 8i, offset mov cx,35 bucla: cm"sb #nz b! inc b/ b!: b1: b*: term: #m" b* #b b1 inc 8/ #m" b* inc 8l loo" bucla #m" term en8 start

,-ncarca .n DS segmentul 8e 8ate ,-ncarca .n ?S segmentul 8e 8ate Sir!,-ncarca .n SC a8resa sirului ! Sir1,-ncarca .n DC a8resa sirului 1 ,2ontorul 8e com"aratii .n 2) ,2om"ara (3 cu octetul res"ectiv ,Daca nu este egalitate, se sare ,Daca sHa gasit egalitate, se ,incrementeaza 5+ ,si se trece la urmatoarea "erec/e ,Daca este mai mic sare ,Daca e mai mare incrementeaza D+ ,si se trece la urmatoarea "erec/e ,Daca era mai mic incrementeaza D3 ,Ieluare 8aca nu sHa terminat

.ro"ramul 6.6 .ra8ix !D .mo8el small .stack !00/ .D(T( Sir! 8b P(52D?KW+CZU3P 35 eAu THSir! ,3ungimea este 8ata 8e sirul ! .co8e start: mov ax,R8ata mov 8s,ax ,-ncarca .n DS segmentul 8e 8ate mov es,ax ,-ncarca .n ?S segmentul 8e 8ate mov 8i, offset Sir! ,-ncarca .n DC a8resa sirului 01=

mov cx,35 ,2ontorul 8e com"aratii .n 2) mov al,P?P re"nz scasb ,2om"ara "ana la "rima egalitate neg cx ,Cn 2) este numarul ramas 8in 35 a88 cx,35 ,si trebuie scazut 8in 35 term: #m" term en8 start .ro"ramul 6.D .ra8ix !D .mo8el small .stack !00/ .D(T( Sir! 8b P!1*>=DQ@OP 35 eAu THSir! ,3ungimea este 8ata 8e sirul ! Sir1 8b PO@QD=>*1!P .co8e start: mov ax,R8ata mov 8s,ax ,-ncarca .n DS segmentul 8e 8ate mov es,ax ,-ncarca .n ?S segmentul 8e 8ate mov si, offset Sir!,-ncarca .n SC a8resa sirului ! mov 8i, offset Sir1,-ncarca .n DC a8resa sirului 1 mov cx,35 ,2ontorul 8e com"aratii .n 2) re"nz cm"sb ,2om"ara "ana la "rima egalitate neg cx ,Cn 2) este numarul ramas 8in 35 a88 cx,35 ,si trebuie scazut 8in 35 term: #m" term en8 start

.ro"ramul 6.10 .mo8el small .stack !00/ .D(T( Sir! 8b

P!!11**>>==DDP 01B

35 eAu THSir! ,3ungimea este 8ata 8e sirul ! Sir1 8b P!!11>>**==DDP .co8e start: mov ax,R8ata mov 8s,ax ,-ncarca .n DS segmentul 8e 8ate mov es,ax ,-ncarca .n ?S segmentul 8e 8ate mov si, offset Sir!,-ncarca .n SC a8resa sirului ! mov 8i, offset Sir1,-ncarca .n DC a8resa sirului 1 mov cx,35 ,2ontorul 8e com"aratii .n 2) re"z cm"sb neg cx a88 cx,35 term: #m" term en8 start ,2om"ara "ana la "rima inegalitate ,Cn 2) este numarul ramas 8in 35 ,si trebuie scazut 8in 35

.ro"ramul D.1 .ra8ix !D .mo8el small .stack !00/ .co8e start: mov 8l,*0 ,<rimul co8 (S2CC mov 8/,@0 ,Gltimul co8 (S2CC reia: mov a/,01 ,Kunctia 01 Cnt 1!/ inc 8l ,Grmatorul co8 (S2CC cm" 8/,8l ,SHa a#uns la ultimulJ #nz reia ,Daca nu, se reia ciclul term: mov a/,>2/,Cesirea se face cu functia >2 int 1! ,si se "oate ve8ea ecranul cu en8 start ,coman8a EGser ScreenE submeniul $in8ow 01E

.ro"ramul D.= .ra8ix !D .mo8el small .stack !00/ .8ata sir! 8b PGn sir 8e caractere terminate cu 8olarTP .co8e start: mov ax,R8ata mov 8s,ax mov 8x,offset sir!,(8resa efectiva a sirului in DS mov a/,0O,Kunctia 0O Cnt 1!/ term: mov a/,>2/ int 1! en8 start

.ro"ramul D.< .ra8ix !D .mo8el small .stack !00/ .8ata sir! 8b P<rimul sir 8e caractereP,08/,0a/,PTP sir1 8b P(l 8oilea sir 8e caractere TP .co8e start: mov ax,R8ata mov 8s,ax mov 8x,offset sir!,(8resa efectiva a sirului ! in DS mov a/,0O ,Kunctia 0O Cnt 1!/ mov 8x,offset sir1,(8resa efectiva a sirului 1 in DS mov a/,0O ,Kunctia 0O Cnt 1!/ term: 01J

mov a/,>2/ int 1! en8 start

.ro"ramul D.F .ra8ix !D .mo8el small .stack !00/ .co8e start: mov a/,0! ,2itire tasta in (3 Cnt 1!/ mov 8l,al ,<entru afisare, co8ul (S2CC in D3 mov a/,01 ,Kunctia 01 Cnt 1!/ cm" al,08/,SHa tastat 2IJ #nz start ,Daca nu, reia term: mov a/,>2/ int 1! en8 start

.ro"ramul D.E .ra8ix !D .mo8el small .stack !00/ .co8e start: mov a/,0Q ,2itire tasta in (3, fara ecou Cnt 1!/ mov 8l,al ,<entru afisare, co8ul (S2CC in D3 mov a/,01 ,Kunctia 01 01K

Cnt 1!/ cm" al,08/,SHa tastat 2IJ #nz start ,Daca nu, reia term: mov a/,>2/ int 1! en8 start

.ro"ramul D.7 .ra8ix !D .mo8el small .stack !00/ .co8e start: mov a/,0! ,2itire tasta in (3, cu ecou Cnt 1!/ sub al,10 mov 8l,al ,<entru afisare, co8ul (S2CC in D3 mov a/,01 ,Kunctia 01 Cnt 1!/ a88 al,10 cm" al,08/,SHa tastat 2IJ #nz start ,Daca nu, reia term: mov a/,>2/ int 1! en8 start

.ro"ramul D.C .ra8ix !D .mo8el small .stack !00/ .8ata buff0 8b !0 ,3ungimea "ermisa a sirului 01L

buff! buff1

8b 8b

J ,Iezervare Llungimea actualaM !0 8u" LJM,5ufferul 8e caractere

.co8e start: mov ax,R8ata mov 8s,ax mov 8x,buff0 , &riginea sirului in D) mov a/,0( ,2itire tasta in (3 Cnt 1!/ ,(cum se formeaza sirul 8e afisat Lterminat cu PTPM mov b/,0 ,<regateste 5) mov bl,bFte "tr 8s:6!7,<entru a citi lungimea ,actuala a88 bl,1 ,Se a8auga 1 Loctetii 2I si 3KM mov 8s:6bx7,bFte "tr PTP,Sfarsitul 8e sir la ,lungime;1 mov buff0,0(/ ,3a ince"ut 3ine Kee8 mov buff!,0D/ ,si 2arriage Ieturn mov a/,0O ,Kunctia 0O Cnt 1!/ term: mov a/,>2/ int 1! en8 start

.ro"ramul D.6 .ra8ix !D .mo8el small .stack !00/ .8ata Sir! 8b P2are 8in urmatoarele registre in8ica segmentul 8e 8ateJ L("asati !,1,* sau >MP,08+,0(/,P!. 5)P,08+,0(/,P1. 5<P,08+,0(/,P*. SCP,08+,0(/,P>. DCP,08+,0(/,08/,0a/,PTP Sir1 8b P. 2orect[TP 007

Sir* 8b .co8e start: mov ax,R8ata mov 8s,ax

P. Wresit[ ?ra 5) sau SC.TP

,Cncarca in DS segmentul 8e 8ate

mov 8x, offset Sir! ,Cncarca in SC a8resa sirului ! mov a/, 0O Cnt 1!/ mov a/,0! int 1!/ cm" al,P!P #z corect cm" al,P*P #z corect mov #m" corect: mov afi: mov int term: mov a/,>2/ int 1! en8 start 8x, offset sir* afi 8x, offset sir1 a/,0O 1!

.ro"ramul 10.1 .mo8el small .stack !00/ .co8e start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ 001

afis:

,(fiseaza un "unct la xB2), FBD) si culoareB(3 mov mov mov mov int cx,!00 8x,=0 al,1 a/,02/ !0/

,functia 02/ ,2/eama intreru"erea !0/

term:

#m" term en8 start

.ro"ramul 10.= .mo8el small .stack !00/ .co8e start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ ,(fiseaza o linie la xB2), FBD) si culoareB(3 mov 8x,=0 mov cx,!00 lin!: mov mov int inc cm" #ne term: al,1 a/,02/ !0/ cx cx,100 lin! #m" term en8 start ,functia 02/ ,Cntreru"erea !0/ ,Se "regateste scriereaaltui "unct ,"ana se a#unge la !00 8e "uncte

000

.ro"ramul 10.< .mo8el small .stack !00/ .co8e ,Declara "arametrii x!B=0 ,Cnce"utul liniilor F!B=0 culoareB1 lungimeB!00 ,3ungimea liniilor /B=0 ,numarul 8e linii start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ afis: ,(fiseaza o linie la xB2), FBD) si culoareB(3 mov 8x,F! mov al,culoare lin1: mov cx,x! lin!: mov int inc cm" #ne inc cm" #ne term: a/,02/ ,functia 02/ !0/ ,call bios service cx cx,x!;lungime lin! 8x 8x,F!;/ ,SHa a#uns la numarul final 8e liniiJ lin1 ,Daca nu, se reia #m" term en8 start

006

.ro"ramul 10.F .mo8el small .stack !00/ .co8e x!B=0 F!B=0 culoareB1 lungimeB!00 /B=0 ,numarul 8e linii start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ afis: ,(fiseaza un "unct la xB2), FBD) si culoareB(3 mov 8x,F! lin1: mov al,culoare,Se reia linia cu culoarea 8e ince"ut mov cx,x! lin!: inc mov int inc cm" #ne inc cm" #ne term: al ,Noul "unct cu alta culoare a/,02/ ,functia 02/ !0/ cx cx,x!;lungime lin! 8x 8x,F!;/ ,SHa a#uns la numarul final 8e liniiJ lin1 #m" term en8 start

.ro"ramul 10.E 00=

.stack !00/ .co8e x!B=0 F!B=0 culoareB1 lungimeB!00 /B=0 ,numarul 8e linii start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ afis: ,(fiseaza un "unct la xB2), FBD) si culoareB(3 mov 8x,F! mov al,culoare ,2uloarea "rimei linii lin1: mov cx,x! lin!: mov int inc cm" #ne inc inc cm" #ne term: a/,02/ ,functia 02/ !0/ ,call bios service cx cx,x!;lungime lin! al ,Grmatoarea linie are alta culoare 8x ,si alt F 8x,F!;/ ,SHa a#uns la ultima linieJ lin1 ,Daca nu, reia #m" term en8 start

.ro"ramul 10.7 .%&D?3 S%(33 .ST(2U 100+ .2&D? x!B!D0 00B

culoarea B* Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/

%&' %&'

(), 0(000+,(8resa memoriei ecran ?S, () ,in ?S

mov 8i,x! ,<ozitia "unct este offset fata 8e ?S mov al,culoarea stosb o"rire: #m" o"rire ?ND Start

.ro"ramul 10.C .%&D?3 S%(33 .ST(2U 100+ .2&D? lungB100 culoarea B= Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ %&' (), 0(000+ 00E

%&' 3inieo: mov mov mov re"

?S, () 8i,0 cx,lung al,culoarea stosb ,Ie"eta "ana can8 2)B0

o"rire: #m" o"rire ?ND Start

.ro"ramul 10.6 .%&D?3 S%(33 .ST(2U 100+ .2&D? x!B!00 ,&riginea liliei lungB100 culoarea B= Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/

%&' %&' 3inieo:

(), 0(000+ ?S, ()

mov 8i,x! ,3inia ince"e in "ozitia x! mov cx,lung mov al,culoarea re"z stosb ,Scrie "unctele liniei 00J

o"rire: #m" o"rire ?ND Start

.ro"ramul 10.D .%&D?3 S%(33 .ST(2U 100+ .2&D? x!B!00 lungB100 culoarea B= Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ %&' %&' 3inieo: (), 0(000+ ?S, ()

mov 8i,x! a88 8i,*10 mov cx,lung mov al,culoarea re"z stosb ,Scrie "unctele liniei o"rire: #m" o"rire ?ND Start

00K

.ro"ramul 10.10 .%&D?3 S%(33 .ST(2U 100+ .2&D? x!B!00 F!B=0 lungB100 culoarea B= Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ %&' %&' 3iniev: mov mov mov mov mov s/l s/l a88 a88 re" (), 0(000+ ?S, () 8i,x! b",F! cx,lung al,culoarea 8x,b" ,Se face inmultirea 8x,D ,lui 5< La8ica a lui S!M cu *10 b",@ ,<rin co"iere in D) b",8x ,8e"lasari la stinga si a8unare 8i,b" ,De"lasamentul obtinut se a8una la DC stosb ,Scrie "unctele liniei

o"rire: #m" o"rire ?ND Start

.ro"ramul 10.11 .%&D?3 S%(33 00L

.ST(2U 100+ .2&D? x!B!00 F!B=0 lungB=0 culoarea B= Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/

%&' %&' 3iniev: mov mov mov mov mov s/l s/l a88 a88

(), 0(000+ ?S, () 8i,x! b",F! cx,lung al,culoarea 8x,b" ,Se face inmultirea 8x,D ,lui 5< La8ica a lui S!M cu *10 b",@ ,<rin co"iere in D) b",8x ,8e"lasari la stinga si a8unare 8i,b" ,De"lasamentul obtinut se a8una la ,Noul "unct este cu *10 mai ,8e"arte .n memoria 8e

lv!: a88 8i,*10 ecran

mov es:68i7,al ,<une "unctul loo" lv! ,Ie"eta 8e 2) ori o"rire: #m" o"rire ?ND Start 067

.ro"ramul 10.1= .%&D?3 S%(33 .ST(2U 100+ .2&D? x!B!00 F!B=0 lungB=0 culoarea B= Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/

%&' %&' 3iniev: mov mov mov mov mov s/l s/l a88 a88

(), 0(000+ ?S, () 8i,x! b",F! cx,lung al,culoarea 8x,b" ,Se face inmultirea 8x,D ,lui 5< La8ica a lui S!M cu *10 b",@ ,<rin co"iere in D) b",8x ,8e"lasari la stinga si a8unare 8i,b" ,De"lasamentul obtinut se a8una la

lv!: a88 8i,*1!,Noul "unct este cu *10;! mai ,8e"arte .n memoria 8e ecran mov es:68i7,al ,<une "unctul loo" lv! ,Ie"eta 8e 2) ori 061

o"rire: #m" o"rire ?ND Start

.ro"ramul 10.1< .%&D?3 S%(33 .ST(2U 100+ .2&D? x!B!00 F!B=0 lungB=0 culoarea B= Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/

%&' %&' 3iniev: mov mov mov mov mov s/l s/l a88

(), 0(000+ ?S, () 8i,x! b",F! cx,lung al,culoarea 8x,b" ,Se face inmultirea 8x,D ,lui 5< La8ica a lui S!M cu *10 b",@ ,<rin co"iere in D) b",8x ,8e"lasari la stinga si a8unare 060

a88 8i,b" ,De"lasamentul obtinut lv!: a88 8i,*!O ecran mov es:68i7,al ,<une "unctul loo" lv! ,Ie"eta 8e 2) ori o"rire: #m" o"rire ?ND Start

se a8una la

,Noul "unct este cu *10H! mai ,8e"arte .n memoria 8e

.ro"ramul 10.1F .%&D?3 S%(33 .ST(2U 100+ .2&D? x!B!00 F!B=0 lungB=0 culoarea B= nrliniiB!00 Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/

%&' (), 0(000+ %&' ?S, () mov bx,nrlinii ,2ontorul 8e linii verticale 066

mov 8i,x! 3iniev: mov mov mov mov mov s/l s/l a88 a88

,"ozitia "rimei linii in DC

si,8i ,DC va fi mo8ificat eci se salveaza b",F! cx,lung al,culoarea 8x,b" ,Se face inmultirea 8x,D ,lui 5< La8ica a lui S!M cu *10 b",@ ,<rin co"iere in D) b",8x ,8e"lasari la stinga si a8unare 8i,b" ,De"lasamentul obtinut se a8una la

lv!: a88 8i,*10

,Noul "unct este cu *10 mai ,8e"arte .n memoria 8e ecran mov es:68i7,al ,<une "unctul loo" lv! ,Ie"eta 8e 2) ori mov 8i,si ,Ieface DC L"ozitia liniei curenteM inc 8i ,si il incrementeaza Llinia ,urmatoareM 8ec bx ,Decrementeaza si contorul 8e linii #nz liniev ,si 8aca nu a a#uns la 0, reia

o"rire: #m" o"rire ?ND Start

.ro"ramul 11.= .%&D?3 .ST(2U .2&D? x!B!00 F!B=0 lB100 /B=0 culoarea! culoarea1 S%(33 100+

B0=/ B0!/ 06=

Start: call sterge ,%o8 vi8eo *10x1>0 mov a/,0 mov al,!*/ int !0/ ,<aleta mov mov mov int "rinc: %&' (), 0(000+ %&' ?S, () mov al,culoarea! ,in (3 culoarea orizontala call 8re"tung/i o"rire: #m" o"rire ,VVVVVVV Subrutine VVVVVVV sterge: ,Sterge ecran mov a/,0D/ mov b/,0 int !0/ ret lino: ,(fiseaza o linie orizontala , la F B D) 8in "uncte cu culoarea 8in DC mov 8x,b" s/l 8x,@ s/l b",D a88 8x,b" a88 8i,8x re"z stosb ret 06B a/,0b/ b/,! bl,@ !0/

linv:

,(fiseaza o linie verticala mov 8x,b" s/l 8x,@ s/l b",D a88 8x,b" a88 8i,8x lv!: %&' ?S:6DC7,al a88 8i,*10 loo" lv! ret 8re"tung/i: mov b",F! mov 8i,x! mov cx,l call ,in 5< e S! ,Cn DC e )! ,Cn 2) e lungimea lino

mov b",F!;/ ,in 5< e S! mov 8i,x! ,Cn DC e )! mov cx,l ,Cn 2) e lungimea call lino mov b",F! ,in 5< e S! mov 8i,x! ,Cn DC e )! a88 8i,*10 mov cx,/ ,Cn 2) e lungimea 8ec cx mov al,culoarea1 call linv mov b",F! ,in 5< e S! mov 8i,x!;lH!,Cn DC e )1 Lcu ! mai "utin 8ecat x!;lM a88 8i,*10 mov cx,/ ,Cn 2) e lungimea 8ec cx mov al,culoarea1 call linv ret ?ND Start 06E

.ro"ramul 11.< .%&D?3 S%(33 .ST(2U 100+ .D(T( x!B!00 F!B=0 lB!10 /BD0 culoarea! B0=/ .2&D? Start: ,%o8 vi8eo *10x1>0 mov a/,0 mov al,!*/ int !0/ "rinc: %&' %&' mov mov mov mov (), 0(000+ ?S, () 8i,x! b",F! cx,l al,culoarea! ,<arametrii "rimei linii ,in (3 culoarea orizontala

mov bx,/ 8re"t!: call linieo inc b" 8ec bx #nz 8re"t! o"rire: #m" o"rire 06J

,VVVVVV Subrutine VVVVVVVVVVVVVV linieo: ,3inie orizintala "us/ cx "us/ 8i "us/ b" mov 8x,b" s/l 8x,@ s/l b",D a88 8x,b" a88 8i,8x re"z stosb "o" b" "o" 8i "o" cx ret ?ND Start

.ro"ramul 11.F .%&D?3 .ST(2U .2&D? x!B!0 F!B=0 lB10 /B*0 culoarea! culoarea1 Start: ,%o8 vi8eo *10x1>0 mov a/,0 mov al,!*/ int !0/ "rinc: 06K S%(33 100+

B0=/ B0!/

%&' %&'

(), 0(000+ ?S, ()

mov 8i,x! ,<arametrii "rimei linii mov b",F! mov cx,l mov al,! ,in (3 culoarea orizontala mov bx,/ mov si,10 et!: call 8re"tung/i a88 8i,= a88 b",= inc al 8ec si #nz et! o"rire: #m" o"rire ,VVVVVV Subrutine VVVVVVVVVVVVVV linieo: ,3inie orizontala "us/ cx "us/ 8i "us/ b" mov 8x,b" s/l 8x,@ s/l b",D a88 8x,b" a88 8i,8x re"z stosb "o" b" "o" 8i "o" cx ret 8re"tung/i: "us/ bx "us/ b" 8re"t!: call linieo inc b" 8ec bx 06L

#nz 8re"t! "o" b" "o" bx ret ?ND Start

.ro"ramul 11.E .%&D?3 S%(33 .ST(2U 100+ .D(T( x!B!00 F!B=0 lB100 /B=0 culoarea B!/ .2&D? Start: ,%o8 vi8eo *10x1>0 mov a/,0 mov al,!*/ int !0/ "rinc: %&' %&' "!: mov mov inc mov an8 mov an8 (), 0(000+ ?S, () bx,*00/ al,6bx7 al b",6bx;!7 b",00ff/ 8i,6bx;17 8i,0!ff/ ,in (3 culoarea ,in 5< e S! ,Cn DC e )! ,Cn 2) e lungimea ,3ungimea trebuie sa nu fie 0 0=7

mov cx,6bx;17 an8 cx,00*f/ inc cx

mov si,10 ,Cn SC e inaltimea call 8re"tung/i inc bx cm" bx,=D000 #nz "! o"rire: #m" o"rire ,VVVVVV Subrutine VVVVVVVVVVVVVV linv: ,(fiseaza o linie verticala "us/ 8i "us/ cx "us/ b"

mov 8x,b" s/l 8x,@ s/l b",D a88 8x,b" a88 8i,8x mov cx,si lv!: %&' ?S:6DC7,al a88 8i,*10 loo" lv! "o" b" "o" cx "o" 8i ret 8re"tung/i: ,afiseaza un 8re"tung/i cu culoarea EculoareE la x!,F!, 8e ,lungime l si inaltime / "us/ cx "us/ 8i 8!: call inc 8i 8ec cx linv

0=1

#nz 8! "o" 8i "o" cx ret ?ND Start

.ro"ramul 11.7 .%&D?3 S%(33 .ST(2U 100+ .2&D? /B*0 Start: ,%o8 vi8eo *10x1>0 mov a/,0 mov al,!*/ int !0/ "rinc: %&' %&' (), 0(000+ ?S, ()

mov bx,=00/ "!: "us/ bx mov al,6bx7 inc al mov b",6bx;!7 an8 b",00ff/ mov 8i,6bx;17 an8 8i,0!ff/ mov cx,6bx;17 an8 cx,00*f/ ,in (3 culoarea ,in 5< e S! ,Cn DC e )! ,Cn 2) e lungimea 0=0

inc inc inc mov

cx cx cx si,/

,3ungimea trebuie sa nu fie 0 ,Cn SC e inaltimea

call 8re"tung/i "o" bx inc bx cm" bx,=D000 #nz "! o"rire: #m" o"rire %&' %&' CNT (+, >2+ (3, 00+ 1!+ ,Ieturn to D&S

,VVVVVV Subrutine VVVVVVVVVVVVVV lino: "us/ "us/ "us/ "us/ ,(fiseaza o linie orizontala , la F B 5< 8in ,"uncte cu culoarea 8in DC b" 8i cx ax

mov al,0 mov 8x,b" s/l 8x,@ s/l b",D a88 8x,b" a88 8i,8x re"z stosb "o" "o" "o" "o" ret linv: ax cx 8i b" ,(fiseaza o linie verticala 0=6

"us/ 8i "us/ cx "us/ b" mov 8x,b" s/l 8x,@ s/l b",D a88 8x,b" a88 8i,8x mov cx,si sub cx,! a88 8i,*10 lvi: %&' ?S:6DC7,al a88 8i,*10 loo" lvi "o" b" "o" cx "o" 8i ret 8re"tung/i: ,afiseaza un 8re"tung/i cu culoarea EculoareE la x!,F!, ,8e lungime l si inaltime / "us/ cx "us/ 8i call lino "us/ b" a88 b",si ,in 5< e S! call lino "o" b" "us/ ax mov al,0 call linv "o" ax inc 8i 8ec cx 8ec cx 0==

8!:

call inc 8i 8ec cx #nz 8! "us/ ax mov al,0 call linv "o" ax "o" 8i "o" cx ret

linv

?ND Start

.ro"ramul 1=.= .%&D?3 S%(33 .ST(2U 100+ .D(T( x!B!00 F!B=0 lungB!00 inaltB=0 culoB= culvB! .2&D? 3inieo macro x!,F!,lung,culoarea local lo! mov 8i,x! ,DC contine )! mov b",F! ,5< contine S! mov cx,lung ,2) contine numarul 8e "uncte mov al,culoarea,Cn (3 este culoarea mov 8x,b" ,Se face inmultirea s/l 8x,D ,lui 5< La8ica a lui S!M cu *10 s/l b",@ ,<rin co"iere in D) a88 b",8x ,8e"lasari la stinga si a8unare 0=B

,De"lasamentul obtinut ,a8resa initiala lo!: mov es:68i7,al ,<une "unctul inc 8i loo" lo! ,Ie"eta 8e 2) ori en8m

a88 8i,b"

se a8una la

3iniev macro x!,F!,lung,culoarea local lv! mov 8i,x! ,DC contine )! mov b",F! ,5< contine S! mov cx,lung ,2) contine numarul 8e "uncte mov al,culoarea,Cn (3 este culoarea mov 8x,b" ,Se face inmultirea s/l 8x,D ,lui 5< La8ica a lui S!M cu *10 s/l b",@ ,<rin co"iere in D) a88 b",8x ,8e"lasari la stinga si a8unare a88 8i,b" ,De"lasamentul obtinut se a8una la ,a8resa initiala lv!: mov es:68i7,al ,<une "unctul a88 8i,*10 ,Noul "unct este cu *10 mai ,8e"arte in memoria 8e ecran loo" lv! ,Ie"eta 8e 2) ori en8m Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ %&' !* %&' ?S, () ,in ?S linieo linieo liniev liniev x!,F!,lung,culo x!,F!;inalt,lung,culo x!,F!;!,inaltH!,culv x!;lungH!,F!;!,inaltH!,culv (), 0(000+, (8resa segmentului ecran in mo8ul

0=E

o"rire: #m" ?ND Start

o"rire

.ro"ramul 1=.< .%&D?3 S%(33 .ST(2U 100+ .D(T( x!B!00 F!B10 lungB!00 inaltB=0 culoB= culvB! .2&D? ,3inia orizontala 3inieo macro x!,F!,lung,culoarea local lo! mov 8i,x! ,DC contine )! mov b",F! ,5< contine S! mov cx,lung ,2) contine numarul 8e "uncte mov al,culoarea,Cn (3 este culoarea mov 8x,b" ,Se face inmultirea s/l 8x,D ,lui 5< La8ica a lui S!M cu *10 s/l b",@ ,<rin co"iere in D) a88 b",8x ,8e"lasari la stinga si a8unare a88 8i,b" ,De"lasamentul obtinut se a8una la ,a8resa initiala lo!: mov es:68i7,al ,<une "unctul inc 8i loo" lo! ,Ie"eta 8e 2) ori en8m ,3inia verticala 3iniev macro local lv! mov 8i,x! x!,F!,lung,culoarea ,DC contine )! 0=J

b",F! ,5< contine S! cx,lung ,2) contine numarul 8e "uncte al,culoarea,Cn (3 este culoarea 8x,b" ,Se face inmultirea 8x,D ,lui 5< La8ica a lui S!M cu *10 b",@ ,<rin co"iere in D) b",8x ,8e"lasari la stinga si a8unare 8i,b" ,De"lasamentul obtinut se a8una la ,a8resa initiala lv!: mov es:68i7,al ,<une "unctul a88 8i,*10 ,Noul "unct este cu *10 mai ,8e"arte in memoria 8e ecran loo" lv! ,Ie"eta 8e 2) ori en8m ,3inia s"re 8rea"ta 3in8r macro x!,F!,lung,culoarea local lv! mov 8i,x! ,DC contine )! mov b",F! ,5< contine S! mov cx,lung ,2) contine numarul 8e "uncte mov al,culoarea,Cn (3 este culoarea mov 8x,b" ,Se face inmultirea s/l 8x,D ,lui 5< La8ica a lui S!M cu *10 s/l b",@ ,<rin co"iere in D) a88 b",8x ,8e"lasari la stinga si a8unare a88 8i,b" ,De"lasamentul obtinut se a8una la ,a8resa initiala lv!: mov es:68i7,al ,<une "unctul a88 8i,*1! ,Noul "unct este cu *10 mai ,8e"arte in memoria 8e ecran loo" lv! ,Ie"eta 8e 2) ori en8m ,3inia s"re stanga 3inst macro x!,F!,lung,culoarea local lv! mov 8i,x! ,DC contine )! mov b",F! ,5< contine S! mov cx,lung ,2) contine numarul 8e "uncte mov al,culoarea,Cn (3 este culoarea mov 8x,b" ,Se face inmultirea 0=K

mov mov mov mov s/l s/l a88 a88

,lui 5< La8ica a lui S!M cu *10 ,<rin co"iere in D) ,8e"lasari la stinga si a8unare ,De"lasamentul obtinut se a8una la ,a8resa initiala lv!: mov es:68i7,al ,<une "unctul a88 8i,*!O ,Noul "unct este cu *10 mai ,8e"arte in memoria 8e ecran loo" lv! ,Ie"eta 8e 2) ori en8m Start: ,%o8 vi8eo *10x100 mov a/,0 mov al,!*/ int !0/ %&' %&' (), 0(000+, (8resa segmentului ecran in mo8ul ,!* ?S, () ,in ?S x!,F!,lung,culo x!,F!,lung/1;!,culo x!;lung,F!,lung/1,culo x!,F!;D0;lung,lung,culo x!,F!;D0,lung,culo x!,F!;D0,lung;!,culo

s/l s/l a88 a88

8x,D b",@ b",8x 8i,b"

linieo lin8r linst linieo liniev lin8r

o"rire: #m" o"rire ?ND Start

.ro"ramul 1=.F .%&D?3 S%(33 .ST(2U 100+ .2&D? x!B!00 F!B=0 0=L

lB100 /B=0 culoarea B!/ linv macro ,(fiseaza o linie verticala local lv! "us/ 8i "us/ cx "us/ b" mov 8x,b" s/l 8x,@ s/l b",D a88 8x,b" a88 8i,8x mov cx,si lv!: %&' ?S:6DC7,al a88 8i,*10 loo" lv! "o" b" "o" cx "o" 8i en8m 8re"tung/i macro ,afi9eaz un 8re"tung/i cu culoarea EculoareE la x!,F!, ,8e lungime l si inaltime / "us/ cx "us/ 8i 88!: linv inc 8i 8ec cx #nz 88! "o" 8i "o" cx en8m Start: ,88! nu trebuie 8eclarat 3&2(3

0B7

,%o8 vi8eo *10x1>0 mov a/,0 mov al,!*/ int !0/ "rinc: %&' %&' "!: mov mov inc mov an8 mov an8 mov an8 inc mov (), 0(000+ ?S, () bx,*00/ al,6bx7 al b",6bx;!7 b",00ff/ 8i,6bx;17 8i,0!ff/ cx,6bx;17 cx,00*f/ cx si,10 ,in (3 culoarea ,in 5< e S! ,Cn DC e )! ,Cn 2) e lungimea ,3ungimea trebuie sa nu fie 0 ,Cn SC e inaltimea

8re"tung/i inc bx cm" bx,=D000 #nz "! o"rire: #m" o"rire ?ND Start

0B1

AIALI(I2A*I5
1. #. "p(nulescu, ".#."p(nulescu - 'ircuite integrate digitale i sisteme cu microprocesoare, 1ditura 3ictor, *ucureti, 1LLEH 0. #. "p(nulescu, ".#."p(nulescu - +relucrarea, nregistrarea, transmiterea i afiarea datelor, ?niversitatea din *ucureti, 1LK=H 6. ".#."p(nulescu - +rogramarea in limbaj de asamblare a microcontrolerelor -,ucrri de laborator, 1ditura 3ictor, 0776 =. D. "omnea, <.3ladu -+rogramarea n 1LL0H ssembler - 1ditura tehnic, *ucureti,

B. 3lad 'aprariu, ndrei 1nAedi, :arius :untean- "istemul de operare D2". Shidul programatorului, 1d. :icroinformatica, 'luj-;apoca, 1LL6H E. 3lad 'aprariu, "istemul de operare D2". 8uncii sistem, 1d. :icroinformatica, 'luj-;apoca, 1LLBH J. TTT #;<1, :icroprocessors, 3ol. 1, 0, #ntel 'orporation, "anta 'lara, 'alifornia, 1LL1H K. #ntel rchitecture "of5are Developer`s :anual 3ol 1, 0 , 0*, 6, #ntel 'orporation, "anta 'lara, 'alifornia, 0776.

0B0

<UP2I=S
#ntroducereddddddddddddddddddddddddddddd6 ,ucrarea de laborator nr.1. ?tilizarea macroasamblorului < ": i a depanatorului <D dddddddddddddddddddddddddddddddd.J 1.1 ?tilizarea < ": i <D n forma clasic $linie de comand, D2"% ...........J 1.0 ?tilizarea < ": i <D n forma integrata $fereastra 4indo5s% .............10 ,ucrarea de laborator nr. 0. #nstruciuni de transfer ntre registre ..............................1B 0.1 1lemente ale limbajului de asamblare ......................................................1B 0.0 ;otaia he!azecimal.................................................................................1E 0.6 9egistrele procesoarelor #ntel !KE ...........................................................1K 0.=. #nstruciuni de transfer ntre registre ........................................................1L 0.B. #nstruciuni de interschimbare ntre registre ............................................07 0.E. #nstruciuni de adunare i scdere ............................................................01 ,ucrarea de laborator nr. 6. <ransferuri de date i operaii aritmetice cu memoria ...06 6.1 'omponentele unei adrese logice .............................................................06 6.0 'omponentele unei adrese efective ..........................................................0B 6.6 <ransferuri pe 1 octet i pe 0 octei ..........................................................0J 6.= :oduri de adresare ...................................................................................0K ,ucrarea de laborator nr. =. +rocedee de transfer cu memoria ..................................6B =.1 <ransferuri prin adresare la memorie ......................................................6B =.0 <ransferuri prin stiv ................................................................................6B =.6 <ransferul prin iniializareaIrezervarea de locaii de catre asamblor........6J =.= #nstruciunea de translatare a unei adrese, C, < ...................................6L =.B #nstruciuni de transfer pentru registrul de flaguri ....................................=7 =.E -ncrcarea unei adrese logice din memorie ..............................................=7 =.J -ncrcarea unei adrese efective..................................................................=1 0B6

,ucrarea de laborator nr. B. 2peraii aritmetice .........................................................=6 B.1 9eprezentarea n complement fa de 0 ....................................................=6 B.0 +rezentarea instruciunilor aritmetice .......................................................=B ,ucrarea de laborator nr. E. 2peraii logice, deplasri i rotaii dddddddd.B0 E.1. 2peraii logice .........................................................................................B0 E.0. Deplasri i rotaii ....................................................................................B6 E.6. 2peraii aritmetice *'D $opional, vezi ne!a 1% .................................BE ,ucrarea de laborator nr. J. #nstruciuni de salt ..........................................................BK J.1 #nstruciuni de salt necondiionat .............................................................BK J.0 #nstruciuni de salt condiionat .................................................................BK J.6 #nstruciuni de ciclare ,22+, ,22+cc ....................................................E7 ,ucrarea de laborator nr. K. #nstruciuni de lucru cu iruri .........................................E0 K.1. #nstruciunile ,2D"*, ,2D"4, "<2"*, "<2"4 ................................E0 K.0 #nstruciunile :23"* i :23"4 ..........................................................E= K.6 #nstruciunile pentru analiza coninutului irurilor, "' "* i "' "4 ..EE K.=. #nstruciunile de comparare iruri ':+"* i ':+"4 ..........................EK K.B +refi!ele 91+1, 91+M, 91+;1 i 91+;M .............................................J7 ,ucrarea de laborator nr. L. 8uncii sistem $#;< 01h% ..............................................J1 L.1 ?tilizarea ntreruperilor soft5are .............................................................J1 L.0 8uncii sistem de intrare i ieire ..............................................................J0 ,ucrarea de laborator nr. 17. fiarea n mod grafic .................................................JJ 17.1 ?tilizarea ntreruperii 17h ......................................................................JJ 17.0 "crierea direct n memoria de ecran .....................................................JL ,ucrarea de laborator nr. 11. ?tilizarea de subrutine $proceduri% ..............................K= 11.1 'hemarea i revenirea din subrutin .......................................................K= 11.0 "alvarea i refacerea registrelor afectate de subrutin ............................KE ,ucrarea de laborator nr. 10. ?tilizarea macroinstruciunilor ....................................L7 10.1 Seneralitati .............................................................................................L7 10.0 Declararea i utilizarea macroinstruciunilor ..........................................L7 10.6 ?tilizarea etichetelor locale cu directiva ,2' , ..................................L= 10.= lte faciliti de macroasamblare ..........................................................LE ;1C 1. "1<?, D1 #;"<9?'h#?;# ,1 :#'92+92'1"2 91,29 #;<1, K7!KE -; :2D?, 91 , " ? 3#9<? , K7KEddddddddddddd..LJ 0B=

1.1 ;otaii, convenii dddddddddddddddddddd..LJ 1.0. #nstruciuni de transfer dddddddddddddddddd..LK 1.6. #nstruciuni de calculddddddddddddddddddd17K 1.= #nstruciuni de lucru pe bit dddddddddddddddd...10= 1.B. #nstruciuni de ramificare n program dddddddddddd.10J 1.E. #nstruciuni speciale ddddddddddddddddddd166 ;1C 0. ,ista serviciilor de ecran #;< 17h ddddddddddddd....16B

;1C 6. ,ista funciilor sistemului de operare #;< 01h ddddddddd.1E1 ;1C =. 9ezolvrile programelordddddddddddddddddd1K1

*ibliografie d..dddddddddddddddddddddddddd.0B6

0BB

S-ar putea să vă placă și