Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Asembler, pętla w pętli. Jak powtórzyć? Rejestr CX.

Maciej.x 08 Cze 2010 10:54 4865 2
  • #1 08 Cze 2010 10:54
    Maciej.x
    Poziom 8  

    Witam.
    Próbuję napisać w asemblerze program, który wyświetla odpowiednią ilość razy dany znak, a potem wyświetlić tę ilość znaków znów ileś tam razy. Czyli pętla w pętli. efektem końcowym ma być

    ******
    *
    ******

    ******
    *
    ******

    ******
    *
    ******

    napisałem tyle:

    Code:

    .model small
    .386
     
    .data
    tekst db "petla znakow",0Ah,0Dh,"$"
    tekst2 db " ",0Ah,0Dh,"$"
    .stack 100h
    .code
    .startup

    mov dx, offset tekst
    mov ah, 09h
    int 21h

    mov cx,5  ;zainicjowanie licznika do 1szego ciągu znaków
    petla:
    mov ah,2
    mov dl,'*'
    int 21h
    loop petla

    mov dx, offset tekst2 ;przejscie do nowej linii
    mov ah, 09h
    int 21h

    mov ah,2   ;pojedynczy znak
    mov dl,'*'
    int 21h

    mov dx, offset tekst2  ;przejscie do nowej linii
    mov ah, 09h
    int 21h

    mov cx,5  ;zainicjowanie licznika do 2giego ciągu znaków
    petla2:
    mov ah,2
    mov dl,'*'
    int 21h
    loop petla2

    .exit
    end


    Nie wiem jak powtórzyć tę sekwencję / tę figurę, o dowolną ilość razy. Dopisanie kolejnej pętli "nad" kodem wyświetlającym te figurę nie skutkuje, pętla jest nieskończona.

    Domyślam się, że chodzi o rejestr CX, który służy jako licznik, Byłbym wdzięczny za pomoc.

    Maciej

    0 2
  • Pomocny post
    #2 08 Cze 2010 13:21
    Sam Sung
    Poziom 30  

    Dopisanie pętli nadrzędnej musi poskutkować. Oczywiście jej licznik musi być niezależny od liczników pętli zagnieżdżonych. Jest kilka możliwych rozwiązań, a najprostszym chyba będzie użycie stosu, czyli:

    Code:

    .startup
    mov cx, 10
    petla_glowna:
    push cx
    ...
    pop cx
    loop petla_glowna
    .exit

    0
  • #3 08 Cze 2010 14:13
    Maciej.x
    Poziom 8  

    Dzięki.
    Chodził mi po głowie ten stos, kombinowałem nawet tym umieszczaniem i zdejmowaniem ze stosu ale wszelkie próby kończyły się porażką. Już widzę gdzie popełniałem błąd.

    Jeszcze raz dzięki.

    0