Documente Academic
Documente Profesional
Documente Cultură
10
ARITMETICI ZECIMALE
10.1 Ajustări
0 1 0 3 0 5 0 8 +
0 6 0 6 0 1 0 0
0 7 0 9 0 6 0 8
0 7 0 5 0 6 +
0 8 0 7 0 9
0 F 0 C 0 F
(CF)←(AF)
(AL)←(AL) & 0Fh
}
0 3 7 8 5 4 +
0 7 8 5 8 7
0 A F D D B
DAS – (Decimal Adjust for Subtraction): ajustare pentru scădere: dacă cel
mai puţin semnificativ nibble al registrului AL este mai mare decât 9 sau dacă AF
este setat pe 1, atunci din registrul AL se scade 6 si AF este setat pe 1. Dacă AL
este mai mare decât 9Fh sau dacă AF este setat pe 1, atunci din registrul AL se
scade 60h şi AF este setat pe 1.
Timpi Lungime
Operatori 808x 286 386 486 Bytes
reg,reg 3 2 2 1 2
mem,reg 16+EA 7 7 3 2-4 (W88=24+EA)
reg,mem 9+EA 7 6 2 2-4 (W88=13+EA)
reg,immed 4 3 2 1 3-4
mem,immed 17+EA 7 7 3 3-6 (W88=23+EA)
accum,immed 4 3 2 1 2-3
De exemplu, secvenţa:
termen1 dw 11
termen2 dw 23
total dw ?
……………..
mov ax, termen1
add ax, termen2
mov total, ax
……………
Timpi Lungime
Operatori 808x 286 386 486 Bytes
reg,reg 3 2 2 1 2
mem,reg 16+EA 7 6 3 2-4 (W88=24+EA)
reg,mem 9+EA 7 7 2 2-4 (W88=13+EA)
reg,immed 4 3 2 1 3-4
mem,immed 17+EA 7 7 3 3-6 (W88=25+EA)
accum,immed 4 3 2 1 2-3
Astfel, secvenţa:
termen1 dw 7
termen2 dw 15
dif dw ?
……………
mov ax, termen2
sub ax, termen1
mov dif, ax
……………
Timpi Lungime
Operatori 808x 286 386 486 Bytes
reg8 70-77 13 9-14 13-18 2
reg16 118-113 21 9-22 13-26 2
121
Astfel, secvenţa:
factor1 dw 41
factor2 dw 15
produs dd ?
……………..
mov ax, factor1
mul ax, factor2
mov produs, ax
mov produs+2, dx
……………
Acumulatorul este împărţit la sursă binar fără semn. Dacă operatorul sursă
este un octet atunci AX este împărţit de sursă (DX trebuie să fie 0); câtul împărţirii
este pus în AL, iar restul în AH. Dacă operatorul sursă este un cuvânt, atunci
DX:AX este împărţit la sursă; câtul împărţirii este pus în AX, iar restul este pus în
DX.
Timpi Lungime
Operatori 808x 286 386 486 Bytes
reg8 80-90 14 14 16 2
reg16 144-162 22 22 24 2
reg32 - - 38 40 2
mem8 (86-96)+EA 17 17 16 2-4
mem16 (150-168)+EA 25 25 24 2-4 (W88=158-
176+EA)
mem32 - - 41 40 2-4
122
De exemplu, în secvenţa:
deimpartit dw 41
impartitor dw 15
cat dw ?
rest dw ?
……………..
mov ax, deimpartit
cwd
div impartitor
mov cat, ax
mov rest, dx
……………
Tabelul 10.1.
1 octet cu semn -128…127
1 octet fără semn 0…255
2 octeţi cu semn -32768…32767
2 octeţi fără semn 0…65535
4 octeţi cu semn -2^31…2^31-1
4 octeţi fără semn 0…2^32-1
37 32 34 35 38 39 33 31 30 36 $
x
Figura 10.1 – Imaginea zonei de memorie ocupată de şirul x
07 02 04 05 08 09 03 01 00 06 $
72 45 89 31 06 $
37 32 35 34 31 $
a
Figura 10.4 – Imaginea zonei de memorie ocupată de variabila a
07 02 05 04 01 $
b
Figura 10.5 – Imaginea zonei de memorie ocupată de variabila b
07 25 41 $
c
Figura 10.6 – Imaginea zonei de memorie ocupată de variabila c
Se consideră expresia:
e=(a*b+c)/d–a
ly = max { lx, lc } + 1