Információs portál msevm
Cycles, amely lehetővé teszi, hogy végre egy bizonyos rész a program többször, bármilyen nyelven, az egyik leggyakoribb tervez. A rendszer MP 86 használati ciklus végrehajtását főként a parancs hurok (loop), bár vannak más módjai hurok. Minden esetben, a lépések számát a ciklusban határozza meg a tartalmát a CX regiszter, így a lépések maximális száma 64 K.
Vegyünk egy egyszerű példát a szervezet a ciklus. Hagyja, hogy a programban foglalt helyet egy sor mérete 10.000 szót, és ezt a tömböt ki kell tölteni a természetes számsor 0 9999. Ezek a számok, kitöltve az egymást követő tömb elemei, néha nevezik száma helyőrzőivel. Megfelelő fragmentum programot az alábbiak szerint alakul:
; Az adatszegmens
tömb dw 10000 DUP (0)
; A programban szegmensben
mov ax, 0; A kezdeti érték az aggregátum
mov CX, 10000; cikiusszámláió
töltse: mov [BX] [SI], AX; Filler Levél tömbben
inc AX; növekménye aggregált
add SI, 2; módosítás index
loop töltet; ciklus csapat
; Szervezése hosszú ciklus
mov CX 10000; Cycle Counter
töltse :; Jelöljük az elején a ciklus
; osztatlan test
december CX; Csökkentés cikiusszámláió
cmp CX, 0; Dolgozott ki egy előre meghatározott számú lépést?
je befejezni; Igen jelölje meg a program folytatásáról
jmp töltet; Nem, az elején a ciklus
befejezni :; folyamatos
Ebben a nagyon jellegzetes fragmentum mi „kézzel” csökkentse a tartalmát a cikiusszámláió, és hasonlítsa össze a kapott értékeket a 0. Ha CX = O, ez azt jelenti, hogy a ciklus egy előre meghatározott számú lépést teljesül, és a feltételes elágazó utasítás je folytatódik a folytatása egy programot (címke kivitelben ). Ha CX még nem nulla, a csapat feltétel nélküli ugrást JMP szállítja vissza az elejére. Amint látható Sec. 2. JMP parancs lehetővé teszi, hogy mozog, hogy bármely pontján a szegmensben, és korlátozza a méret a test ciklus eltávolítjuk.
Ha szükséges, szervezni beágyazott hurok, tárolására a számláló a külső hurok idejére a belső verem kényelmes a használata. A következő kód szervezett időbeli időtartama néhány másodperc késéssel (egy bizonyos késés mértéke attól függ, hogy a processzor sebességét).
külső: push CX; Mentsd el a verem
mov CX, 0; belső ciklusszámláló
belső: hurok belső; hurok a belső hurok
pop CX; visszaállítása külső számláló
loop oldalfal külső; hurok külső hurok
cmp AX, BX; összehasonlítása két nyilvántartás
je egyenlő; ugrás, ha AX = BX
cmp SI, mem, összehasonlító regiszter és a memória cella
jne notequ; Jump ha SI<>mem
int 21h; DOS hívás
jc syserr; ugrás, ha nem volt hiba
vagy BX, BX; BX Analysis
JZ nulla; ugrás, ha BX = 0
InPt: AL, DX; beviteli eszköz a jelen
teszt AL, 80H; bit 7 a jelen elemzés
je InPt; belépési eddig. míg
; 7. bit = 0 (várakozási bitjének 7)
teszt AX, 7; 0,1,2 Analysis bit AX
jne talált; ugrás, ha legalább egy kicsit
; Egy telepítve
teszt DI, OFh; Analízis bit 0. 3 DI
JZ törlésre Ugrás ha leesett
mov ax, adatok inicializálása
mozgatni DS, AX; DS regiszter
; Vezess egy szolgáltatói üzenettel
mov AH, 09h; O-funkció
; Feltenni a query string input DOS
mov AH, 3Fh; bemenet funkciója
mov BX, 0; billentyűzet leíró
mov CX 80; Adjon meg egy legfeljebb 80 bájt
mov actlen, AX, sőt be
; Mi átalakítani kisbetűk a magyar fővárosban
mov CX, actlen; hossz bemeneti sztring
mov SI, 0; Index pufferben
Keresés: mov AL, buf [SI] Vedd szimbólum
cmp AL, 'a'; Kevesebb 'a'?
jb noletter; Igen, ne konvertálja
cmp AL, 'I', még az 'én'?
ja noletter; Igen, ne konvertálja
cmp AL, 'n', több, 'n'?
ja nagyobb; Igen, további ellenőrzések
sub AL, 20h; 'a' .. 'n'. Átalakulni tőke
jmp store; megőrzésére pufferben
még: cmp AL, 'p'; Kevesebb 'p1' (karakter grafika)?
jb noletter;> 'n',<'p'. Не изменять
sub AL, 50h; 'p'. 'I'. Átalakulni tőke
áruház: mov buf [SI], AL; visszaküldték buf
noletter: inc SI; elmozdulás a mutatót
hurokszűrőt; az összes szimbólumot Cycle
; Levezetjük az átalakítás eredményeként a képernyőn, hogy ellenőrizzék
mov ax, 40H; O-funkció
mov BX, 1; képernyő Descriptor
mov CX, actlen; üzenet hossz
mov AH, 01, megáll a program
int 21h; vár billentyűleütés
msg db "Enter! $"
buf dB 80 dup ( ''); Bemenő puffer
Stk szegmens verem
mul - parancs szorzata előjel nélküli számok;
IMUL - csapat megszorozzuk aláírt számok;
div - parancs elosztjuk előjel nélküli számok;
IDIV - csapat részlege aláírt számokat.
Mi magyarázza a különbségeket e csoportok formális példákat.
, Szorzás pozitív számok előjellel
mov AL, 5; első tényező egyenlő 5
mov BL, 7; második tényező 7
mul BL; AX = 0023h = 35
mov AL, 5; első tényező egyenlő 5
mov BL, 7; második tényező 7
IMUL BL; AX = 0023h = 35
Mindkét csapat, mul és IMUL, így ebben az esetben ugyanazt az eredményt, mint a pozitív számok védjegyével azonos előjel nélküli egész számot. Nem így a szorzás a negatív számok.
; A szorzás a negatív számok előjellel
mov AL, OFCH; első tényező = 252
mov BL, 4; A második tényező = 4
mul BL; AX = 03F0h = 1008
mov AL, OFCH; első tényező = -4
mov BL, 4; A második tényező = 4
IMUL BL; AX = FFFO = -16
Itt a cselekvés csapatok és a mul IMUL ugyanebben az operandusok gyárt különböző eredményeket. Az első példában FCh számú jel nélkül, amely úgy értelmezendő, mint 252, szorozva 4, ami számos jele nélkül 3F0, azaz 1008. A második példában, az azonos számú FCh tekinthető aláírt számát. Ebben az esetben ez -4. Szorzás 4 ad FFF0h, azaz -16.