peperonity.net
Welcome, guest. You are not logged in.
Log in or join for free!
 
Stay logged in
Forgot login details?

Login
Stay logged in

For free!
Get started!

Text page


sypsniux.peperonity.net

Veiksmai su de?imtainio formato skaiiais

5.3. Veiksmai su de?imtainio formato skaiiais

Tai yra veiksm, atlikt bendrosiomos komandomis patikslinimas, kad rezultatas bt
korekti?kas.



Pastaba.
Po?ymis AF fiksuoja perne?im i? jaunesnio pusbaiio, o po?ymis CF
fiksuoja perne?im i? baito.

AAA – Ascii Adjust for Addition
0011 0111

ASCII tai yra simbolinis kodavimas, kuriam yra ekvivalents de?imtainio
nesupakuoto formato skaiiai, nes vienas toks skaiius u?ima vien bait.

Komanda yra koreguojama reik?m, esanti registre AL, kuri pertvarkoma teising
de?imtain nesupakuot skaii, kurios vyresnis pusbaitis yra 0h, o jaunesniajame
pusbaityje yra skaiiai i? diapazono 0h – 9h.


75

Jeigu korekcijos rezultatas yra didesnis u? 9h, nra kaip to u?fiksuoti de?imtainiu
nesupakuotu skaiiumi, todl komanda AAA suformuoja po?ym CF = 1 ir registre
AH esani reik?m padidina vienetu.

Komandos AAA veikimas priklauso nuo registro SF po?ymio AF.
Komandos AAA veikimo algoritmas:

if ( (AL and 0Fh) > 9 or (AF = 1) ) then
AL := AL + 6
AH := AH + 1
AF := 1
CF := 1
else
AF := 0
CF := 0
endif
AL := AL and 0Fh


Pavyzd?iai:

1. 3 + 7 = 0A 10 00
Komandos AAA veikimo rezultate, skaiiaus A reik?m yra padidinama ?e?iais dl
pagrind skirtumo: sudedant pozicijos svoris yra 16, o norime gauti reik?m, kurios
pozicijos svoris yra 10.
Taiau teisingas de?imtainis nesupakuotas skaiius vyresniame pusbaityje turi turti
nul, todl rezultatas yra dar koreguojamas iki 00. Gautas rezultatas buvo didesnis u?
9, todl nustatomas po?ymis CF = 1, ir registre AH esanti reik?m padidinama
vienetu.

2. 8 + 9 = 11 17 07
1-ame pavyzdyje koregavome rezultat 0A, po?ymis AF buvo lygus 0. Tarkime, kad
po sudties gavome 11, tada papildomo perne?imo po?ymis AF nustatomas lygus 1.
Skaii 11 padidiname ?e?iais ir gauname 17. Kadangi vyresniame pusbaityje turi bti
0, tai ?i reik?m pakoreguojama 07. Nustatomas po?ymis CF = 1, registre AH esanti
reik?m padidinama vienetu, nustatomas po?ymis AF=1.



DAA – Decimal Adjust for Addition
0010 0111

Komanda yra koreguojama reik?m, esanti registre AL, kuri pertvarkoma teising
de?imtain supakuot skaii diapazone. Jeigu po korekcijos rezultatas vir?ija 99, tai
nustatomas po?ymis CF = 1




Komandos DAA veikimo algoritmas:


if ( (AL and 0Fh) > 9 or (AF = 1) then
AL := AL + 6
AF := 1
endif

76

if ( (AL > 9Fh) or (CF = 1) ) then
AL := AL + 60h
CF := 1
endif


Pavyzd?iai:

1. 24 + 27 = 4B 51
Sudties rezultat 4B gauname naudodami esam sudties komand. Komanda DAA
prideda 6, ir turime korekti?k de?imtain supakuot skaii-rezultat: 51.

2. 29 + 28 = 51 57
51 bt teisingas de?imtainis supakuotas skaiius, bet atliekant sudt buvo fiksuotas
perne?imas vyresn pusbait: po?ymis AF = 1, todl yra pritaikoma komanda DAA.

3. 62 + 64 = C6 26
Koreguojant sudties rezultat C6, gauname 126, o tai yra daugiau u? 99 ir vir?ija
de?imtaini supakuot skaii diapazon. Todl yra nustatomas po?ymis CF = 1.

4. 66 + 65 = CB D1 31
Koreguojant sudties rezultat CB, gauname D1, o tai irgi yra neteisingas de?imtainis
skaiius, todl komanda DAA koreguoja dar kart, taip gaunamas 131, o tai yra
daugiau u? 99 ir vir?ija de?imtaini supakuot skaii diapazon
. Todl yra
nustatomas po?ymis CF = 1.

5. 46 + 55 = 9B A1 01
Koreguojant sudties rezultat 9B, gauname A1, o tai yra vis dar neteisingas
de?imtainis skaiius, todl komanda DAA koreguoja dar kart, taip gaunamas 101, o
tai yra daugiau u? 99 ir vir?ija de?imtaini supakuot skaii diapazon. Todl yra
nustatomas po?ymis CF = 1.


AAS – Ascii Adjust for Substraction
0011 1111

Komanda yra koreguojama reik?m, esanti registre AL, kuri pertvarkoma teising
de?imtain nesupakuot skaii, kurios vyresnis pusbaitis yra 0h, o jaunesniajame
pusbaityje yra skaiiai i? diapazono 0h – 9h. Jeigu korekcijos rezultatas yra daugiau
u? 9, tai komanda AAS registro AH reik?m suma?ina vienetu ir nustato po?ym CF =
1, prie?ingu atveju, CF = 0.

Atimties, kurios rezultat koreguojame komanda AAS, operandai yra i? diapazono 0 –
9, todl po atimties turime :
1. rezultatas >= 0: 0 <= rezultatas <= 9
Korekcija nereikalinga.
2. rezultatas < 0 : -9 <= rezultatas < 0
-9 = F7 <= rezultatas <= FF = -1

F7 <= rezultatas <= FF
-6

F1 <= rezultatas <= F9, AH suma?inama vienetu.

77


KOMPIUTERI ARCHITEKTRA


Komandos AAS veikimo algoritmas:
if ( (AL and 0Fh) > 9 or (AF = 1) ) then
AL := AL - 6
AH := AH - 1
AF := 1
CF := 1
else
AF := 0
CF := 0
endif
AL := AL and 0Fh


Pavyzdys:
5 - 8
(5)
= (101) ,
10 2
(8)
= (1000)
10 2
0001 0000


1110 1111
+
1
1111 1000 = (-8)
10

0000 0101
+

1111 1000
1111 1101 = (FD)
16
(1)5 - 8 = 7
FD F7 07
Rezultatui FD reikalinga korekcija, atimama 6. Nesupakuoto de?imtainio skaiiaus
vyresiame pusbaityje turi bti nulis, todl F7 koreguojame ir turime rezultat 7.
Tokios korekcijos eigoje komanda AAS vienetu suma?ino registre AH esani
reik?m.


DAS – Decimal Adjust for Subtraction
0010 1111

Komanda yra koreguojama reik?m, esanti registre AL, kuri pertvarkoma teising
de?imtain supakuot skaii diapazone. Jeigu po korekcijos rezultatas vir?ija 99, tai
komanda DAS nustato po?ym CF = 1, prie?ingu atveju, CF = 0.

Atimties, kurios rezultat koreguojame komanda DAS, operandai yra i? diapazono 0 –
99. Po atimties gauname reik?m xy ir tikriname:
1. Ar AF = 1?
2. Ar CF = 1?
3. Ar x yra teisingas de?imtainis skaitmuo?
4. Ar y yra teisingas de?imtainis skaitmuo?
Tada elgiamasi taip:
1. Jeigu AF = 1 arba y yra neteisingas de?imtainis skaitmuo, tai xy = xy - 6.
2. Jeigu CF = 1 arba x yra neteisingas de?imtainis skaitmuo, tai xy = xy - 60.





78

Pavyzdys:
?i kart atlikime skaiiavimus ?e?ioliktainje sistemoje:
11
-

19
F8
-

6
F2
-
60
92
(1)11 – 19 = 92
F8 F2 92
Skaiiuojant rezultat F8 nustatytas po?ymis AF = 1, todl j koreguojame atimdami
6, gauname F2. F yra neteisingas de?imtainis skaiius, o ir CF nustatytas lygus
vienam, todl atimame 60, gauname 92.


Komandos DAS veikimo algoritmas:


if ( (AL and 0Fh) > 9 or (AF = 1) then
AL := AL - 6
AF := 1
endif
if ( (AL > 9Fh) or (CF = 1) ) then
AL := AL – 60h
CF := 1
endif



AAM – Ascii Adjust for Multiplication
1101 0100 0000 1010

Komanda yra taikoma po dviej de?imtaini nesupakuot skaii baitins daugybos,
kai sandauga yra registre AX, o ?iuo atveju, t.y., kai yra dauginami du de?imtainiai
nesupakuoti skaiiai, rezultatas telpa registre AL (maksimalus rezultatas yra 9 · 9 =
81).

Komanda AAM padalina registre AL esani reik?m i? 10, tada dalmen u?ra?o
registr AH, o liekan – registr AL:

AH := AL div 10
AL := AL mod 10

Taip du skaiiai yra atskiriami, ir registruose AH ir AL turime teisingus de?imtainius
nesupakuotus skaiius, kai vyresniame pusbaityje yra nulis, o jaunesniame pusbaityje
yra skaitmuo i? diapazono: 0h – 9h.

Pavyzdys: jeigu dalybos rezultate gauname 79, tai po komandos AAM suveikimo,
registre AH yra 7, o registre AL yra 9.

Pastaba.
Supakuotiems de?imtainiams skaiiams nra daugybos korekcijos komandos.



79


KOMPIUTERI ARCHITEKTRA

AAD – Ascii Adjust for Division
1101 0101 0000 1010

Komanda atlieka dalybos rezultato korekcij de?imtainiams nesupakuotiems
skaiiams. ?i korekcijos komanda skiriasi nuo kit korekcijos komand tuo, kad ji yra
taikoma ne rezultatui, o paruo?ia duomenis de?imtaini nesupakuot skaii dalybai.

De?imtaini nesupakuot skaii dalybos korekcijos komanda taria, kad dalinys yra
registre AX kaip dviej bait de?imtainis nesupakuotas skaiius, kurio vyresnis
skaitmuo yra registre AH, kurio vyresnis pusbaitis yra nulis.

Komanda atlieka tokius veiksmus:
AL := AH * 10 + AL
AH := 0
Tada yra atliekama dalybos komanda DIV.

Pastaba.
Supakuotiems de?imtainiams skaiiams nra dalybos korekcijos komandos.



5.4. Konvertavimas

CBW – Convert Byte to Word
1001 1000

?i komanda yra taikoma skaiiams su ?enklu, tokiems kurie yra baito diapazone, t.y.,
-128 – 127. Registro AL vyriausiasis bitas yra i?skleid?iamas registr AH. Taip
reik?m baite yra pervedama reik?m ?odyje.


CWD – Convert Word to Double word
1001 1001
?i komanda yra taikoma skaiiams su ?enklu, tokiems, kurie yra dviej bait – ?od?io
diapazone, t.y., -32768 – 32767. Registro AX vyriausiasis bitas yra i?skleid?iamas
registr DX. Taip reik?m baite yra pervedama reik?m ?odyje.

Komanda gali bti naudojama, pvz., dalybos veiksmo IDIV paruo?imui, nes ?odyje
esani reik?mi dalyba reikalauja, kad pirmas operandas bt keturiuose baituose,
t.y., registruose [DX, AX].

80

5.5. Logins komandos

NOT – loginis paneigimas.
1111 011w mod 010 r/m [poslinkis]

Vykdant komand, lauko bitai yra invertuojami.

SHL / SAL – SHift logical Left / Shift Arithmetic Left – loginis postmis kair /
aritmetinis postmis kair.
1101 00vw mod 100 r/m [poslinkis]

Jeigu v = 0, tai pastumiama kair per vien pozicij.
Jeigu v = 1, tai postmio skaitliukas yra registro CL reik?m.

De?inieji (jaunesnieji) atsilaisvin bitai yra u?pildomi nuliais.

Jeigu postmyje per vien bit ?enklo bitas ...
Next part ►


This page:




Help/FAQ | Terms | Imprint
Home People Pictures Videos Sites Blogs Chat
Top
.