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.

Kapcsolódó cikkek