Pokaż wyniki 1 do 8 z 8

Temat: pętla

  1. #1
    Zarejestrowany
    Jan 2007
    Skąd
    somewhere in time
    Postów
    510

    Domyślnie pętla

    hej,
    zeby poczuć się mądrzejszy ściągnąłem sobie fasma na winde i zaczynają sie problemy, chciałbym aby napis iron wyswietlał mi sie 10 razy a wysweitla tylko raz, co mam zle?
    Kod:
    org 100h; program typu .com
        mov eax,0  ; poczatkowa wartosc eax 0
    start:
            call petla ; wywolaj petla
            add eax,1  ; dodaj do eax 1
            cmp eax,0ah ; porownaj eax do 10
            jb petla ; jesli mniejsze to petla
            mov ah,4ch ; zamykanie
            int 21h
    petla:
            mov ah,9; funkcja wyswietlania
            mov dx,iron ; do dx wrzuc iron
            int 21h; wyswietl
            mov ah,0;czekaj na klawisz
            int 16h
            RET ;powrot
    iron db "iron$"

  2. #2
    Zarejestrowany
    Jan 2008
    Skąd
    za NATem :)
    Postów
    155

    Domyślnie

    Kod:
    mov ah,9
    Kod:
    cmp eax,0ah
    AH to starszy bajt młodszego słowa EAX
    ----------------------
    "petla" może się wykonać tylko 2 razy, ponieważ jest wywoływana tyle razy w "start". A właściwie to raz wywoływana, a za drugim razem to jest skok do niej.
    ----------------------
    PS:
    Kod:
    add eax,1
    Dawniej za takie coś palono na stosie
    Ostatnio edytowane przez Rolek : 11-11-2008 - 19:15

  3. #3
    Zarejestrowany
    Jan 2007
    Skąd
    somewhere in time
    Postów
    510

    Domyślnie

    wow sukces

    Kod:
    org 100h
        mov ch,0
        mov ah,9
        mov dx,iron
    start:
        call petla
        add ch,1
        cmp ch,10
        jb start
        mov ah,0
        int 16h
        mov ah,4ch
        int 21h
    petla:
        int 21h
        ret
    iron db "iron$"
    a i czy prawidlowo ze ta poczatkowa wartosc do CH wewalilem?
    czy gdzie indziej byloby lepiej
    ps. wogole to jak to jest z tymi rejestrami? czy to że mają one jakieś swoje przeznaczenie np że do licznika wrzuca się ilość powtórzen petli to znaczy że nie można tam czego innego wrzucać?
    Ostatnio edytowane przez ironwall : 11-11-2008 - 20:05

  4. #4
    Zarejestrowany
    Jan 2008
    Skąd
    za NATem :)
    Postów
    155

    Domyślnie

    Twój kod mnie przeraża
    Co do rejestrów, to one się poprostu tak nazywają, jeśli chodzi o licznik to wpółpracują z nim instrukcje rep i loop.
    Kod:
    add ch,1
    Znów to samo , do dowania 1 używa się inc, a do odejmowania dec, bo są szyyybsze np.
    Kod:
    inc eax
    Ja bym to zrobił w ten sposób:
    Kod:
    org 100h
    	mov cl,0ah
    	mov dx,iron
    	mov ah,9
    petla:
    	int 21h
    	loop petla ; rep nie działa przy call oraz int
    
    	xor ah,ah ; mov ah,0 ale szybsze
    	int 16h
    	int 20h ; koniec
    iron db "iron$"

  5. #5
    Avatar Nikow
    Nikow jest offline -=[ZRP]=-
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Cytat Napisał Rolek Zobacz post
    Znów to samo , do dowania 1 używa się inc, a do odejmowania dec, bo są szyyybsze np.
    Kiedyś to było prawdą. Teraz inc jest tak szybkie jak add rej, 1, albo nawet wolniejsze. To samo tyczy się dekrementacji. Mówiąc o optymalizacji podkreślaj architekture i model procesora.
    http://nikowek.blogspot.com/
    Zbrojne Ramię Pingwina!
    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GCS d- s++:++ a--- C+++ UL+++ P L+++ E--- W++ N++ o K- w--
    O M- V- PS PE Y PGP++ t+ 5 X+ R tv- b++ DI- D-
    G+ e- h! r% y?
    ------END GEEK CODE BLOCK------

  6. #6
    Zarejestrowany
    Jan 2009
    Postów
    24

    Domyślnie

    Rolek:

    xor ah,ah ; mov ah,0 ale szybsze\


    heheh co za maniak - a masz jakiś wykaz ile cykli zajmuje każda instrukcja ?
    ale podejrzewam, że ten wykaz jest chyba tylko i wyłącznie na określoną architekturę CPU ?

  7. #7
    Zarejestrowany
    Jan 2009
    Postów
    216

    Domyślnie

    Kod:
    Znów to samo , do dowania 1 używa się inc, a do odejmowania dec, bo są szyyybsze np.
    ale add ustawia flagi, a inc nie
    wiec czasem warto jednak uzyc add

  8. #8
    Avatar Nikow
    Nikow jest offline -=[ZRP]=-
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Cytat Napisał Doberman Zobacz post
    Rolek:

    xor ah,ah ; mov ah,0 ale szybsze\


    heheh co za maniak - a masz jakiś wykaz ile cykli zajmuje każda instrukcja ?
    ale podejrzewam, że ten wykaz jest chyba tylko i wyłącznie na określoną architekturę CPU ?
    Dokładniej, do każdego modelu by musiał być inny wykaz. Poszukaj w dokumentacji programistycznej procesora.

    Topic jest stary, wiec jeśli nie macie nic konkretnego do dodania, to proszę o nie nabijanie postów.
    http://nikowek.blogspot.com/
    Zbrojne Ramię Pingwina!
    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GCS d- s++:++ a--- C+++ UL+++ P L+++ E--- W++ N++ o K- w--
    O M- V- PS PE Y PGP++ t+ 5 X+ R tv- b++ DI- D-
    G+ e- h! r% y?
    ------END GEEK CODE BLOCK------

Podobne wątki

  1. Pętla
    By naichniach in forum Assembler
    Odpowiedzi: 7
    Autor: 05-26-2008, 19:28

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj