LOOP - cyklus řízený registrem CX

Z Delphi & Pascal (česká wiki)
Verze z 4. 1. 2013, 18:02, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky) (1 revízia: Assembler pismeno L,M)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání
Instrukce
LOOP - cyklus řízený registrem CX
Časování
8 (80286), 11 (80386)
Popis
Instrukce LOOP dekrementuje registr CX o 1. Žádne příznaky nejsou ovlivněny. Po dekrementování jsou testovány podmínky pro instrukci LOOP (viz syntaxe) a pokud jsou splněny, je proveden skok uvnitr segmentu na místo specifikované operandem instrukce LOOP. Tento operand musí ležet (jde o návestí!) v rozsahu 128 byte před instrukci LOOPx až 127 byte za instrukci LOOP.


Syntaxe
LOOP short_target - přímy skok
LOOPE short_target - skok jestli je predešlí compare roven (equal)
LOOPZ short_target - skok jestli je predešlí compare není roven (zero)
LOOPNZ short_target
LOOPNE short_target


Ovlivňuje příznaky
žádné


Nedefinované příznaky
žádné


Výjimky v privilegovaném módu
Je generovaná všeobecná výjimka ochrany při pokusu o skok na adresu s offsetem mimo hranice aktuálního kódového segmentu CS.


Příklad
        MOV CL, 04H
AGAIN:  ADD BX, 01H
        ADD AL, INFO[BX]
        DAA
        LOOP AGAIN
        MOV CX, 12H
NEXT:   INC BX
        CMP TABLE[BX],0
        LOOPE NEXT
        ; jen pro 80386
        MOV ECX, 0ABCDEH
REPEAT: INC BX
        MOV AL, TABLE_A[BX]
        ADD AL, TABLE_B[BX]
        MOV TOTAL[BX], AL
        LOOPNZ REPEAT