Sunteți pe pagina 1din 256

Programarea n limbaj de asamblare a microprocesoarelor

-Lucrri de laborator-
1
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. #ntr-
adevr, 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 s-
au 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.
=
B
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 ntr-
un $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-Fccessories-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.
J
*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
K
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 7D'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
9egistrele de K bii ?tilizare preferenial
C @ , Dedicat nmulirilor i mpririlor,
etc.
*C *@ *, dresare $baza segmentului de date%
'C '@ ', 'ontorizare
DC D@ D, ?tilizat n inmuliri i impartiri
D" dresa segmentului de date
'" dresa segmentului de cod

"" dresa segmentului de stiv
1" dresa e!trasegment $transfer de
iruri%

"# dresa sursei n transferuri de iruri
D# dresa destinaiei n transferuri de
iruri

*+ dresare $baza segmentului de stiv%
"+ #ndicator de stiv
#+ ;umrator de program
8 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-+) 1C,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:
%&' (), **+ ,-ncarc .n () constanta /exa 00**+
%&' D), !!11+ ,-ncarc .n D) constanta /exa !!11+
%&' 23, (3 ,-ncarc .n 23 con4inutul lui (3
%&' 53, D+ ,-ncarc .n 53 con4inutul lui D+
%&' (+, D3 ,-ncarc .n (+ con4inutul lui 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 *@Rh
+.?. 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 0
Kn
, 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
7JhR1717.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-0
K
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-0
1E
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
. .
. .
. .
. .
. . ,ocaia vizat
"egment 0
dresa efectiv $1%
dresa logica $,%
"egment 1 dresa baza segment $*"%
*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=> $0
1E
locaii%.
<onBen4ii 8
(rice operand pus ntre paranteze drepte reprezint o adresa de
memorie . De e!emplu U601V reprezint coninutul locaiei de memorie cu adresa
efectiv 601, 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 1 format numai din ultimul
termen%
I separ variantele unui termen
0=
*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 2egistru de segment implicit
"+ ""
*+ ""
*C D"
"# D"
D# 1"
*+N"# sau *+ND# ""
*CN"# sau *CND# 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 s-
ar 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 sau %&' 23,65<76SC7
S55 D),65);DC7 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. celasi program ca la punctul 6.10, dar cu numere pe un octet
multipli de B.
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+ () ,(cum S<BS<ini4ialH1.
,Salveaz () la 6S<ini4ial H17.
<GS+ 5) ,Salveaz 5) la 6S<ini4ialH>7
. ,(lte instruc4iuni
. ,"e "arcursul carora S<BS<ini4ialH >
.
<&< 5) ,Iea8uce 5) 8e la6S<ini4ialH>7.
,(cum S<BS<ini4ialH1.
<&< () ,Iea8uce () 8e la 6S<ini4ialH17.
,(cum S<BS<ini4ial.
.
.
.
?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
.
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 J
variabila1 D5 *K
variabila* D$ J
sir! D5 !0 DG<L!(M
.2o8e
start:
mo' a(,Pdat !ncarc adresa
se"mentulu#
mo' ds,a( de date &n $%
mov al,variabila1 ,-ncarc .n (3 constanta
,*K/
a88 al, ==/ ,(8una cu ==/
6E
mov varibila!,al ,De"une octetul 8in (3 .n
,memorie la a8resa
,variabila!
mov a/,variabila1 ,(8uce 9i .n (+ constanta
,*K/
mov variabila*,ax ,De"une cuvNntul 8in ()
,.n memorie la a8resa
,variabila*
term: #m" tem"
en8 start
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$ 1*(>/,052=D/,OD/ ,Declar > numere
,8e 1 octe4i
caractere D5 PKP,P1P,PQP ,Declar *
,caractere 8e un octet
const! D5 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,B
.
.
.
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
@=R8 $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 -#ncrementare
ciune) dst R dst N 1
2perand) 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 al,**
mov bl,>>
sub al,bl ,3a aceast sc8ere a"are .m"rumut
sbb cl,al ,(cesta e luat .n consi8era4ie aici
"5< dst -Decrementare
==
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 1C 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) 1C [ 1C T src60H src) r60,m60
Dac 1DC R 7 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i
28 [ '8
Exemplul !.:
mul bl , Se inmulteste (3 cu 53 L@ bi4iM iar
,rezultatul este in ()
mul cx , Se inmulteste () cu 2) iar rezultatul
,este .n D) Locte4ii su"erioriM 9i ()
,Loc4etii inferioriM
IUL $dst,%src - -nmulirea cu semn a lui ,, C, 1C 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 1C 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) 1C [ 1C 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)
1C [ 1DC ) 1CIsrclEH $c(tul mpririi%
1DC [ 1DC ) 1C \ srclE $restul mpririi%
src) r60,m60.
2bservaii) Dac rezultatul $catul% nu incape n registrul destinaie ,, C
respectiv 1C, 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)
1C [ 1DC ) 1CIsrclEH $c(tul mpririi,cu semn%
1DC [ 1DC ) 1C \ srclE $restul mpririi,cu semn%
src) r60,m60.
2bservaie) Dac rezultatul $c(tul% nu ncape n registrul destinaie ,, C
respectiv 1C, 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. - 'onversie de la *Ate $K bii% la 4ord $1E bii% cu pstrare
semn. ciune) , J R 7 RF @ R7H
, J R 1 RF @ R788H
=K
<." - 'onversie de la 4ord $1E bii% la D5ord $60 bii% cu pstrare
semn. ciune) 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 0K.
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 srcn 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)
' :"* ,"*
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)
:"* ,"* '
2peranzi) -dstH
-UnrV) 1, ',,immK.
B0
7
7
Descriere) 2perandul src este impartit cu 0 de UnrV ori.
SAL src,UnrV-Deplasare aritmetic spre st(nga cu nr poziii $numere cu
semn%.
ciune)
' :"* ,"*
2peranzi) -dstH
-UnrV) 1, ',,immK.
Descriere) 2perandul src cu semn este nmulit cu 0 de UnrV ori.
SA2 src,UnrV-Deplasare aritmetica spre dreapta cu nr pozitii $numere cu
semn%
ciune)
:"* ,"* '

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
7
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 -justare , dup adunare $*'D despachetat%.
AAS -justare , dup scdere $*'D despachetat%.
"AA -justare , dup adunare $*'D inpachetat%.
"AS -justare , dup scdere $*'D impachetat%.
AA -justare , dup nmulire.
AA" -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*CVRLLh,
*+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 *,R7Eh 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 0
E
. +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) TP 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 L((P=5 rel> $cicleaz at(ta timp c(t nu e%ist egalitate%.
Ac4iune8 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) L("SA - -ncarc de la D")"# n ,.
ciune) ,[U"#V.
"#["# N1 dac D8R7, "#["#-1 dac D8R1.
:nemonic) L("S. - -ncarc de la D")"# n C.
ciune) ,[U"#V.
@[U"#N1V.
"#["# N0 dac D8R7, "#["#-0 dac D8R1.
E1
:nemonic) ST(SA - -ncarc , la 1")D# .
ciune) U"#V[,.
"#["# N1 dac D8R7, "#["#-1 dac D8R1.
:nemonic) ST(S. - -ncarc , la 1")D#.
ciune) 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 ,Se "utea folosi 9i mov
,ax,R8at
mov 8s,ax ,Segmentul surs .n DS
mov ax,seg 5locDest ,Necesar numai 8ac
,blocurile sunt .n
,segmente 8iferite
mov es,ax ,Segmentul 8estina4ie ?S
cl8 ,8irec4ia .n sensul
,cre9terii a8reselor
mov 9i, offset 5locSursa ,(? a sursei .n SC
mov 8i, offset 5locDest ,(? a 8estina4iei .n DC
mov cx, 3ungime5loc ,Numrul 8e transferuri .n 2)
bucla:
lo8sb ,-ncarc .n (3 un octet
stosb ,9i .l trimite la 8estina4ie
loo" bucla ,Decrementeaz 2) 9i reia
,bucla "Nn cNn8 2) 8evine 0
term:
#m" term
en8 start
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) (ESA - :ut un octet de la adresa D")"# la adresa 1")D#.
ciune) UD"V[U"#V.
"#["# N1 dac D8R7, "#["#-1 dac D8R1.
D#[D# N1 dac D8R7, D#[D#-1 dac D8R1.
E6
:nemonic) (ES. - :ut un cuv(nt de la adresa D")"# la adresa 1")D#
ciune) 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
term:
#m" term
en8 start
#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 , cu coninutul locaiei
1")D# i poziioneaz corespunztor flagurile.
ciune) , - U1")D#V.
:nemonic) S<AS. - 'ompar coninutul registrului C cu coninutul
locaiei 1")D# i 1")D#N1 i poziioneaz corespunztor flagurile.
ciune) , - U1")D#V.
@ - U1")D#N1V.
#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 * 8u"L!,1,*,>,=M
35 eAu TH5locSursa ,(samblorul
,calculeaza lungimea blocului
.co8e
start:
mov ax,R8at
mov 8s,ax
mov es,ax ,-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 ,(8uce .n D3 octetul 8in 9irul !
mov 8/,68i7 ,9i .n D+ octetul 8in 9irul 1
,Linstruc4iuni .n sco" 8i8actic,
"ermit vizualizarea elementelorM
cm"sb ,2om"ar (3 cu octetul res"ectiv
#nz b! ,Dac nu este egalitate, se sare
EK
inc b/ ,Dac sHa gasit egalitate, se
,incrementeaz 5+
b!: loo" bucla ,Ieluare 8ac nu sHa terminat
,9irul !
term:
#m" term
en8 start
odul de lucru
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 ,2o8ul func4iei sistem .n (+
int 1! ,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 s
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 s
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 7h $,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 7h% 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 7777@ $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 ,R7 se face tergerea
ecranului.
*@ R tributele liniilor inserate
?rmtoarea secven va face stergerea ecranului)
JE
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: ,(fi9eaz un "unct la xB2), FBD) 9i
,culoareB(3
mov a/,02/ ,func4ia 02/
int !0/ ,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/ ,func4ia 02/
int !0/ ,call bios service
inc b/ ,2alculeaz culoarea "entru
,urmtorul "unct
mov al,b/ ,2o"ie .ntrHun alt registru "t
,"relucrare
s/r al,= ,Se iau numai cei * bi4i mai
,semnificativi 8in registrul 8e culoare
inc cx ,2alculeaz x "entru urmtorul "unct
cm" cx,D00 ,Se afi9eaz o linie 8e D00 "uncte
#ne 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 a/,0b/
mov b/,!
mov bl,@
int !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
7777@ 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, ) , DC B )
%&' D), S , 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) , D) salvat "entru a "utea fi utilizat
,.n calcule
SG5 2), () , 2) B )1 H )! 3ungimea segmentului
%&' DC, () , DC B )!
%&' D), 5) , D) B S
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
(DD DC, D) , DC B S x *10 ; )
<&< D) , Ieface vec/iul D), care con4ine
,culoarea L.n D3M
%&' (3,D3 , 2uloarea este "us .n (3
I?< ST&S5 , Ie"et stocarea lui (3 .n 2) loca4ii
, consecutive 8e la a8resa 8in DC
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, 7777h 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 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
mov 8x,b" ,Se face .nmul4irea
s/l 8x,D ,lui 5< La8ic a lui S!M cu *10
s/l b",@ ,<rin co"iere .n D)
a88 b",8x ,8e"lasri la stNnga 9i a8unare
a88 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 ,(ici se 8eclar "arametrii liniilor
F!B=0
lung!B100
culoarea! B=

x1B!00
F1B!=0
K6
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 8i,x! ,<arametrii "rimei linii
mov b",F!
mov cx,lung!
mov al,culoarea!
call 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 bp,7
add d(,bp
add d#,d( %8a stab#l#t adresa pr#mulu# punct
rep+ stosb A#c# se scr#u punctele l#n#e#
ret 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 ,'aloarea ini4ial a lui DC
mov bx,*0 ,'aloarea ini4ial a lui 5)
mov 9i,10 ,2ontorul 8e c/emri subrutina
et!: call subrutina ,2/eam subrutina
a88 8i,= ,'ec/ea valoare a lui DC se a8un
,cu =
sub bx,* ,'ec/ea valoare a lui 5) se sca8e
,cu *
8ec 9i ,Decrementeaza contorul
#nz et! ,Ieia 8ac contorul nu a a#uns la 0
.
. ,(lte instruc4iuni
.
subrut#na: %ubrut#na 'a mod#2#ca pe $, 1# BX
push d# de aceea se sal'ea+ $,
push b( 1# BX
. ;rmea+ corpul subrut#ne#
.
.
#nc d# &n care se mod#2#ca $,
dec b( 1# alte re"#stre
.
.
.
pop b( *a s2:r1#t se re2ace &nt:# BX
pop d# 1# apo# $, 3dec# &n ord#ne
#n'ers5
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
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" ,Ieface
"o" 8i ,registrele
"o" cx ,care sHau mo8ificat
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.
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 bx,=00/ ,-nce"utul zonei 8e memorie
mov 9i,1000 ,Numrul total 8e 8re"tung/iuri
8re"tnou: ,%ai .ntNi "arametrii "rimei linii
mov 8i,6bx7 ,DC e aici maxim KKKK/BD==*=
sub 8i,D==*DH*10,x! e acum maxim *10
mov b",6bx;!7 ,5< e ini4ial maxim D==*=
sub b",D==*DH100,F! e acum maxim 100
mov cx,6bx;17 ,2) e ini4ial maxim D==*=
an8 cx,0!f/ ,3ungimea e acum maxim *1
mov al,6bx;*7 ,(3 LculoareaM e maxim 1==
mov a/,/ ,Dre"tung/iurile au .nl4imea /
call 8re"tung/i ,(fi9eaz 8re"tung/iul
a88 bx,> ,Cn8exul .n memorie e crescut cu >
8ec 9i ,Numrul 8e re"etri sczut cu !
#nz 8re"tnou ,Dac nu sHa a#uns la 0, re"et
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 ,(ici se 8eclar "arametrii liniilor
F!B=0
lungB100
culoareaB=

.2&D?
,(ici se 8eclara macroinstruc4iunea 8e trasare linie
*#n#eo macro
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
mov 8x,b" ,Se face .nmul4irea
s/l 8x,D ,lui 5< La8ic a lui S!M cu *10
s/l b",@ ,<rin co"iere .n D)
a88 b",8x ,8e"lasri la stNnga 9i a8unare
L7
a88 8i,b" ,De"lasamentul ob4inut se a8un la
,a8resa ini4ial
re"z stosb ,Se face transferul 9irului
endm
Start:
,%o8 vi8eo *10x100
mov a/,0
mov al,!*/
int !0/
%&' (), 0(000+, (8resa segment ecran .n mo8ul !*
%&' ?S, () ,.n ?S
*#n#eo A#c# s8a chemat macro#nstruc)#unea
o"rire:
#m" o"rire
?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
mov cx,lung ,2) con4ine numrul 8e "uncte
mov al,culoarea,-n (3 este culoarea
mov 8x,b" ,Se face .nmul4irea
s/l 8x,D ,lui 5< La8ic a lui S!M cu *10
s/l b",@ ,<rin co"iere .n D)
a88 b",8x ,8e"lasri la stNnga 9i a8unare
a88 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
l#n#eo 10,100,<0,= .arametr## actual# a# pr#me#
l#n##
l#n#eo =0,1=0,<0,1 .arametr## actual# a# alte#
l#n##
o"rire:
#m" o"rire
?ND Start
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
mov 8x,b" ,Se face .nmul4irea
s/l 8x,D ,lui 5< La8ic a lui S!M cu *10
s/l b",@ ,<rin co"iere .n D)
a88 b",8x ,8e"lasri la stNnga 9i a8unare
a88 8i,b" ,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
liniev x!,F!,lung,culoarea
liniev 10,!10,*0,!
o"rire:
#m" o"rire
?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.
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-+) 1C,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 ,,C sau
1C $n funcie de mrimea dst%.
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
@=R8 $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 [ 1C,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 [ 1C,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
1C [ UportV60 .
, [ portUDCVK sau
C [ portUDCV1E sau
1C [ 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 1C, 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 [ 1C
portUDCVK [ , sau
portUDCV1E [ C sau
portUDCV60 [ 1C
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 1C, 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) L("SA - Nncarc un octet de la D")"# n ,
Ac4iune) ,[ U"#VH
"#[ "# N1 dac D8R7, "#[ "#-1 dac D8R1.
nemonic) L("S. - -ncarc un cuv(nt de la D")"# n C
Ac4iune) ,[ U"#VH
@[ U"#N1VH
"#[ "# N0 dac D8R7, "#[ "#-0 dac D8R1.
nemonic) L("S" - -ncarc un dublucuvant de la D")"# n 1C
Ac4iune) 1C7[ U"#V $octetul inferior al 1C%H
1C1[ U"#N1VH
1C1[ U"#N0VH
1C1[ U"#N6V $octetul superior al 1C%H
"#[ "# N= dac D8R7, "#[ "#-= dac D8R1.
nemonic) ST(SA - -ncarc , la 1")D#
Ac4iune) UD#V[ ,
D#[ D# N1 dac D8R7, D#[ D#-1 dac D8R1
nemonic) ST(S. - -ncarc , la 1")D#
Ac4iune) UD#V[ ,H
UD#N1V[ @H
D#[ D# N0 dac D8R7, D#[ D#-0 dac D8R1.
nemonic) ST(S" - -ncarc un dublucuvant din 1C la 1")D#
Ac4iune) UD#V[ 1C7 $octetul inferior al 1C%H
UD#N1V[ 1C1 H
UD#N0V[ 1C0 H
UD#N6V [ 1C6 $octetul superior al 1C%H
D#[ D# N= dac D8R7, D#[ D#-= dac D8R1.
nemonic) L("S dst'src - :ut un octet, doi octei sau = octei de la
adresa la adresa D")"# n ,, C sau 1C. 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 1C 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 1C 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) (ESA - :ut un octet de la adresa D")"# la adresa 1")D#
Ac4iune) UD"V[ U"#VH
"#[ "# N1 dac D8R7, "#[ "#-1 dac D8R1H
D#[ D# N1 dac D8R7, D#[ D#-1 dac D8R1.
nemonic) (ES. - :ut un cuv(nt de la adresa D")"# la adresa 1")D#
Ac4iune) UD#V[ U"#VH
UD#N1V[ U"#N1VH
"#[ "# N0 dac D8R7, "#[ "#-0 dac D8R1H
D#[ D# N0 dac D8R7, D#[ D#-0 dac D8R1.
nemonic) (ES" - :ut un dublu-cuvant $60 de bii% de la adresa
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 1C 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 1C 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) 1C [ 1C T src60H src) r60,m60H
Dac 1DC R 7 atunci '8 [ 7H -n celelalte cazuri '8 [ 1 i
28 [ '8.
IUL $dst,% src - -nmulirea cu semn a lui ,,C , 1C 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 1C 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) 1C [ 1C 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)
1C [ 1DC ) 1CIsrclE $c(tul mpririi%H
1DC [ 1DC ) 1C \ srclE $restul mpririi%H
src) r60,m60.
2bservaii) Dac rezultatul $c(tul% nu ncape n registrul destinaie ,, C
respectiv 1C, 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)
1C [ 1DC ) 1CIsrclE $c(tul mpririi%H
1DC [ 1DC ) 1C \ srclE $restul mpririi%H
src) r60,m60.
2bservaie) Dac rezultatul $c(tul% nu ncape n registrul destinaie ,, C
respectiv 1C, 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 1C, cu
pstrare semn.
Ac4iune)
1C1B R 7 RF 1C1E ..1C61R 1 H
1C1B R 1 RF 1C1E ..1C61R 1 .
*itul cel mai semnificativ al lui C este copiat n toi bitii jumtii
superioare a lui 1C.
#ndicatorii de condiii nu sunt afectai.
<"[ - 'onversie de la D5ord $60 bii% n 1C la X5ord $E= bii% n
1DC)1C, cu pstrare semn.
Ac4iune)
1C61 R 7 RF 1DC [ 7H
,61 R 1 RF 1DC [ 788888888h.
*itul cel mai semnificativ al lui 1C 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 ope-
ranzi. 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 , cu coninutul
locaiei 1")D# i poziioneaz corespunzator flagurile
Ac4iune) , - 1")UD#VH
D#[ D#N1 dac D8R7, D#[ D#-1 dac D8R1.
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 1C cu coninutul
locaiilor 1")UD#V, 1")UD#N1V, 1")UD#N0V i 1")UD#N6V i poziioneaz corespunzator
flagurile.
Ac4iune) 1C1 - 1")UD#V - octetul cel mai puin semnificativ al lui 1CH
1C0 - 1")UD#N1V H
1C6 - 1")UD#N0V H
1C= - 1")UD#N6V - octetul cel mai semnificativ al lui 1CH
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 1C 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 ,R7h 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) -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)
:"* ,"* '
2peranzi) -src)rK,r1E,r60,mK,m1E,m60H
-UnrV) 1, ',,immK.
Descriere) 2perandul src este mprit cu 0 de UnrV ori.
SAL src,UnrV-Deplasare aritmetica spre st(nga cu nr poziii $numere cu
semn%
Ac4iune)
' :"* ,"*
2peranzi) -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 "@,
107
7
7
7
SA2 src,UnrV-Deplasare aritmetic spre dreapta cu nr poziii $numere cu
semn%
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)
:"* ,"* '
2peranzi) -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 in-
struciunilor $al doilea operand este un 1%. 1ste nedefinit n toate celelalte cazuri.
+entru deplasriIrotiri spre st(nga, bitul '8 de dup deplasare este Qsau-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
' :"* 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
:"* src ,"* :"* dst ,"* '

2peranzi) -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 0
61
-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
0
61
-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
0
61
-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 -0
61
i 0
61
-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
TP 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
7h -"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 I3SH
11h - Seneratorul de caractere 1SH
10h - 8uncii speciale 1SH
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#: (+ 00/,
(3 %o8ul vi8eo.
9e+ultate: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
4abelul modur#lor '#deo
Adresa de
Mod 4#p 9e+olu)#a Adaptor 0ulor# memor#e
00/ Text >0 x 1= (ll but %D( !D graF 5@000
0!/ Text >0 x 1= (ll but %D( !D fore/@ back 5@000
01/ Text @0 x 1= (ll but %D( !D graF 5@000
0*/ Text @0 x 1= (ll but %D( !D fore/@ back 5@000
0>/ Wra"/ics *10 x 100 (ll but %D( > 5@000
0=/ Wra"/ics *10 x 100 (ll but %D( > graF 5@000
0D/ Wra"/ics D>0 x 100 (ll but %D( 1 5@000
0Q/ Text @0 x 1= %D(,?W( b/w 50000
0@/ Wra"/ics !D0 x 100 <2#r !D 50000
0O/ Wra"/ics *10 x 100 <2#r !D 50000
0(/ Wra"/ics D>0 x 100 <2#r > 50000
05/ Ieserve8 Linternal to ?W(M
02/ Ieserve8 Linternal to ?W(M
0D/ Wra"/ics *10 x 100 ?W( !D (0000
0?/ Wra"/ics D>0 x 100 ?W( !D (0000
0K/ Wra"/ics D>0 x *=0 ?W( b/w (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 cursorului "rin stabilirea liniei 8e
.nce"ut 9i 8e sfNr9it.
,ntrr#: (+ 0!/,
2+ 3inia 8e .nce"ut a cursorului L0 H *!M,
23 3inia 8e sfNr9it a cursorului L0 H *!M.
9e+ultate: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
Valor#le l#n##lor de &nceput 1# s2:r1#t ale cursorulu# 30@ s# 0*5
Adaptor
.erm#se ,mpl#c#te
-nce"ut SfNr9it -nce"ut SfNr9it
2W( 0 Q D Q
%D( 0 !* !! !1
?W(, 'W( 0 !* DL!!M
QL!1M De"in8e 8e
mo8
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
16E
a"are format 8in 8ou linii conform "rinci"iului: 8u" ultima linie
a blocului 8e caracter urmeaz "rima linie.
<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#: (+ 01/,
5+ Numarul "aginii afi9ate,
D+ 3inie,
D3 2oloan.
9e+ultate: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
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
16J
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.
Eezi !i 8 #;< 17h, 76h #;< 17h, 7Bh.
I=T 1D7' D-7 &-) <ite!te pozi4ia !i mrimea cursorului
Ia"orteaz "ozi4ia Llinia 9i coloanaM 9i mrimea cursorului
"entru "agina afi9at s"ecificat.
,ntrr#: (+ 0*/,
5+ Numrul "aginii afi9ate.
9e+ultate: 2+ 3inia 8e start a cursorului,
23 3inia 8e sfNr9it a cursorului,
D+ 3inie,
D3 2oloan.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
Valor#le l#n##lor de &nceput 1# s2:r1#t ale cursorulu# 30@ s# 0*5
Adaptor
.erm#se ,mpl#c#te
-nce"ut SfNr9it -nce"ut SfNr9it
2W( 0 Q D Q
%D( 0 !* !! !1
?W(, 'W( 0 !* DL!!M
QL!1M De"in8e 8e
mo8
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
16K
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.
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) <ite!te pozi4ia creionului optic
Ia"orteaz "ozi4ia 9i starea creionului o"tic.
,ntrare: (+ 0>/.
9e+ultate: (+ Stare L0Bneactivat, !BactivatM,
5) Numrul coloanei unui "ixel L0HD*OM,
2+ Numrul liniei unui "ixel L0H!OOM,
2) Numrul liniei "entru mo8urile 0K/H!0/L0HnnnM,
D+ Numrul liniei caracterului L0H1>M,
D3 Numrul coloanei caracterului L0H*O sau 0HQOM.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
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) Seteaz pagina actiB a$i!at
Seteaz "agina activ afi9at.
,ntrare: (+ 0=/,
(3 Numrul "aginii afi9ate.
9e+ultate: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
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*
1=7
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
"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: (+ 0D/,
(3 Numrul 8e linii 8e 8erulat L8aca este
0, 9terge .ntreaga fereastrM,
*@ tributele displaA-ului pentru liniile
goaleH
2+ Numrul liniei 8in col4ul stNnga sus,
23 Numrul coloanei 8in col4ul stNnga sus,
D+ Numrul liniei 8in col4ul 8rea"ta #os,
D3 Numrul coloanei 8in col4ul 8rea"ta #os.
9e+ultate: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
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.
1=1
Eezi !i8 #;< 17h, 7Jh.
I=T 1D7' DJ7 &J) "eruleaz $ereastra n jos
Deruleaz fereastra s"ecificat .n #os cu un numr s"ecificat 8e
linii.
,ntrr#: (+ 0Q/,
(3 Numrul 8e linii 8e 8erulat L8ac este 0,
9terge .ntreaga fereastrM,
5+ (fi9eaz atributele "entru liniile libere,
2+ Numrul liniei 8in col4ul stNnga sus,
23 Numrul coloanei 8in col4ul stNnga sus,
D+ Numrul liniei 8in col4ul 8rea"ta #os,
D3 Numrul coloanei col4ul 8rea"ta #os.
9e+ultate: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC
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
Ia"orteaz valoarea (S2CC 9i L.n mo8ul textM atributele
caracterului 8e la loca4ia curent a cursorului .n "agina
s"ecificat.
,ntrare: (+ 0@/,
5+ (fi9eaz numrul "aginii Lnumai .n
mo8urile textM.
9e+ultate: (+ (tributele caracterului Lmo8 textM,
(3 'aloarea (S2CC a caracterului.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.

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: () 0O/,
(3 'aloarea (S2CC a caracterului,
5+ (fi9eaz "agina Lnumai .n mo8ul textM,
53 (tribute/2uloare,
2) De cNte ori se scrie caracterul.
9e+ultate: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
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, 7h #;< 17h, 71h #;< 17h, 16h #;< 17h, 7Kh.
1==
I=T 1D7' DA7 &1D) Scrierea caracterului la cursor
(fi9eaz caracterul s"ecificat 8e un numr 8e ori 8at.
,ntrare: (+ 0(/,
(3 'aloarea (S2CC a caracterului,
5+ (fi9eaz numarul "aginii Lnumai mo8 textM,
2) Numrul 8e ori 8e scriere al caracterului.
9e+ult: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
(fi9area .nce"e la loca4ia curent a cursorului "e "agina
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) Seteaz paleta de culori
Selecteaz "aleta 8e culori "entru 8iferitele mo8uri 8e
afi9are.
,ntrare: () 05/,
5+ C8Hul <aletei 8e culori L0 sau !, vezi
mai #osM,
53 'aloarea culorii sau "aletei, "entru a
fi utilizat cu CDHul 2ulorii L0 H*!M.
9e+ultate: Nici unul.
9e"#stre m#d#2#cate: (), S<, 5<, SC, DC.
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
1=E
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 %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: (+ 02/,
(3 2uloare "ixel,
2) <ozi4ia "e orizontal a "ixelului,
D) <ozi4ia "e vertical a "ixelului,
5+ (fi9eaz numarul "aginii Lmo8urile
grafice cu mai mult 8e o "aginM.
9e+ultate: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
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.

1=J
Eezi !i8 #;< 17h, 7Dh.
I=T 1D7' D"7 &1-) <itire pi%el
Ia"orteaz culoarea "ixelului la coor8onatele 8e ecran
"recizate.
,ntrare: (+ 0D/
2) <ozi4ia "e orizontal a "ixelului
D) <ozi4ia "e vertical a "ixelului
5+ (fi9eaz numrul "aginii Lmo8urile
grafice cu mai mult 8e o "aginM

9e+ultate: (3 2uloarea "ixelului
9e"#stre mod#2#cate: (), S<, 5<, SC, DC
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) Scrierea caracterului n modul TeletVpe &TT\)
Scrie un caracter la loca4ia curent a cursorului 9i .l
avanseaz.
,ntrare: (+ 0?/,
(3 2aracterul 8e scris,
53 2uloarea Lnumai mo8urile graficeM,
5+ 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, 7h #;< 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: (+ 0K/,
9e+ultte: (3 %o8 vi8eo,
(+ Numr 8e coloane 8e caractere "er linie,
5+ Numrul "aginii active afi9ate.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
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?) Setarea regi!trelor paletei la 5IA OEIA
Seteaz regi9trii 8e "aleta 9i contur la ?W(/'W(.
,ntrare: (+ !0/,
(3 %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.
%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.
1B1
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 Q X Iezervat
5it D X Iezervat
5it = H Io9u Secun8ar
5it > H 'er8e Secun8ar
5it * H (lbastru Secun8ar
5it 1 X Io9u
5it ! X 'er8e
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
1B0
(cest subserviciu seteaz culoarea conturului. Subserviciul
este su"ortat numai .n mo8uri 8e 100 8e linii.
%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
>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,
1B=
!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:
?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 >>/,
1BB
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.
I=T 1D7' 1+7 &1>) *unc4ii speciale 5IA
Iezult informa4ii asu"ra ?W( 9i "ermite selectarea unei
rutine alternative ?W( <rint Screen.
,ntrare: (+ !1/,
53 %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 :
1BE
(3 B 0/! HY ?cran "ornit/o"rit.
9e+ultate: 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.
Eezi !i8 #;< 17h, 11h.
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 Subserviciul L0H*M,
5+ (fi9eaz numrul "aginii,
53 (tribute LSubseviciile 0 si !M,
2) 3ungimea 9irului,
D+ <ozi4ia liniei un8e urmeaz s fie
scris 9irul,
D3 <ozi4ia coloanei un8e urmeaz s fie
scris 9irul,
?S:5< Cn8icatorul ctre 9irul 8e scris.
9e+ultate: Nici unul.
9e"#stre mod#2#cate: (), S<, 5<, SC, DC.
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,
1BJ
(3B01/: Kolose9te atributele 8in sir, nu mo8ific
cursorul,
(3B0*/: Kolose9te atributele 8in 9ir, mo8ific cursorul.
Eezi !i8 #;< 17h, 7Lh #;< 17h, 7h #;< 17h, 71h.
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,
6 & "electeaz font alternativ.
9e+ultate: Nici unul.
1BK
Eezi !i8 #;< 17h, 1Bh.
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,
?S:DC Cn8icator ctre tabelul 8e Q cuvinte al
a8a"torului vi8eo curent Lvezi mai #osM.
Obser'a)##: Korma tabelului a8a"torului vi8eo este
urmtoarea:
2uvNnt ! X Numrul mo8elului vi8eo,
2uvNnt 1 X <ixeli "e metru "e vartical,
2uvNnt * X <ixeli "e metru "e orizontal,
2uvNnt > X Total "ixeli "e vertical,
2uvNnt = X Total "ixeli "e orizontal,
2uvNnt D X -nal4imea "ixel .n micrometrii
L8irec4ie verticalM,
2uvNnt Q X 3a4imea "ixel .n micrometrii
L8irec4ie orizontalM,
1BL
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
4abelul adaptoarelor '#deo compat#b#le .0
0u'ant Monocrom 0AA *0$ 30AA5 *0$ 3Monocrom5
! =!=!/ =!=*/ =!>0/ =!>0/
1 0 0>O@/ 0@?!/ 0
* 0 0(!=/ 0O@Q/ 0
> 0 002@/ 002@/ 0
= 0 01@0/ 01@0/ 0
D 0 0*=1/ 0!Q1/ 0
Q 0 0!@>/ 0!Q1/ 0
Eezi !i8 #;< 17h, 1=h.
A=5HA -
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 A@ "escriere
71 'itete un caracter de la "<D#; 70 "crie un caracter la "<D2?<
7B "crie un caracter la imprimant 7E #ntrareI#eire 'onsol
7J
'itete direct un caracter de la "<D#;
far ecou
7K
'itete un caracter de la "<D#;
fr ecou
7L "crie un ir la "<D2?< 7
#ntrare bufferat
7* fl starea "<D#; 7' Solete bufferul de la "<D#;
7D
9eset dis>
71 "electeaz unitatea implicit
1L fl unitatea curent implicit 0B "eteaz vectorul de ntrerupere
0 fl data sistemului 0* "eteaz data sistemului
0' fl ora sistemului 0D "eteaz ora sistemului
1E7
01 "eteaza fanionul de verificare 67 fl versiunea D2"
6B fl vectorul de nterupere
6E fl spaiul liber de pe disc 6L 'reaz un subdirector
6 Zterge un subdirector 6* "eteaz directorul de lucru
6' 'reaz un fiier 6D Deschide un fiier
61 -nchide un fiier 68 'itete un fiier
=7 "crie un fiier =1 Zterge un fiier
=0 'aut un fiier =6 flI"eteaz atributele fiierelor
=J fl directorul curent =' #ese din program
=D fl return code B= fl fanionul de verificare
BE 9edenumete fiierul BJ flI"eteaz data fiierului
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,@R7h.
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.
1E1
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 IP2IA=T^
Intrare)@R7Bh
D, R caracter de printat.
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.
1E0
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.
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,@R7h.
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.
1E6
3ezi i) @R71h,@R7Eh,@R7Jh,@R7h,@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.
I=T +17' DA7 W I=T2A25 AU**52AT^
Intrare) @R7hH
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% rime "escriere
77 1 ;umrul ma!im de caractere ce pot intra n buffer
71 1
;umrul ma!im de caractere de de la ultima intrare care pot fi
rechemate sau numrul de caractere din citirea actual, fr '9
70 ; 'aracterul actual citit, incluz(nd '9-ul final
1E=
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#;<991Q.
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 7h, bufferul e
golit dar nu este ateptat nici o intrare.
3ezi i) @R71h,@R7EhQ#;<991Q,@R7Jh,@R7Kh,@R7h.
I=T +17' D"7 - 25S5TA25A "IS<ULUI
Intrare) @R7DhH
2bservaii) ceast funcie scrie pe disc toate bufferele modificate, dar nu
actualizeaz informaia directoarelor.
1EB
3ezi i) CRBD71h.
I=T +17' D57 W S5L5<T5AQ^ U=ITAT5A IPLI<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.
3ezi i) @R1Lh,@R6*h,@RD*h.
I=T +17' 1K7 - A*L^ U=ITAT5A <U25=T^ IPLI<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.
1EE
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 SIST5ULUI
Intrare8 @R0hH
5$ect8 'C R an $1LK7-07LL% D@ R lun D, R zi , R zi a sptm(nii
$77hRDuminic%.
3ezi i) @R0*hQD2"Q,@R0'h,@R1Jh.
I=T +17' +A7 W S5T5AQ^ "ATA SIST5ULUI
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) @R0h,@R0Dh.
I=T +17' +<7 W A*L^ (2A SIST5ULUI
Intrare8 @R0'hH
5$ect8 '@ R ora ', R minute D@ R secunde D, R 1I177 secund.
1EJ
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) @R0h,@R0Dh,@R1Jh.
I=T +17' +"7 W S5TA25A (25I SIST5ULUI
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.
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%.
1EK
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.
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
1EL
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.
3ezi i) @R6h,@R6*h,@REDh.
I=T +17' -A7 - ]T52I5 "I25<T(2UL
Intrare8 @R6hH
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<@IAA "I25<T(2UL <U25=T
1J7
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,#;< 08ICR117Bh.
I=T +17' -<7 W <25AQ^ SAU T2U=<@5AQ^ *I]I52UL
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,@RBh,@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
1J1
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
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
1J0
'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
'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
1J6
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.
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
1J=
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%.
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
1JB
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
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,#;< 08ICR1171h.
'(mpul biilor pentru atributele fiierelor)
1JE
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%.
2bservaii)
'alea returnat nu include unitatea sau primul bac>slashH
:ulte din produsele :icrosoft 4indo5s se bazeaz pe faptul c C devine
7177h c(nd operaiunea a reuit.
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.
1JJ
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)
,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,@RKh.
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=U5]T5 *I]I52UL
1JK
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.
I=T +17' 3J7 W A*L^ "ATA ULTI5I 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)
1JL
Ai4i 1B-L K-B =-7
"escriere anul $1LK7-% luna ziua
I=T +17' 3J7 W S5TA25A "AT5I ULTI5I 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
'8 ters dac operaiunea a reuitH
'8 setat n caz de eroareC R cod eroare $71h,7Eh%.
3ezi i) CRBJ77h.
A=5HA 0
2ezolBrile programelor
.ro"ramul =.1
.mo8el small
.stack !00/
.co8e
start: mov al,OO/
mov bl,0((/
mov cl,055/
mov 8l,022/
1K7
, terminate "rogram
term: #m" term
en8 start
.ro"ramul =.=
.mo8el small
.stack !00/
.co8e
start: mov al,11/
mov bl,al
mov b/,al
mov cl,al
mov 8/,al
, terminate "rogram
term: #m" term
en8 start
.ro"ramul =.<
.mo8el small
.stack !00/
.co8e
start: mov ax,!!11/
mov bx,**>>/
mov cx,==DD/
mov 8x,QQ@@/
term: #m" term
en8 start
1K1
.ro"ramul =.F
.mo8el small
.stack !00/
.co8e
start: mov bx,!!11/
mov cx,**>>/
mov 8x,bx
mov ax,cx
term: #m" term
en8 start
.ro"ramul =.E
.mo8el small
.stack !00/
.co8e
start: mov ax,!1*>/
mov 8s,ax
mov 8x,=DQ@
term: #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/
1K0
term: #m" term
en8 start
.ro"ramul =.C
.mo8el small
.stack !00/
.co8e
start:
mov al,!!/
mov bl,11/
mov cx,**>>/
mov 8x,==DD/
xc/g al,bl
xc/g cx,8x
term: #m" term
en8 start
.ro"ramul =.6
.mo8el small
.stack !00/
.co8e
start: mov al,0((/
mov a/,055/
mov bl,022/
mov b/,0DD/
xc/g al,a/
xc/g a/,bl
xc/g bl,b/
term: #m" term
1K6
en8 start
.ro"ramul =.D
.mo8el small
.stack !00/
.co8e
start:
mov ax,!!11/
mov bx,**>>/
mov cx,==DD/
mov 8x,QQ@@/
a88 al,DD/
a88 al,bl
sub al,cl
sub al,11/
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/
1K=
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
start: mov ax,!!11/
mov bx,**>>/
mov cx,==DD/
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 ax,==DD/
mov bx,QQ@@/
mov cx,OO((/
mov 8x,05522/
a88 bx,8x ,("are trans"ort
a8c ax,cx ,8eci urmatoarea a8unare va trebui
,saHl inclu8a si "e acesta
1KB
term: #m" term
en8 start
.ro"ramul =.1<
.mo8el small
.stack !00/
.co8e
start:
mov ax,==DD/
mov bx,QQ@@/
mov cx,!!11/
mov 8x,**>>/
sub bx,8x ,Nu a"are im"rumut
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 ax,11**/
mov bx,>>==/
mov cx,DDQQ/
mov 8x,@@OO/
sub bx,8x ,("are im"rumut
sbb ax,cx ,8eci urmatoarea sca8ere va trebui
,saHl inclu8a si "e acesta
1KE
term: #m" term
en8 start
.ro"ramul <.1
.mo8el small
.stack !00
.co8e
start: mov al,11
%&' 5),0
%&' bx6107,al
%&' DS:6*07,al
term: #m" term
en8 start
.ro"ramul <.=
.mo8el small
.stack !00/
.co8e
start: mov al,11/
%&' 5), !0/
%&' 6bx7,al
mov bx,*0/
%&' 6bx7,al
mov b",!10/ ,<entru segmentul 8e stiva se
face
mov 6b"7,al ,a8resarea "rin interme8iul 5<
term: #m" term
en8 start
1KJ
.ro"ramul <.<
.mo8el small
.stack !00/
.co8e
start: mov ax,**>>/
%&' 5), 10/
%&' 6bx7,al
term: #m" term
en8 start
.ro"ramul <.F
.mo8el small
.stack !00
.co8e
start: %&' 5),0
%&' 6bx;10/7,!!11/
%&' 65);*0/7,bFte "tr >>/
term: #m" term
en8 start

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

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

.ro"ramul <.C
.ra8ix !D
.mo8el small
.stack !00
.co8e
start: 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

1KL
.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
?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
1L7
.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
a88 al,8ate0;!,simbolizeaza continutul unei locatii
mov bx,8atec ,8e memorie, iar datec continutul a
a88 bx,8atec;1,8oua locatii 8e memorie
mov a/,0
sub bx,ax
term:
#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
1L1
mov cx,11!!
mov 8l,!0
mov bx,10
mov a8r!,ax ,Salveaza continutul initial al lui ()
a88 ax,cx
mov 8/,0 ,<entru a8unarea cu 5) a lui D)B00!0
a88 bx,8x
mov 6bx7,ax
mov ax,a8r!
sub ax,cx
mov 6bx;17,ax, <rimul rezultat a fost 8e 1 octeti
term:
#m" term
?ND Start

.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
1L0
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+
.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
1L6
.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
mov 6bx7,ax
term: #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
1L=
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
.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
1LB

.ro"ramul F.1
.%&D?3 S%(33
.ST(2U !00+
.2&D?
Start:
mov ax,!!11
mov bx,**>>
mov cx,==DD
mov 8x,QQ@@
"us/ ax
"us/ bx
"us/ cx
"us/ 8x
"o" cx ,3a <&<, stiva furnizeaza informatia
"o" bx ,in or8ine inversa fata 8e <GS+
"o" ax ,8u"a "rinci"iul E3ast CnHKirst &utE
"o" 8x
term: #m" term
?ND Start

.ro"ramul F.<
.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
1LE
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/
.Data
sir D5 !,1,*,>,=,D,Q,@,O,0a
.2o8e
start: mov ax,seg sir, Se "utea folosi si %&' (S,R8ata
mov 8s,ax
mov al,sir
mov a/,sir;O
mov sir;O,al
mov sir,a/
mov al,sir;!
mov a/,sir;@
mov sir;@,al
mov sir;!,a/

term: #m" term
en8 start

.ro"ramul F.E
.ra8ix !D
.mo8el small
1LJ
.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


.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/
1LK
.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/
term: #m" term
en8 start

.ro"ramul E.1

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

.ro"ramul E.=
.ra8ix !D
.mo8el small
.stack !00/
.co8e
start:
mov ax,!!11
mov bx,!0
mov cx,**>>
mov 8x,==DD
mov 6bx7,0((55/
a88 ax,cx
a8c ax,8x, Cn cazul general, "utea sa a"ara 2S
sub 6bx7,ax
mov ax,6bx7
mov 6bx;17,ax ,Iezultatul era "e 1 octeti
term: #m" term
en8 start


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

.ro"ramul E.F
.ra8ix !D
.mo8el small
.stack !00/
.8ata
rez 8w 1 8u"LJM, > locatii "entru rezultat c1=!ecO@
tem" 8w 1 8u"LJM, salvari tem"orare 8e registre
.co8e
start:
mov ax,R8ata
mov 8s,ax
mov bx,!!11
mov cx,==DD
mov 8x,11
mov tem",8x ,tem" B11
mov ax,bx
mul cx ,Iezultat in D):()B0=bQ!8@c
mov tem";1,8x,Stoc/eaza 8x la tem";1B0=bQ
mov bx,tem" ,Ieface bxB11
mul bx ,Cnmulteste axB!D@2 cu 11
mov rez;1,ax ,Stoc/eaza in ultimii 1 octeti ax
mov rez,8x ,si in "rimii 1 octeti 8x
mov ax,tem";1,<regateste 0=5Q
mul bx ,si inmulteste cu 11
a88 rez,ax ,a8una rezultatul la "rimii 1 octeti
term:
#m" term
en8 start

071
.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
mov b/,0 ,"regateste cei !D biti
8iv bx ,ai im"artitorului
mov tem"w,8x,tem"wBrestul
mov 8l,tem"b,reface D3
mul 8l ,Si inmulteste cu catul
a8c ax,tem"w,iar rezultatul cu 2S a8una la rest
term: #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
070

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

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

.ro"ramul 7.F
.ra8ix !D
.mo8el small
.stack !00/
.co8e
076
start: 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
,"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
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 bl,!1 ,'aloarea initiala a lui 53
mov c/,=D ,'aloarea initiala a lui 2+
mov al,bl ,2o"ii 8e lucru in
mov 8/,c/ ,(3 si D+
an8 al,0K/ ,Ca semioctetul inferior 8in 53
an8 bl,0K0/,Iamine in 53 8oar octetul su"erior
an8 8/,0K0/,Ca semioctetul su"erior 8in 2+
07=
an8 c/,0K/ ,Iamine in 2+ 8oar octetul inferior
s/r bx,> ,De"laseaza cu un semioctet 8rea"ta
s/l cx,> ,De"laseaza cu un semioctet stanga
or c/,al ,2ombina semioctetii
or bl,8/
xc/g bl,c/ ,Cnverseaza registrele
term: #m" term
en8 start

.ro"ramul 7.7
.ra8ix !D
.mo8el small
.stack !00/
.co8e
start:
mov cl,1= ,'aloarea initiala a lui 23
mov 8/,== ,'aloarea initiala a lui D+
mov al,cl ,2o"ie 8e lucru a lui 23
xor al,8/ ,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+
term: #m" term
en8 start

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

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

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

.ro"ramul C.1
.ra8ix !D
.mo8el small
.stack !00/
.8ata
a8r! 8w QQQQ
a8r1 8w ****
a8r* 8w 1111
.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
07J
term: #m" term
en8 start

.ro"ramul C.=
.ra8ix !D
.mo8el small
.stack !00/
.co8e
start:
mov bx,0
mov cx,10
reia: mov 6bx7,bFte "tr **
inc bx
8ec cx
#nz reia
term: #m" term
en8 start

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

.ro"ramul C.F
.ra8ix !D
.mo8el small
.stack !00/
.co8e
start:
mov bx,0
mov cx,10
mov al,=
reia: mov 6bx7,al
inc al
inc bx
8ec cx
#nz reia ,SHa terminat incarcarea in memorie
,(cum se vor suma numerele 8in memorie
mov cx,10
mov ax,0 ,Cn () va a"are suma
mov bx,0
mov 8/,0 ,Suma va fi "e 8oi octeti,
reia!: mov 8l,6bx7,8eci se "regateste a8unarea cu D)
a88 ax,8x
inc bx
8ec cx
#nz reia!
mov 6bx7,a/,5x este acum 10
mov 6bx;!7,al
term: #m" term
en8 start

.ro"ramul C.E
.ra8ix !D
.mo8el small
07L
.stack !00/
.co8e
start: mov bx,0
mov cx,10
mov ax,!0 ,<rogresia 8a si numere "e 1 octeti
reia: 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
term: #m" term
en8 start

.ro"ramul C.7
.ra8ix !D
.mo8el small
.stack !00/
.co8e
start:
mov bx,0
mov cx,10
mov ax,100 ,Numere "e 1 octeti
reia: mov 6bx7,ax ,8eci se va folosi ()
sub 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
term: #m" term
en8 start

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

.ro"ramul 6.F
.ra8ix !D
.mo8el small
.stack !00/
.D(T(
5locSursa 8b P#gas#agsasasgaua/8#us/8P
35 eAu TH5locSursa ,(samblorul
,calculeaza lungimea blocului
.co8e
start:
mov ax,R8ata
mov 8s,ax
mov es,ax ,-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:
010
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
.mo8el small
.stack !00/
.8ata
5locSursa 8b Pg/fafasfasfa/sFf///saa8P
35 eAu TH5locSursa
.co8e
start:
mov ax,R8ata
mov 8s,ax
mov es,ax ,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 ,2ontorul 8e com"aratii in 2)
mov ax,PafP ,2onstanta 8e com"arat cu octetii
,inversati Lcum se com"ara
,cu cuvintele 8in memorieM
bucla:
scasw ,2om"ara () cu cuvantul res"ectiv
#nz b! ,Daca nu este secventa PfaP, se sare
inc b/ ,Daca sHa gasit PfaP incrementeaza 5+
b!: 8ec 8i
loo" bucla ,Ieluare 8aca nu sHa terminat sirul
016
term:
#m" term
en8 start

.ro"ramul 6.C
.ra8ix !D
.mo8el small
.stack !00/
.D(T(
Sir! 8b PD=!1D*!@1QOD!QO1P
35 eAu THSir! ,3ungimea este 8ata 8e sirul !
Sir1 8b PQ=*!QO0Q*>1D>Q1=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)
bucla:
cm"sb ,2om"ara (3 cu octetul res"ectiv
#nz b! ,Daca nu este egalitate, se sare
inc b/ ,Daca sHa gasit egalitate, se
,incrementeaza 5+
#m" b* ,si se trece la urmatoarea "erec/e
b!: #b b1 ,Daca este mai mic sare
inc 8/ ,Daca e mai mare incrementeaza D+
#m" b* ,si se trece la urmatoarea "erec/e
b1: inc 8l ,Daca era mai mic incrementeaza D3
b*: loo" bucla ,Ieluare 8aca nu sHa terminat
term: #m" term
en8 start
01=

.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
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 !
01B
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
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 ,2om"ara "ana la "rima inegalitate
neg cx ,Cn 2) este numarul ramas 8in 35
a88 cx,35 ,si trebuie scazut 8in 35
term:
#m" term
en8 start

.ro"ramul D.1
01E
.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

.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.<
01J
.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:
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
01K
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
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!/
01L
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
buff! 8b J ,Iezervare Llungimea actualaM
buff1 8b !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:
007
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
Sir* 8b P. Wresit[ ?ra 5) sau SC.TP
.co8e
start:
mov ax,R8ata
mov 8s,ax ,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 8x, offset sir*
#m" afi
corect:
mov 8x, offset sir1
afi: mov a/,0O
int 1!
001
term:
mov a/,>2/
int 1!
en8 start

.ro"ramul 10.1

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

.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!
006
mov al,culoare
lin1:
mov cx,x!
lin!:
mov a/,02/ ,functia 02/
int !0/ ,call bios service
inc cx
cm" cx,x!;lungime
#ne lin!
inc 8x
cm" 8x,F!;/ ,SHa a#uns la numarul final 8e liniiJ
#ne lin1 ,Daca nu, se reia
term: #m" term
en8 start

.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!
00=
lin!:
inc al ,Noul "unct cu alta culoare
mov a/,02/ ,functia 02/
int !0/
inc cx
cm" cx,x!;lungime
#ne lin!
inc 8x
cm" 8x,F!;/ ,SHa a#uns la numarul final 8e liniiJ
#ne lin1
term: #m" term
en8 start

.ro"ramul 10.E
.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 a/,02/ ,functia 02/
int !0/ ,call bios service
inc cx
00B
cm" cx,x!;lungime
#ne lin!
inc al ,Grmatoarea linie are alta culoare
inc 8x ,si alt F
cm" 8x,F!;/ ,SHa a#uns la ultima linieJ
#ne lin1 ,Daca nu, reia
term: #m" term
en8 start

.ro"ramul 10.7
.%&D?3 S%(33
.ST(2U 100+
.2&D?
x!B!D0
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

00E
.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+
%&' ?S, ()

3inieo:
mov 8i,0
mov cx,lung
mov al,culoarea
re" 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=
00J
Start:
,%o8 vi8eo *10x100
mov a/,0
mov al,!*/
int !0/
%&' (), 0(000+
%&' ?S, ()
3inieo:

mov 8i,x! ,3inia ince"e in "ozitia x!
mov cx,lung
mov al,culoarea
re"z stosb ,Scrie "unctele liniei
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
00K
mov al,!*/
int !0/
%&' (), 0(000+
%&' ?S, ()
3inieo:

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

.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/
%&' (), 0(000+
%&' ?S, ()
3iniev:

mov 8i,x!
mov b",F!
00L
mov cx,lung
mov al,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 DC
re" stosb ,Scrie "unctele liniei
o"rire:
#m" o"rire
?ND Start

.ro"ramul 10.11
.%&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/
%&' (), 0(000+
%&' ?S, ()
3iniev:

mov 8i,x!
mov b",F!
mov cx,lung
067
mov al,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
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
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/
%&' (), 0(000+
061
%&' ?S, ()
3iniev:

mov 8i,x!
mov b",F!
mov cx,lung
mov al,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
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
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
060
mov al,!*/
int !0/
%&' (), 0(000+
%&' ?S, ()
3iniev:

mov 8i,x!
mov b",F!
mov cx,lung
mov al,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
lv!: a88 8i,*!O ,Noul "unct este cu *10H! mai
,8e"arte .n memoria 8e
ecran
mov es:68i7,al ,<une "unctul
loo" lv! ,Ie"eta 8e 2) ori
o"rire:
#m" o"rire

?ND Start

.ro"ramul 10.1F
.%&D?3 S%(33
.ST(2U 100+
.2&D?
x!B!00
F!B=0
066
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
mov 8i,x! ,"ozitia "rimei linii in DC
3iniev:
mov si,8i ,DC va fi mo8ificat eci se salveaza
mov b",F!
mov cx,lung
mov al,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
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
06=

?ND Start

.ro"ramul 11.=
.%&D?3 S%(33
.ST(2U 100+
.2&D?
x!B!00
F!B=0
lB100
/B=0
culoarea! B0=/
culoarea1 B0!/
Start:
call sterge
,%o8 vi8eo *10x1>0
mov a/,0
mov al,!*/
int !0/
,<aleta
mov a/,0b/
mov b/,!
mov bl,@
int !0/
"rinc:
%&' (), 0(000+
%&' ?S, ()
mov al,culoarea! ,in (3 culoarea orizontala
call 8re"tung/i
o"rire:
#m" o"rire
,VVVVVVV Subrutine VVVVVVV
06B
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
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! ,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 )!
mov cx,l ,Cn 2) e lungimea
call lino
mov b",F! ,in 5< e S!
mov 8i,x! ,Cn DC e )!
06E
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

.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:
%&' (), 0(000+
%&' ?S, ()
06J
mov 8i,x! ,<arametrii "rimei linii
mov b",F!
mov cx,l
mov al,culoarea! ,in (3 culoarea orizontala
mov bx,/
8re"t!:
call linieo
inc b"
8ec bx
#nz 8re"t!
o"rire:
#m" o"rire
,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 S%(33
.ST(2U 100+
06K
.2&D?
x!B!0
F!B=0
lB10
/B*0
culoarea! B0=/
culoarea1 B0!/
Start:
,%o8 vi8eo *10x1>0
mov a/,0
mov al,!*/
int !0/
"rinc:
%&' (), 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"
06L
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
#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,!*/
0=7
int !0/
"rinc:
%&' (), 0(000+
%&' ?S, ()
mov bx,*00/
"!: mov al,6bx7 ,in (3 culoarea
inc al
mov b",6bx;!7
an8 b",00ff/ ,in 5< e S!
mov 8i,6bx;17
an8 8i,0!ff/ ,Cn DC e )!
mov cx,6bx;17
an8 cx,00*f/ ,Cn 2) e lungimea
inc cx ,3ungimea trebuie sa nu fie 0
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
0=1
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 linv
inc 8i
8ec cx
#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=0
%&' (), 0(000+
%&' ?S, ()
mov bx,=00/
"!: "us/ bx
mov al,6bx7 ,in (3 culoarea
inc al
mov b",6bx;!7
an8 b",00ff/ ,in 5< e S!
mov 8i,6bx;17
an8 8i,0!ff/ ,Cn DC e )!
mov cx,6bx;17
an8 cx,00*f/ ,Cn 2) e lungimea
inc cx ,3ungimea trebuie sa nu fie 0
inc cx
inc cx
mov si,/ ,Cn SC e inaltimea
call 8re"tung/i
"o" bx
inc bx
cm" bx,=D000
#nz "!
o"rire:
#m" o"rire
%&' (+, >2+ ,Ieturn to D&S
%&' (3, 00+
CNT 1!+
,VVVVVV Subrutine VVVVVVVVVVVVVV
lino: ,(fiseaza o linie orizontala , la F B 5< 8in
,"uncte cu culoarea 8in DC
"us/ b"
"us/ 8i
"us/ cx
0=6
"us/ ax
mov al,0
mov 8x,b"
s/l 8x,@
s/l b",D
a88 8x,b"
a88 8i,8x
re"z stosb
"o" ax
"o" cx
"o" 8i
"o" b"
ret
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
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 /
0==
"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
8!: call linv
inc 8i
8ec cx
#nz 8!
"us/ ax
mov al,0
call linv
"o" ax
"o" 8i
"o" cx
ret
?ND Start

.ro"ramul 1=.=
.%&D?3 S%(33
.ST(2U 100+
.D(T(
x!B!00
F!B=0
0=B
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
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
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:
0=E
,%o8 vi8eo *10x100
mov a/,0
mov al,!*/
int !0/
%&' (), 0(000+, (8resa segmentului ecran in mo8ul
!*
%&' ?S, () ,in ?S
linieo x!,F!,lung,culo
linieo x!,F!;inalt,lung,culo
liniev x!,F!;!,inaltH!,culv
liniev x!;lungH!,F!;!,inaltH!,culv
o"rire:
#m" o"rire
?ND Start

.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
0=J
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 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
,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
0=K
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
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,*!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
linieo x!,F!,lung,culo
lin8r x!,F!,lung/1;!,culo
linst x!;lung,F!,lung/1,culo
linieo x!,F!;D0;lung,lung,culo
0=L
liniev x!,F!;D0,lung,culo
lin8r x!,F!;D0,lung;!,culo
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
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
0B7
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 ,88! nu trebuie 8eclarat 3&2(3
inc 8i
8ec cx
#nz 88!
"o" 8i
"o" cx
en8m
Start:
,%o8 vi8eo *10x1>0
mov a/,0
mov al,!*/
int !0/
"rinc:
%&' (), 0(000+
%&' ?S, ()
mov bx,*00/
"!: mov al,6bx7 ,in (3 culoarea
inc al
mov b",6bx;!7
an8 b",00ff/ ,in 5< e S!
mov 8i,6bx;17
an8 8i,0!ff/ ,Cn DC e )!
mov cx,6bx;17
an8 cx,00*f/ ,Cn 2) e lungimea
inc cx ,3ungimea trebuie sa nu fie 0
mov si,10 ,Cn SC e inaltimea
8re"tung/i
inc bx
cm" bx,=D000
0B1
#nz "!
o"rire:
#m" o"rire
?ND Start
A I A L I ( I 2 A * I 5
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 ssembler - 1ditura tehnic, *ucureti,
1LL0H
B. 3lad 'aprariu, ndrei 1nAedi, :arius :untean- "istemul de operare D2". Shidul
programatorului, 1d. :icroinformatica, 'luj-;apoca, 1LL6H
0B0
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.
< U P 2 I = 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
0B6
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
,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
0B=
,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"291,29 #;<1,
K7!KE -; :2D?, 91, "? 3#9<?, K7KEddddddddddddd..LJ
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
0BE

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