autors:A.Vjačins
Pēc funkcijas rezultāta izskaitļošanas rezultāts tika ierakstīts reģistrā AX. Zemāk piedāvātais zīmējums satur ekrāna izskatu komandas debug l1_com.com izpildes laikā. Zīmējumā pēdēja rindkopa satur l1_com.com programmas izpildes rezultātus: reģistrā Ax ir ievietota vērtība FFF9. Šīs skaitlis ir pierakstīts papildus kodā. Pārveidojot šo skaitli decimālajā sistēmā, tiek iegūts skaitlis –7.
Programmas izpildes rezultāti ir sekojoši:
Programmas izpildes rezultāti ir sekojoši:
Programmas izpildes rezultāti ir sekojoši:
Programmas izpildes rezultāti ir sekojoši:
1. FUNKCIJAS IZSKAITĻOŠANA
1.1. Uzdevuma nostādne
Izskaitļot
funkciju:
(4*X^3-Y+1)
/ (X^2*Y+1), ja 4*X^3-Y+1 > 0
(4*X^3-Y+1)
/ (X^3-Y^2), ja 4*X^3-Y+1 <= 0.
1.2. Programmas teksts
Comment &
1. PRAKTISKAIS
DARBS
IZSKAITĻOT
FUNKCIJU:
(4*X^3-Y+1) /
(X^2*Y+1), ja 4*X^3-Y+1 > 0
(4*X^3-Y+1) /
(X^3-Y^2), ja 4*X^3-Y+1 <= 0
&
dosseg
.model tiny
.code
.startup
Jmp
_Start
X Db 1
Y Db -2
Four Dw 4
Zero Equ 0
Z Dw ?
_Start:
Mov Al, X
Imul X
Mov Bx, Ax
Mov Al, X
Cbw
Imul Bx
Imul
Four
Mov Bx, Ax
Mov Al, Y
Cbw
Sub Bx, Ax
Add
Bx, 1
Cmp Bx, Zero
Jle Branch_C
Mov Al, X
Imul X
Imul Y
Add
Ax, 1 ; X*X*Y+1
Jmp Rezult
Branch_C: Mov Al,
Y
Imul Y
Mov
Cx, Ax ; Y*Y
Mov
Al, X
Imul X
Mov
Dx, Ax
Mov
Al, X
Cbw
Imul Dx
; X*X*X
Sub Ax, Cx
Rezult:
Xchg Ax,
Bx
Cwd
IDiv Bx
Mov Z, Ax
.exit 0
end
1.3. Programmas rezultāti
Funkcijas izskaitļošanas rezultāts pie x un y vērtībām 1,
-2 ir –7. Hex sistēmā tās ir FFF9.
Pēc funkcijas rezultāta izskaitļošanas rezultāts tika ierakstīts reģistrā AX. Zemāk piedāvātais zīmējums satur ekrāna izskatu komandas debug l1_com.com izpildes laikā. Zīmējumā pēdēja rindkopa satur l1_com.com programmas izpildes rezultātus: reģistrā Ax ir ievietota vērtība FFF9. Šīs skaitlis ir pierakstīts papildus kodā. Pārveidojot šo skaitli decimālajā sistēmā, tiek iegūts skaitlis –7.
1.zīm “Programmas l1_com.com izpilde”
2. DARBS AR VEKTORIEM
2.1. Uzdevuma nostādne
Atrast
vidējo aritmētisko vērtību pozitīvajiem skaitļiem.
2.2. Programmas teksts
Comment &
viedejais
aritmetiskais pozitivaijem skaitliem
&
dosseg
.model tiny
.code
.startup
Jmp
Start
Vector Dw 2,
7, -1, 4, 15
N Equ 5
Zero Equ 0
Start:
Lea
Bx, Vector
Mov Cx, N
Xor Ax, Ax
Mov Dx, 0
S: Cmp Word Ptr [Bx], Zero
Jl
_Not
Add
Ax, [Bx]
Inc Dl
_Not:
Add Bx, 2
Loop S
Idiv Dl
.exit 0
end
2.3. Programmas rezultāti
Programmas rezultātu pārbaudei tika izmantota MS-DOS
komanda debug. Lai apskatītu programmas rezultātu ir nepieciešams komandrindā
uzrakstīt sekojošu komandu ar parametriem: debug l2_com.com. Programmas
rezultāti atrodas reģistrā Ax. Ar roku saskaitot vērtības 2, 7, 4, 15 un šo
rezultātu sadalot ar 4 (pozitīvo elementu skaits) tiks iegūts rezultāts 7, kas
Hex sistēma ir 0007. Respektīvi, ja programma strādā pareizi, tad pēc
programmas beigšanas reģistram Ax ir jāsatur vērtība 0007.
Programmas izpildes rezultāti ir sekojoši:
2.zīm. “Programmas l2_com.com izpildes rezultāti”
2.zīmējumā
var apskatīt programmas izpildes rezultātus. Pati pēdēja rindkopā reģistra Ax
vērtība ir 0007. Respektīvi , programma strādā pareizi.
3. DARBS AR MATRICĀM UN VEKTORIEM
3.1. Uzdevuma nostādne
Uzdota inicializēta matrica Matrix[N*M], N – rindu skaits, M – stabiņu
skaits, un neinicializēts vektors Vector. Matricas elementus adresēt formā
Matrix[Reģistrs][Reģistrs]. Rezultātus saglabāt vektorā Vector, izmantojot
komandas Lea un Mov. Atsevišķā programmas blokā imitēt vektora drukāšanu,
cikliski ievietojot vektora elementus reģistrā Ax.
Atrast
matricas Matrix[N*M]katra stabiņa elementu summu.
3.2. Programmas teksts
dosseg
.model tiny
.code
.startup
Jmp Start
N Equ 2
M Equ 3
Matrix DW 1, 2, 3
DW 4, 5, 6
Vector DW M Dup (?)
Lo Equ 2
Hi Equ 6
S Equ Type Matrix
Start:
Xor Bx, Bx
Mov Cx, N
Lea Di, Vector
Cols: Mov Dx, Cx
Mov Cx, M
Xor Si, Si
Xor Ax, Ax
Rows: Add Ax, Matrix[Bx][Si]
Add Si, S*M
Loop Rows
Mov [Di], Ax
Add Bx, S
Mov Cx, Dx
Add Di, S
Loop Cols
Mov Bx, 0
Mov Cx, M
Print:
Mov Ax, Vector[Bx]
Add Bx, S
Loop Print
.exit 0
end
3.3. Programmas rezultāti
Programmas rezultātu pārbaudei tika izmantota MS-DOS
komanda debug. Lai apskatītu programmas rezultātus, ir nepieciešams komandrindā
uzrakstīt sekojošu komandu ar sekojošiem parametriem: debug l3_com.com.
Programmas rezultāti (matricas katra stabiņa elementu summa) secīgi tiek
izvadīti reģistrā Ax.
Matrica Matrix[N*M]satur 3 stabiņus ar sekojošiem
elementiem:
1.stabiņš – 1, 4;
2.stabiņš – 2, 5;
3.stabiņš – 3, 6.
Saskaitot šos elementus, tiek iegūti sekojoši rezultāti:
1.stabiņa elementu summa ir 5 (0005);
2.stabiņa elementu summa ir 7 (0007);
3.stabiņa elementu summa ir 9 (0009);
Respektīvi, ja programma strādā pareizi, tad programmas
ciklā Print reģistrā Ax secīgi ir jāizvada skaitļus 0005, 0007, 0009.
Programmas izpildes rezultāti ir sekojoši:
3.zīm. “Programmas l3_com.com izpildes rezultāti”
3.zīmējumā var
apskatīt programmas izpildes rezultātus: ir redzams, ka programma reģistrā Ax
secīgi izvada augšminētus skaitļus. Respektīvi , programma strādā pareizi.
4. APAKŠPROGRAMMAS UN PARAMETRU NODOŠANA
4.1. Uzdevuma nostādne
Noformēt matricas
Matrix apstrādi un rezultejošā vektora drukāšanu kā apakšprogrammas. Parametru
nodošana jāveido izmantojot steku. Katrā apakšprogrammā obligāti jāsaglabā,
jāatjauno reģistru saturs.
Pirmās apakšprogrammas parametri:
1.
rindu skaits;
2.
stabiņu skaits;
3.
matricas adrese;
4.
vektora adrese.
Otras apakšprogrammas parametri:
1.
stabiņu skaits;
2.
vektora adrese.
Atrast
matricas Matrix[N*M]katra stabiņa elementu summu.
4.2. Programmas teksts
dosseg
.model tiny
.code
.startup
Jmp Start
N Equ 2
M Equ 3
Matrix Dw 1,
-2, 3
Dw 4, 5, 6
Vector DW M
Dup (?)
S Equ Type Matrix
FormVector Proc
Local
Temp:word, a:word
Push Bp
Mov Bp, Sp
Push Cx
Push Bx
Push Dx
Push Di
Push Ax
Mov
Ax, [Bp+6]
Mov
Dx, S
Mul Dx
Mov Temp, Ax
Mov Cx, [Bp + 6]
Mov Si, [Bp + 8]
Mov
Di, [Bp + 10]
Cols:
Mov Bx, Si
Mov Dx, Cx
Mov Cx, [Bp + 4]
Xor
Ax, Ax
Rows: Add Ax, [Bx]
Add Bx, Temp
Loop
Rows
Mov [Di], Ax
Add Si, S
Mov Cx, Dx
Add Di, S
Loop
Cols
Pop Ax
Pop Di
Pop Dx
Pop Bx
Pop Cx
Pop Bp
Ret 2*4
FormVector EndP
Print Proc
Push Bp
Mov Bp, Sp
Push Cx
Push Bx
Push Ax
Mov Cx, [Bp + 4]
Mov Bx, [Bp + 6]
Pr:
Mov Ax, [Bx]
Add Bx, S
Loop Pr
Pop Ax
Pop Bx
Pop Cx
Pop Bp
Ret 2*2
Print EndP
Start:
Lea Ax, Vector
Push Ax
Lea Ax, Matrix
Push Ax
Mov Ax, M
Push Ax
Mov Ax, N
Push Ax
Call
FormVector
Lea Ax, Vector
Push Ax
Mov Ax, M
Push Ax
Call
Print
.exit 0
end
4.3. Programmas rezultāti
Programmas rezultātu pārbaudei tika izmantota MS-DOS
komanda debug. Lai apskatītu programmas rezultātus, ir nepieciešams komandrindā
uzrakstīt sekojošu komandu ar sekojošiem parametriem: debug l4_com.com.
Matrica Matrix[N*M]satur 3 stabiņus ar sekojošiem
elementiem:
1.stabiņš: 1, 4;
2.stabiņš: -2, 5;
3.stabiņš: 3, 6.
Saskaitot šos elementus, tiek iegūti sekojoši rezultāti:
1.stabiņa elementu summa ir 5 (0005);
2.stabiņa elementu summa ir 3 (0003);
3.stabiņa elementu summa ir 9 (0009);
Respektīvi, ja programma strādā pareizi, tad programmas
procedūrai Print reģistrā Ax secīgi ir jāizvada skaitļus 0005, 0003, 0009.
Programmas izpildes rezultāti ir sekojoši:
4.zīm. “Programmas l4_com.com izpildes rezultāti”
4.zīmējumā var
apskatīt programmas izpildes rezultātus: ir redzams, ka programma reģistrā Ax
secīgi izvada augšminētus skaitļus. Respektīvi , programma strādā pareizi.
5. TEKSTU RINDU APSTRĀDE
5.1. Uzdevuma nostādne
Programma apstrādā teksta rindu – failu nosaukumu formā
[.]. Iegūt no tā 11 baitus garu virkni, kur faila vārds
novietots pirmajos 8 baitos un paplašinājums pēdējos 3 baitos:
1 2 3 4 5 6 7 8 9 0 1
n a m e
e x t
Visos
gadījumos rezultējošā teksta rinda jāizdrukā. Skaitļi – rezultāti jāsaglabā
reģistros vai atmiņā.
5.2. Programmas teksts
dosseg
.model tiny
.code
.startup
jmp Start
StrEnd Equ '$'
Point Equ '.'
FilName Db
'name.ext', '$', 13, 10
Result Db 11 Dup (?)
Len Equ $ -
FilName - 3
Pos Dw 0
Start:
Push Es
Push Ds
Pop Es
Cld
Mov Cx, Len
Mov Al, Point
Lea
Si, FilName ;source DS:SI
Lea Di, Result
;destination ES:DI
PointFind:
Lodsb
Cmp
Al, 46
Je
Found ;else write name
Stosb
Inc
Pos
Loop
PointFind
Found:
Mov
Cx, 3
;Aprekina nepieciesamo nobidi
Mov
Ax, 8
Sub
Ax, Pos
Mov
Pos, Ax
Add
Di, Pos
Jmp
WriteExt
WriteExt:
Lodsb
Stosb
Loop
WriteExt
Mov
ES:[Di], Byte Ptr StrEnd ;pievieno rindas beigas simbolu
Lea
Dx, Result
Mov Ah, 9
Int 21h
Pop Es
.exit 0
end
5.3. Programmas rezultāti
Programmas rezultātu pārbaudei tika izmantota MS-DOS
komanda debug. Lai apskatītu programmas rezultātus, ir nepieciešams komandrindā
uzrakstīt sekojošu komandu ar sekojošiem parametriem: debug l5_com.com.
Kontrolpiemēram tika izmantots sekojošais faila
nosaukums: name.ext. Pēc programmas izpildes jābūt izvadītai sekojošai teksta
rindai: name ext (name, 4 atstarpes,
ext).
Programmas izpildes rezultāti ir sekojoši:
5.zīm. “Programmas l5_com.com izpildes rezultāti”
1.zīmējumā
var apskatīt programmas izpildes rezultātus. Programma izvade sekojošu
rezultātu: name ext (name, 4
atstarpes, ext), respektīvi , programma strādā pareizi.
6. SECINĀJUMI
Katram
laboratorijas darbam ir izveidoti un šajā nodaļā piedāvāti atsevišķi
secinājumi.
6.1. Funkcijas izskaitļošana
Darba izpildes gaitā tika izveidota com – programma, kas
izskaitļo funkciju:
(4*X^3-Y+1)
/ (X^2*Y+1), ja 4*X^3-Y+1 > 0
(4*X^3-Y+1) / (X^3-Y^2), ja 4*X^3-Y+1 <= 0.
Programmas rezultāti (reģistra Ax saturs) tika apskatīti
ar MS-DOS komandas debug palīdzību. Funkcijas izskaitļošanai vajadzēja izveidot
divus lielus zarus: programma izpildās pēc pirmā zara, kad izteiksmes
(4*X^3-Y+1) / (X^2*Y+1) rezultāts ir lielāks par nulli, programma izpildās pēc
otrā zara, kad izteiksmes (4*X^3-Y+1) / (X^2*Y+1) rezultāts ir mazāks vai
vienāds ar nulli. Lai noteiktu, pēc kura zara programmai ir jāizpildās,
vispirms bija nepieciešams izrēķināt izteiksmes (4*X^3-Y+1) / (X^2*Y+1)
vērtību. Atkarībā no izskaitļotas vērtības, vadība tika nodota atbilstošajam
zaram. Vadības nodošana tika realizēta sekojoši:
Cmp Bx, Zero
Jle
Branch_C.
6.2. Darbs ar vektoriem
Izpildot šo darbu, manuprāt, ir jāpievērš uzmanība
sekojošām lietām:
1.
Masīvu apstrāde ar Assembleru. Masīvs ir definēts programmas sākumā: Vector
Dw 2,7,-1,4,15. Pieeja masīva katram elementam var tikt organizēta pēc tā
adreses, t.i. masīva katrs elements atmiņā atrodas pēc noteiktas adreses.
Griežoties pie šis adreses, var griezties pie masīva noteikta elementa. Šis
programmas ietvaros pieeja masīva elementiem tika organizēta pielietojot
netiešas adresācijas pēc bāzes veidu. Sākumā, reģistrā Bx tika ievietota masīva
pirmā elementa adrese. Par cik katrs masīva elements ir 2 baitu liels (1 vārds
ir 2 baiti), tad, lai iegūtu pieeju nākamam elementam, katrā cikla iterācijā
reģistra Bx vērtībai tika pieskaitīta vērtība 2. Respektīvi, reģistrs Bx pēc
katras pieskaitīšanas, norādīja uz masīva nākamo elementu;
2.
Ciklu organizēšana ar Assembleru. Šis programmas ietvaros cikla
organizēšanai tika izpildītas sekojošas darbības:
Programmas
sākumā reģistram Cx tika piešķirta vērtība N (masīva elementu skaits).
Rezultātā, cikls izpildījās tieši N reizes. Pēc katras Loop komandas izpildes
reģistra Cx vērtība samazinājās par 1.
6.3. Darbs ar matricām un vektoriem
Programmā matrica Matrix[N*M]ir definēta un inicializēta
sekojoši:
Matrix DW 1, 2, 3
DW 4, 5, 6
Katrs matricas elements ir 2 baitu liels (1 vārds = 2
baiti). Atmiņā matrica ir attēlota kā vārdu (baitu) vektors, t.i. matricas
elementi atmiņā ir novietoti secīgi viens pēc otra: 1, 2, 3, 4, 5, 6. Līdz ar
to, lai strādātu ar matricas stabiņiem, ir nepieciešams izveidot un pielietot
speciālas formulas, pēc kuriem tiks izskaitļota katra elementa adrese.
Shematiski matricu var attēlot sekojoši:
M
|
|||
N
|
1 (0)
|
2 (2)
|
3 (4)
|
4 (6)
|
5 (8)
|
6 (10)
|
Ar Bold ir
attēloti matricas elementi, bet iekavas ir dota nobīde baitos no matricas
sākuma adreses. Patiesībā, atmiņā matrica glabājas sekojošā veidā:
L
|
|||||
1(0)
|
2(2)
|
3(4)
|
4(6)
|
5(8)
|
6(10)
|
L ir vektora elementu skaits. Iekavās ir dota nobīde
baitos no vektora sākuma adreses. Respektīvi, lai strādātu ar matricas stabiņu
elementiem, ir nepieciešams strādāt ar elementu 1 (nobīde ir 0), 4 (nobīde ir
6) un tml. Līdz ar to, programmā ir jāizveido 2 ciklus: pa kolonām (ārējais) un
pa rindām (iekšējais).
Katrs matricas elements ir adresēts ar divu reģistru
palīdzību:
Matrix[Bx][Si]
Šinī gadījumā Bx ir bāzes adrese un Si ir indeksa adrese.
Par cik, tika izmantots reģistrs Bx, dati atrodas datu segmentā. Pielietojot
tādu adresācijas veidu EA (effective address) tiek izskaitļots pēc formulas:
EA = [bāzes reģistrs] + [indeksa reģistrs] +
konstanta
Kā jau tika minēts programmā ir izveidoti divi cikli. Ciklu
izveidošanā tika izmantots reģistrs Cx kā cikla iterāciju skaitītājs. Par cik
katrā ciklā ar katru iterāciju reģistra Cx vērtība samazinās par 1, kaut kur ir
jāsaglabā šī reģistra vērtības. Šim nolūkam tika izmantots reģistrs Dx. Tā,
pirms ciklu izveidošanas uz reģistru Cx tika pārsūtīta vērtība 3 (kolonu
skaits). Ārējā ciklā reģistra Cx vērtība tika saglabāta reģistrā Dx, un pirms
iekšēja cikla sākuma reģistrā Cx tika iesūtīta vērtība 2 (rindu skaits).
Respektīvi, iekšējais cikls atkārtosies 2 reizes un reģistra vērtība Cx būs 0.
Tagad, pirms komandas Loop Cols, reģistra Dx vērtība tiek nosūtīta uz reģistru
Cx. Respektīvi, ārēja cikla skaitītāja vērtība tiks atjaunota.
6.4. Apakšprogrammas un parametru nodošana
Programmā tika izveidotas 2 procedūras:
1.
FormVector – apstrādā matricu un veido vektoru (katrs vektora elements ir
matricas stabiņu elementu summa);
2.
Print – imitē vektora elementu drukāšanu (pārsūta vektora katru elementu uz
reģistru Ax).
Katra procedūra saņem parametrus. Parametru nodošanai
programmā tika izmantots steks (augsta līmeņa valodas parametru nodošanai
apakšprogrammas arī izmanto steku). Steks ir speciālais atmiņas apgabals, kas
ir paredzēts datu īslaicīgai glabāšanai. Eksistē vairākas komandas, kas ļauj
strādāt ar steku. Visizplatītākās ir sekojošas:
1.
Push – kāda elementa iestumšana stekā;
2.
Pop – elementa izstumšana no steka galvas.
Elements, kas atrodas stekā ir adresēts ar divu reģistru
palīdzību: ss – steka segmenta adrese un sp – steka radītājs, respektīvi
elementa, kas atrodas steka galvā, adrese ir ss:sp. Pēc komandu push vai pop
izpildes steka radītāja vērtība izmainās. Tā, programmā pēc komandas push Ax
izpildes steka radītāja sp vērtība samazinājās par 2; un otrādi, pēc komandas
pop Ax izpildes steka radītāja sp vērtība palielinājās par 2. Komandas push un
pop ir jāizmanto pārī, t.i. pēc katras komandas push izmantošanas ir jāizmanto
arī komanda pop. Iestumjot elementus stekā un izstumjot tās no steka ir
jāievēro elementu iestumšanas un izstumšanas secība, t.i. secīgi iestumjot
elementus a, b, tās ir jāizstumj pretējā kārtībā (b,a).
Uzdevuma nostādnē ir pateikts, ka katrā procedūrā ir
jāsaglabā, jāatjauno reģistru saturs. Programmā tās ir realizēts sekojoši:
katras apakšprogrammas sākumā stekā tiek iestumtas izmantojamo reģistru vērtības,
bet pirms beigt apakšprogrammu šīs vērtības tiek izstumtas no steka.
Viens no procedūras FormVector parametriem ir vektora
adrese. Procedūra no matricas veido vektoru (aizpilda vektora elementus ar
izskaitļotām vērtībām). Pie vektora elementiem procedūras komandas griežas pēc
vektora elementu adreses.
Pirms apakšprogrammas beigšanas ir jānorāda komanda ret
(atgriešanas no apakšprogrammas komanda).
6.5. Tekstu rindu apstrāde
Teksta rinda Assemblerā ir atmiņas apgabals, kuru garums
var svārstīties no 1 baita līdz 64 kB. Assemblerā eksistē speciālas komandas,
kas ir paredzētas darbam ar teksta rindām. Ar teksta rindām var tikt izpildītas
sekojošas pamatoperācijas:
1.
Pārsūtīšana no viena atmiņas apgabala uz citu – komanda movs, movsb, movsw,
movsd. Neatkarīgi no tā, kādi mainīgie tiek izmantoti šajās komandās avots
(source) vienmēr atrodas pēc adreses DS:SI, bet saņēmējs (destination) pēc
adreses ES:DI;
2.
Vienas teksta rindas (atmiņas pagabala) salīdzināšana ar otro – cmps,
cmpsb, cmpsw, cmpsd. Tāpat kā iepriekšējā gadījumā, šīs komandas salīdzina
avotu ar saņēmēju;
3.
Teksta rindu skanēšana – scas, scasb, scasw, scasd. Šīs komandas meklē
teksta rindā vērtību, kas atrodas reģistrā Al, Ax vai Eax (tikai procesoram
80386 un augstāk);
4.
Teksta rindas lasīšana – lods, lodsb, lodsw, lodsd. Šīs komandas nolasa
teksta rindas saturu akumulatorā. Atkarībā no nolasītas vērtības tipa, tās var
tikt pārsūtīta uz reģistru Al, Ax vai Eax. Vērtības tiek nolasītas no teksta
rindas, kas atrodas pēc adreses DS:SI. Pēc kārtējas komandas izpildes indeksa
reģistra vērtība automātiski tiks palielināta (pazemināta) par 1, 2 vai 4
(konkrēta vērtība ir atkarīga no nolasāma elementa tipa: baits – 1, vārds – 2
vai dubultvārds – 4);
5.
Ierakstīšana teksta rindā – stos, stosb, stosw, stosd. Ierakstāma vērtība
atrodas reģistrā Al, Ax vai Eax. Vērtība tiek ierakstīta teksta rindā, kas
atrodas pēc adreses ES:DI.
Kā jau tika minēts teksta rindas ir atmiņas apgabali, kas
atmiņā var aizņemt maksimāli 64kB, t.i. vienu segmentu. Strādājot ar divām
teksta rindām, viena rinda ir avots un otra saņēmējs. Tā, šis programmas
ietvaros rinda-avots ir rinda, kas satur faila vārdu (FilName). Šī rinda tika
novietota pēc adreses DS:SI:
Lea Si, FilName
;source DS:SI.
Rinda-saņēmējs ir 11 baitu gara rinda, kas satur programmas
izpildes rezultātu. Šī rinda atmiņā tika novietota pēc adreses ES:DI:
Lea Di,
Result ;destination ES:DI.
Visu šeit aprakstīto komandu izpildes rezultātā
automātiski tiek izmainītas indeksu reģistru (SI, DI) vērtības, lai norādītu uz
teksta rindas nākamo (iepriekšējo)
elementu. Lai šo indeksu vērtības tiktu automātiski mainītas ir nepieciešams
karodziņa reģistra karodziņam DF piešķirt konkrēto vērtību: DF ir 0 – indeksu
reģistru vērtība tiks automātiski pazemināta; DF ir 1 – indeksu reģistru
vērtība tiks automātiski palielināta. Dažu komandu izpildes rezultātā mainās
arī karodziņa reģistra dažu karodziņu vērtības.
Augšminēto komandu pielietošanas gadījumā var tikt
izmantoti dažādi operandu tipi (baits, vārds, dubultvārds). Katram tādam tipam
atbilst konkrēta komanda, t.i. baitam atbilst komanda, kuras nosaukuma pēdējais
simbols ir ‘b’ – movsb, stosb, lodsb un tml; vārdam atbilst komanda, kuras
nosaukuma pēdējais simbols ir ‘w’ – movsw, stosw, lodsw un tml; dubultvārdam
analoģiski. Šajās komandās var arī tieši norādīt izmantojama operanda tipu.
Piemērām, ja no atmiņas viena apgabala (rinda-avots) uz citu (rinda-saņēmējs)
tiek pārsūtīts baits, tad komandas pieraksts būtu sekojošais:
movs b1, b1.
7. LITERATŪRAS SARAKSTS
1.
G. Maiko “Assembler for IBM PC”,
1999.
2.
Lekciju konspekts priekšmetā “Datoru organizācija un assembleri”.
Nav komentāru:
Ierakstīt komentāru