Assembler loop

Programovacie jazyky, rady, poradňa...
Pascalwb
Addict
Addict
Príspevky: 3108
Registrovaný: 09 feb 2010, 23:26

Assembler loop

Príspevok od používateľa Pascalwb »

Zdravim, mam taky problem. Potrebujem to do 8086. Mam 2 cykly a cchel by som ich dat este do jedneho cyklu. Lenze to mi uz nefunguje, ak dam 2 cykly do jedneho velkoho, zacne sa to vykonavat donekonecna.

Kód: Vybrať všetko

; prvy loop
---------------------
             mov cx, 5
for:        .....
......
......
loop        for
-------------------------
; druhy loop
--------------------------
              mov cx, 6
for2:       ......
..........
.........
loop        for2
-------------------

Toto cele chcem dat este do jedneho cyklu? Ako to spravit, dakujem.
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: Assembler loop

Príspevok od používateľa Gregi »

Ahoj,
robi to preto, pretoze si prepises register CX s ktorym standarne instrukcia LOOP pracuje (znizuje ho pri kazdom cykle). Kedze das nad tieto dva samostatne cyklusy dalsi nadradeny cyklus, vzdy sa hodnota v CX prepise tymi vnorenymi (na 5 a potom nasledne na 6). Potom sa 0 nikdy nedockas. Ak to chces naozaj vsetko cez LOOP, tak si musis vzdy honotu CX ulozit na zasobnik a po pouziti zas vybrat. No skor by som sa priklonil k pouzitiu:

Kód: Vybrať všetko

for1:
  INC max // max (premenna, ktora sa bude zvysovat od 0 - max bude napr. byte)
  MOV CX, 5
  for2: // cyklus 2 s opakovanim 5x
    ...
    ...
  LOOP for2
  MOV CX, 6
  for3: // cyklus 3 s opakovanim 6x
    ...
    ...
  LOOP for3
  CMP max, 10  // opakuj dokial max nedosiahne 10 (cylus s opakovanim 10x)
JNZ for1 // skakaj dokial ZF (zero flag) <> 0
Napísať odpoveď