Sie sind auf Seite 1von 11

2.4.

Instruciuni de nmulire si mprire


Operaiile aritmetice sunt definite n dispozitivul aritmetic pentru numere
subunitare, dar pentru adunare i scdere sunt valabile i pentru numerele binare ntregi.
Considerm 2 numere ntregi A i B pentru care facem o adunare pe ! bii. "in punct de
vedere al dispozitivului aritmetic adunarea se face ca pentru numere subunitare cu
virgula dup bitul de semn i avem#
A$%2$$&'() Operand subunitar
B$%2$$&'( Operand2 subunitar
%A)B($%2$$&'( *ezultat subunitar
Ca sa obinem rezultatul corect in ntreg %A)B( trebuie ca rezultatul sa&l nmulim cu
2$$' adic sa deplasam virgule cu ' cifre binare spre dreapta.
%A)B(+%A)B($%2$$&'($2$$'

'
,,2 -
.
/irgula zecimala pt nr. ntreg
/irgula zecimala pentru nr. subunitar
Operaiile de nmulire i mprire se pot face cu operanzi pe ,2 sau 0 octei.
.unt instrucii cu un singur operand, denmulitul1dempritul este implicit n registrul
acumulator %Al, A2, 3A2(, iar cellalt operand poate fi ntr&un registru sau n memorie.
MUL Operand A2+A4 $ operand & nmulire fr semn
IMUL pe ,2,0 oct. "2#A2+A2$operand
3"2#3A2+3A2$operand
& nmulire de ntregi cu semn
*ezultatul nmulirii este de lungime dubl fa de operanzi i se obine pentru operanzi
pe !bii n "2 i A2 n prelungire.
4a nmulire numerele se consider subunitare i niciodat nu poate apare depire.
4a 5674 %nmulire de ntregi cu semn( se face o corecie de deplasare spre dreapta a
rezultatului cu o poziie binar. 8umerele sunt vzute ca subunitare i avem#
%2$%2$$&'( $ %9$%2$$&'(+ %2$9($2$$&:-
;entru ca rezultatul sa fie corect n ntreg virgula trebuie deplasat cu :- poziii spre
dreapta, deci n faa ultimei cifre binare. *ezultatul obinut trebuie mprit la 2, care
ec<ivaleaz cu o deplasare dreapta cu un bit.

IMUL
' -
AX . X 2 & numr ntreg n A2 %2$%2$$&'(
$
Op16 . 9 = numr ntreg pe !bi %9$%2$$&'(
: + -
*ez :2cb . X! - *ezultat 2$9 pe :2 bii n "2 i A2
"X A2 %2$9($2$$&:- necesare :- depl.dreapta
/irgula ca nr.zecimal & virgula ca numr ntreg
Imprtirea presupune ca dempritul este n registrul acumulator %A2, "2#A2 sau
3"2#3A2( mpritorul este ntr&un registru sau memorie.
"I# operand A2 1 operand>
A4 =c?t, A@ &rest
& nprire fr semn
I"I# pe ,2,0 oct.
%mpritor$
"2#A2 1 operand!
A2&c?t, "2 &rest
3"2#3A2 1 operand:2
& nprire de ntregi cu semn
4a mprire trebuie s avem dempritul % mpritorul vzute ca numere su&unitare
fiindc rezultatul trebuie s fie subunitar. An caz contrar avem depire.
5n figur vzut ca subunitar 02'- B :' i nu apare depire .
*estul are semnul dempritului.
I"I#
'
-
"X'AX . X 42() 2 & numr ntreg n A2 %2$%2$$&:-(
*
Op16 . +( 9 = numr ntreg pe !bi %9$%2$$&'(
:

+ -
*ez !bii . ,est -.t *ezultat 219 pe ! bii
"X A2 n "2 &rest i A2 = c?t
/irgula ca nr.zecimal & virgula ca numr ntreg
4a mprire numrul din A2 trebuie e/tins spre st.n0a n "X1 prin copierea &itului de
semn. Operaia se face prin intruciunile#
CBC & Convert BDte to Cord & eEtindere A4 pe A2
CC" & Convert Cord to "ouble Ford & eEtindere A2 pe "2#A2
C"G & Convert "ouble Ford to Guad Ford & eEtindere 3A2 pe3"2#3A2
3Eist i instruciuni de eEtindere cu Hero 6O/H2 sau cu .emn 6O/.2 prin mutare#
6O/.2 C2,B4
6O/H2 3A2,C2
6O/ A2,0'2-
CC" & eEtindere pe "2#A2
2
5"5/ C2 & C?t n A2 i *est n "2
3Eemplu de calcul eEpresie# 3+%A$B)C(1%A)B( unde A,B,C sunt numere ntregi ! bii
6O/A2,A
5674 Ford ptr B I rezultatul A$B n "2#A2
A"" A2,C I se aduna C la A2 tiind ca rezultatele nu depesc 2 octei%!biti(
6O/ B2,A
A"" B2,B I B2+A)B
CC" I eEtensie A2 pe "2 pentru mprire
5"5/ B2 cat in A2+A21B2 restul in "2
6O/ CAJ,A2 I memorare cat
6O/ *3.J,"2 I memorare rest
2.(. Instruciuni de deplasare
5nstruciunile de deplasare se fac numai n registre pe ,2 sau 0 octei.
"eplasrile pot fi# & spre st?nga sau spre dreapta
& logice sau aritmetice
& desc<ise sau circulare %*otate(
"eplasarea se face cu un numr de bii %&:2( dat n registrul C4 sau n instruciune.
2AL .<ift Aritmetic 4eft & deplasare desc<is
23L .<ift %logic( 4eft
2A, ,e011 .<ift Aritmetic *ig<t
23, ,e01n .<ift %logic( *ig<t
,OL ,e01-L *otate %logic(4eft & deplasare circular
,O, *otate %logic( *ig<t
,-L *otate %logic(4eft F<it< CarrD
,-, *otate %logic( *ig<t F<it< CarrD
"eplasrile aritmetice & spre st?nga se consider nmuliri cu 2$$8 i pot da depire
& spre dreapta se consider mpriri cu 2$$8
4a toate deplasrile bii care ies din registru trec prin CarrD.
;rezentm n figurile de mai Kos modul de efectuare a operaiilor de deplasare#
2AL .<ift Aritmetic 4eft
- - 23L .<ift 4eft
- ,OL *otate 4eft

- ,-L *otate 4eft F<it< CarrD

:
.
- C 23, .<ift logic*ig<t
. C 2A, .<ift Aritmetic *ig<t
.e recopiaz semnul
.
C ,O, *otate *ig<t
.
C ,O, *otate *ig<t F<it< carrD
4estarea unui &it dintr&un registru se face prin deplasarea lui n CarrD sau n .emn.
Jestarea mai multor &ii dac sunt pe 1 se poate face prin secvena#
6O/ A2,2
A8" A2,-C-@ & masca ce indic primi 2 bii
C6; A2,-C-@ & verifica dac rezultatul este egal cu masca
LH OM & cei 2 bii sunt pe
"ac trebuie verificai &iii care sunt pe ) se face nainte complementarea lui 2 %8OJ(.
Jestarea unui bit se face i prin instruciunea J3.J care face A8" ntre cei 2 operanzi,
poziioneaz indicatorii de condiie, fr a modifica operandul destinaie. .e poate folosi
instruciunea imediat cu masca bitului testat#
J3.J A2,-2@
L8H bit2 I bitul 2 din dreapta este
J3.J 2,0---@ I verific bitul 2 din st?nga lui 2
L8H et22 I bitul este
Jestarea unui bit se poate face la procesoarele pe :2 de bii cu instruciuni speciale#
54 & testeaz bitul indicat i l memoreaz n C %carrD(
54- & testeaz bitul indicat i l complementeaz %Bit Complement(
54, & testeaz bitul indicat i l pune pe zero %Bit *eset(
542 & testeaz bitul indicat i l pune pe %Bit .et(
0
BJ A2,0 I verifica bitul 0 din A2 i il trece n C %carrD(
LC bit0 I salt pentru bit0+
'
+. LIM5A6UL "7 A2AM5LA,7
4imbaKele de asamblare permit scrierea programelor folosind#
mnemonici pentru instruciunile procesorului i coprocesorului,
directive pentru descrierea datelor
directive pentru controlul programului %segmentare, module, proceduri(
funcii "O. apelate prin ntreruperi
macroinstruciuni definite de utilizator
;entru procesoarele 5ntel se folosesc curent asambloarele#
MA2M %6acroAssembler( de la 6icrosoft mpreun cu editorul de legturi 458M
4A2M %JurboAssembler( de la Borland
+.1. Asam&larea pro0ramelor

;rogramul surs scris n limbaK de asamblare va avea eEtensia .A2M i trebuie s
treac prin mai multe faze pentru a fi transformat n program eEecutabil direct
%;rog.7X7(.
Include Mod.o&8 "ate
9ro0.asm
surs
A2AM5LO, 9ro0.o&8
obiect
LI:;
7"I4O,
9ro0.e/e
eEecutabil
,e<ultate
9ro0.lst
Nisier listing
5i&l.li& 9ro0.map 7X25I: 9ro0.com
Asam&lorul prelucreaz un fiier teEt surs %;rog.asm(, scris cu un editor de teEte
i genereaz un modul obiect %;rog.obK( care conine instruciuni i date ce sunt plasate
de la adresa ---. .e mai genereaz i un fiier listing al programului compilat %;rog.lst(.
;rogramul surs poate face referire prin directiva 58C47"3 i la alte fiiere surs
%subprograme(, care vor fi nglobate prin copiere n programul surs. 6odulele obiect nu
sunt eEecutabile, dar pot fi depuse in biblioteci %Bibl.lib(.
LI:; 7"I4O,UL prelucreaz modulele obiect obinute prin compilare
%asamblare( i alte module obiect din biblioteci. "in asamblarea lor rezult un program
eEecutabil %9ro0.e/e(, n care adresele modulelor i adresele relative din instruciuni sunt
recalculate i se face legtura ntre modulele care fac apel la alt modul %subprograme(.
Adresele din instruciuni se recalculeaz relativ la nceputul segmentului in?nd cont de
adresa modulului n segment. 7n program poate conine mai multe segmente. Adresele
simbolice definite n alt modul trebuie date ca 7X4,:, iar cele care sun referite din
eEterior declarate cu 9U5LI-.
Asamblorul va genera c?te un tabel cu etic<etele referite n eEterior %32J*8( i
unul cu etic<etele care pot fi referite din eEterior %;7B45C(, n care se specific adresa
lor din modul. Jabelele de de=iniii e/terne i re=erine e/terne se pstreaz n modulele
!
obiect i vor fi folosite de linOeditor pentru rezolvarea referinelor eEterne prin
completarea adreselelor care fac referire la etic<ete din alte module. An fiierul ;rog.map
se gsesc noile adrese ale modulelor i ale etic<etelor definite ca eEterne.
9ro0ramul e/ecuta&il %;rog.eEe( poate fi lansat ca o comand "O., care
prelucreaz datele i se obin rezultatele. ;rin programul 322B58 se poate obine o
variant ;rog.com a programului.
6odule .obK ,e=erine 7/terne;r
- - 9r1.o&8 - 9r1.e/e .imbol Adr.unde
e utilizat
Adresa real
:
2
n

Kmp c c
O
alfa
:2,!P,>Q
P-,2:-
!-,'0-
2-)n
- 9r2.o&8 n
2
-
n
2
c mov aE,bE
"e=iniii e/terne ;r2
- 9r+.o&8 n)n2 .imbol Adr.unde
e definit
n n
:
n
c 2-
+.2. 2crierea pro0ramelor surs
4inia de program surs n limbaK de asamblare are structura#
7tic>eta' cod?instr ar011ar02 @ comentariu
directiAa ar011ar021ar0+1.... @ comentariu
3Eemplu#
C# 6O/ A2,RB2).5)2-S I & ncarc reg.A2 cu un element 2%5(
......
2 "C :0Q-,0:,P>-,0---,'-- I iniializare elemente tablou 2
4ipuri de constante
5 binare --B
3 <eEazecimale -BA'!@ I 6O/ C2,-NN@
O octale !'P:G I 6O/ .5,:02G
" zecimal 0'>!" sau P'-- I implicit numerele se consider zecimale
"irectiAe pentru de=inire date'
P
"5 "efine BDte I definire pe un octet
"B "efine Cord I definire pe 2octei
"" "efine "ouble Ford I definire pe 0 octei
"C "efine GuadFord I definire pe > octei
"4 "efine Jen BDte I definire pe 0 octei
7CU constanta I da etic<etei valoarea constantei
O,D adresa I foreaz contorul de amplasare la adresa specificat
ALID: n I unde n+,2,0,>,! aliniere contor amplasare la multiplu
I:-LU"7 fisier.asm I copiaz n acel loc o secven de program %subprogram(
3Eemple#
A "B 2,-,-AC@,:0'G,-0@,TJ*38 rapidT
A2 "C Q'02,-"3>Q@,2-,-,TJ*T
A2 "C A,A2 I se genereaz adresele relative a lui A i A2
A0 "" '0,>Q'>QBA@
A0 "" A,A2 I adresele relative a lui A i A2 cu adresa segmentului
AP "C 2- "7;%2-<(
; 3G7 ! I etic<eta ; ec<ivalat cu ! %adres port(
6O/ "2,; I "2+!
C* 3G7 -"@ I Cod A.C55 C*
"irectiAe de control pro0ram
:AM7 nume?modul I d numele modulului compilat
7n modul poate fi o procedur care e cuprins ntre#
nume?proc 9,O- near sau =ar I inceput de procedur
..........
,74 EnF I ieire din procedur cu eliberare stiv
nume?proc 7:"9 I sf?rit de procedur
7:" start I directiva de sf?ri de asamblare care d adresa de lansare program
Atenie 38" se pune dup ultimul modul din program.
9U5LI- Aar11Aar21.. I declarare variabile ca definiii eEterne
7X4,: sim&ol1'tip11 sim&ol2'tip21.. I declarare referine eEterne spre alte module
7nde tip este G &Hte1 Iord1 dIord1 JIord pentru date specific?nd lungimea
& near i =ar pentru etic<ete apelate prin Lump sau Call
Jipul permite asamblorului s genereze instruciuni pe lungimi corecte. 6enionm c n
limbaK de asamblare nu eEist tipuri ntregi, reale, logice, caracter ca n alte limbaKe.
72 LA57L =ar sau near @ definire eEplicit etic<ete locale %near( sau eEterne
%far(, care se pot apela din eEterior.
7tic>etele locale G near se pot specifica urmate de dou puncte%#(
"e=inire se0mente
7n segment este cuprins ntre directivele .3U638J i 38".
nume?se0 27DM7:4 Eali0nF1Ecom&inareF1EKclasaKF
>
....
nume?se0 7:"2
ali0n L pa0e & segmentul ncepe la multiplu de 2'!
L para & multiplu de ! %paragraf(
L Iord & multiplu de 2
L &Hte & multiplu de
-om&inarea cu alte segmente#
L none &implicit
L pu&lic
L common & segmente care se ncarc n paralel n aceeai zon de memorie
& memorH &segmente tratate mpreun de editor i plasate la sf?ritul memoriei
L A4 adresa & specific adresa la care se ncarc segmentul
L stacM & segment definit ca stiv i tratat ca public % bazat cu ..(
A22UM7 -2'se011"2'se02172'se0+122'se04 precizeaz registrele segment
utilizate la adresarea datelor din fiecare segment.
;rogramul urmtor conine un singur segment miEt code)date)stiva.
@ LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLa&+?).doc
@ 2cadere doua numere <ecimale codi=icate &inar
@ de lun0ime n NOXL
@ considerate ca ta&louri
@ LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
pr1 se0ment
assume cs'pr11ds'pr11ss'pr1 @ eEist un singur segment miEt
st#
mov aE,pr I initializare registre segment
mov ds,aE
mov ss,aE
mov sp,offset stiva I iniializare pointer stiva
mov cE,> I numar cifre zecimale
mov si,P I indeE ultima cifra
e# mov al,ERsiS
sbb al,DRsiS I 2%5( & 9%5(
das I corectie zecimala pt.scadere
mov zRsiS,al I memorare octet rezultat
dec si I indeE octet urmator
loop e I ciclu pina C2 V -
int : I revenire in afd %terminare(
@ <ona memorie pentru date
I &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
E db :2<,:<,::<,P2<,2Q<,0!<,'<,2Q< I descazut
D db 2Q<,0<,!!<,P'<,Q<,>:<,2'<,< I scazator
z db > dup%-( I rezultat
@ Nona pentru stiAa
I &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Q
db 2'! dup%W( I rezervare spaiu stiva
stiva eXu Y I v?rful initial al stivei & Y este adresa curenta contor amplasare
pr1 ends
end st1 @ adresa lansare pro0ram
"ac programul conine numai c?te un segment de fiecare tip se poate simplifica
scrirea specific?nd unde ncepe segmentulde code .-O"7de date "A4A i stiv
.24A-;. *ezervarea spaiului pentru stiv se face pe lungimea dat i automat se
ncarc reg....
6odulul de date se numete implicit P"A4A referit pentru ncrcare registru
segment ".. "ac se scriu programe compleEe cu multe segmente de diferite tipuri
trebuie s se utilizeze segmentarea eEplicit prin definire segmente cu nume cu directiva
.3U638J.
@ LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLa&+?1.doc
@ 9ro0ramul numara &itii de 1 din =iecare element
@ al ta&loului X si memorea<a numarul de &iti
@ in elementele ta&loului :X
@ LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
"osse0 I mod "O. de tratare segmente
.model small I model pe cu segmente de !0Mo
.stacM 2(6 @ rezervare 2'! octeti pentru stiva
@ 2e0mentul de date
@ LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
.data
2 dF P!P!<,Q'0<,'0!:<,22:0<,-NN33<
82 db ' dup%-( I nr biti elemente tab 2
8 eXu ' I numar elemente tablou 2
@ 2e0mentul de code al pro0ramului
@ LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
.code
st# mov aE,Zdata I initializare registrul segment de date ".
mov ds,aE I
mov si,- I indeE in tabloul 2
mov di,- I indeE in tabloul 82
mov d<,8 I nr. elemente tablou
@ -iclu pentru numarare &iti element XQI$
c# mov aE,2RsiS I incarcare element 2%5(
mov cE,! I numar ranguri binare
c2# s<l aE, I deplasare stinga cu un rang
Knc c: I bitul este zero
inc 82RdiS I bitul este
c:# loop c2 I urmatorul rang
add si,2 I urmatorul elment din 2%5(
inc di
-
dec d< I verificare sfirsit tablou 2
Knz c
int + @ terminare pro0ram
end st1 @ adresa lansare pro0ram

Das könnte Ihnen auch gefallen

  • Fractal I
    Fractal I
    Dokument16 Seiten
    Fractal I
    Alex Florescu
    Noch keine Bewertungen
  • SDSDFGSDFGDFGDFGDFG
    SDSDFGSDFGDFGDFGDFG
    Dokument1 Seite
    SDSDFGSDFGDFGDFGDFG
    manyman123
    Noch keine Bewertungen
  • Lab 80871
    Lab 80871
    Dokument20 Seiten
    Lab 80871
    Trifut Ciprian
    Noch keine Bewertungen
  • Portofoliuexport Gherghina Lupu
    Portofoliuexport Gherghina Lupu
    Dokument15 Seiten
    Portofoliuexport Gherghina Lupu
    manyman123
    Noch keine Bewertungen
  • Masterat Anul I
    Masterat Anul I
    Dokument19 Seiten
    Masterat Anul I
    manyman123
    Noch keine Bewertungen
  • Curs8 Rentraaasd
    Curs8 Rentraaasd
    Dokument7 Seiten
    Curs8 Rentraaasd
    manyman123
    Noch keine Bewertungen
  • Curs1 I86
    Curs1 I86
    Dokument7 Seiten
    Curs1 I86
    Hurmuzache Ciprian
    Noch keine Bewertungen
  • Curs10 Fisasdasdasd
    Curs10 Fisasdasdasd
    Dokument9 Seiten
    Curs10 Fisasdasdasd
    manyman123
    Noch keine Bewertungen
  • Curs9 Macaae
    Curs9 Macaae
    Dokument10 Seiten
    Curs9 Macaae
    manyman123
    Noch keine Bewertungen
  • Curs11 Logaa
    Curs11 Logaa
    Dokument7 Seiten
    Curs11 Logaa
    manyman123
    Noch keine Bewertungen
  • Curs8 Rentraaasd
    Curs8 Rentraaasd
    Dokument7 Seiten
    Curs8 Rentraaasd
    manyman123
    Noch keine Bewertungen
  • Curs6 Param12312
    Curs6 Param12312
    Dokument8 Seiten
    Curs6 Param12312
    manyman123
    Noch keine Bewertungen
  • Curs7 Pmemasd
    Curs7 Pmemasd
    Dokument8 Seiten
    Curs7 Pmemasd
    manyman123
    Noch keine Bewertungen
  • Lab 80871
    Lab 80871
    Dokument20 Seiten
    Lab 80871
    Trifut Ciprian
    Noch keine Bewertungen
  • Gestiunea Datelor Multimedia Cu Inter Media Oracle
    Gestiunea Datelor Multimedia Cu Inter Media Oracle
    Dokument9 Seiten
    Gestiunea Datelor Multimedia Cu Inter Media Oracle
    Trifut Ciprian
    Noch keine Bewertungen
  • Lab 80871
    Lab 80871
    Dokument20 Seiten
    Lab 80871
    Trifut Ciprian
    Noch keine Bewertungen
  • Lab 80871
    Lab 80871
    Dokument20 Seiten
    Lab 80871
    Trifut Ciprian
    Noch keine Bewertungen
  • C 1
    C 1
    Dokument9 Seiten
    C 1
    Adrian Tudor
    Noch keine Bewertungen
  • Elth
    Elth
    Dokument4 Seiten
    Elth
    manyman123
    Noch keine Bewertungen
  • POO01
    POO01
    Dokument34 Seiten
    POO01
    manyman123
    Noch keine Bewertungen
  • Backtracking
    Backtracking
    Dokument6 Seiten
    Backtracking
    krugerr
    Noch keine Bewertungen
  • Aplicatii de Retea in Internet
    Aplicatii de Retea in Internet
    Dokument12 Seiten
    Aplicatii de Retea in Internet
    Victor Crowley
    Noch keine Bewertungen