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.

[assembler][masm] Zapętlanie programu

# 26 Mar 2011 11:55 1190 2
  • #1 26 Mar 2011 11:55
    #
    Poziom 13  

    Witam!

    Chcę napisać program wypisujący kilkukrotnie tekst za pomocą pętli. Jeżeli wrzucę pustą pętlę, program kończy działanie, natomiast kiedy wrzucę do niej funkcję read z języka C (muszę jej użyć), program się zapętla. Jakieś pomysły?

    Code:

    .686
    .model flat
    extrn _ExitProcess@4 : near
    extrn __write : near
    public _main
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    .data
    ;;znaki db 12 dup (?)
    moje_imie db 10,'M','a','c','i','e','j',10
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    .code
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    _main:


    ; parametry funkcji read
    push 8
    push OFFSET moje_imie
    push 1

    ; petla z wypisywaniem
    mov ecx, 6
    petla:
    call __write ; wyswietlenie przekształconego
    loop petla

    ;koniec programu
    push 0
    call _ExitProcess@4
    END

    0 2
  • Pomocny post
    #2 26 Mar 2011 14:04
    pallid
    Poziom 20  

    ecx jest rejestrem, nie zmienna lokalna. Jesli wolana funkcja korzysta z tego rejestru (a moge sie zalozyc, ze tak jest), to Twoja petla sie rozsypie.

    0
  • #3 26 Mar 2011 14:17
    #
    Poziom 13  

    Być może i tak jest. Spróbuję napisać pseudo pętlę z blokami warunkowymi. Bardzo dziękuję :)

    ============
    Zmieniłem na takie coś i działa ;)

    Code:

    .686
    .model flat
    extrn _ExitProcess@4 : near
    extrn __write : near
    public _main
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    .data
    counter  db 10
    moje_imie db 10,'M','a','c','i','e','j',10
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    .code
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    _main:


    ; parametry funkcji read
    push 8
    push OFFSET moje_imie
    push 1

    ; petla z wypisywaniem
    petla:
    sub counter, 1
    call __write         ; wyswietlenie tekstu
    cmp counter, 0
    jne petla

    ;koniec programu
    push 0
    call _ExitProcess@4
    END

    Podziękował ;)

    0