Aki eddig eljutott, az már tud osztani, szorozni, csak ciklusokat nem tud kezelni :)))
Ahogy már a cikk elején írtam, a CX a ciklusszámláló

    mov  cx,10   ide:     nop     loop ide
Ez a ciklus 10-szer fog végrehajtódni. A "loop" csökkenti cx - értékét, megvizsgálja, hogy nem 0-e, s ha nem, akkor a cimkére ugrik. Ha a "cx" eredetileg 0 volt, és akkor lett egy loop, akkor "cx" 0ffffh-lesz, tehát vigyázzunk.

A 'cimke' gyakorlatilag egy memóriacím, amit a fordító számol ki, és nem csak azt mutathatja, hogy mondjuk erre a címre fog ugrani a program, hanem akár azt is, hogy erről a címről olvasson ki valamit a program. A cimkéknél a TASM alapesetben nem különbözteti meg a nagybetüt és a kisbetüt, de a NASM igen, tehát vigyázzunk.

Tehát cimkét már tudunk definiálni, akkor lássuk, hogy milyen utasítások vannak a ciklushoz és a cimkékhez kapcsolódóan ...

    cmp mit,mivel összehasonlítja "mit" "mivel"-vel, és                   megfelelően beállítja a flag-eket !
A flag-ek olyan kis zászlók, amik megmutatják, hogy a legutolsó értelmes művelet(pl. bitművelet) eredményeképpen mi történt, meg még egy két dolgot..
   carry - túlcsordulás    zero  - a művelet célregiszterének minden bitje 0 lett :)    sign  - a célregiszter legfelső bitje 1 lett..
Tehát az utasítások:
 
Utasítás Leirás Előjeles
jz cimke Ugrik, ha 0  
je cimke ugrik, ha egyenlő  
jb cimke ugrik, ha kisebb  
jbe cimke ugrik, ha kisebb vagy egyenlő  
jg cimke ugrik, ha előjelesen nagyobb *
jge cimke ugrik, ha előjelesen nagyobb vagy egyenlő *
ja cimke ugrik, ha nagyobb  
jna cimke ugrik, ha nem nagyobb  
jc cimke ugrik, ha a carry flag be van állítva  
jczx cimke ugrik, ha a cx regiszter 0  
jl cimke ugrik, ha előjelesen kisebb *
jle cimke ugrik, ha előjelesen kisebb vagy egyenlő *
jnz cimke ugrik, ha nem 0  
jmp cimke ugrás mindenképp  
jpe cimke ugrik, ha páros (parity bit = 1)  
jpo cimke ugrik, ha páratlan (parity bit = 0)  

De, ha jobban végiggondolod, akkor vannak olyan ugróutasítások, melyek megegyeznek:

    jb  = jc     jbe = jce = jna     je  = jz
Szóval b=c és e=z és ezen kívűl ce=be=na és ae=nb=nc

Ezenkívül még vagy 15 ilyen utasítás van, amik szerintem egy kicsit feleslegesek, de azért a mellékelt asm.ng-ben benne vannak !

Az ugróutasítások felépítése :

    J- jump     [N] - not [opcionális]     Equal/Greater/Below/Above/Zero/Carry...     [E] - and equal [és egyenlő, opcionális]
Ha például azt szeretnénk, hogy "előjelesen nem nagyobb vagy egyenlő", akkor : JNGE - jump if not greater or equal

3. példa letöltése