Pokaż wyniki 1 do 8 z 8

Temat: Pętla

  1. #1

    Domyślnie Pętla

    Pewnie zostane "okrzyczany"
    Powinno działać i działa tylko w sposób w jaki nie powinno
    Pętla powtarza się że tak powiem do znudzenia a miała tylko 10 razy
    WHy?
    Kod php:
    mov ecx,10 ;początkowa wartośc argumentu petli [licznik]
    For:                               ;
    etykieta pocztaek petli
    dec ecx                            
    zmniejsz ecx o 1                  
    jecxz 
    BREAK                        ;jesli ecx  0 skocz do BREAK
    push tekst                         ;odkaładamy na stos argument naszej funkcji 
    call puts                          
    ;wywołujemy funkcje puts
    add esp
    ,2                          ;--==blablabklapj==--
    jmp short For                      ;skocz do początku petli 
    Dlaczego wszystkie piosenki są o sexie ,miłości
    i innym pozytywnym gównie
    Nie mogły by być o czystym bólu ,nienawiści i frustracji i innych prawdach których więcej niż mniej ? ......... Ten świat to plastikowe ,fałszywe gówno
    nie mające nic wspólengo z moją rzeczywistością.
    Mtv to nie mój świat
    (tak jestem nie dojrzały ,mam kompelksy ..... i wiecie co? i chuj)

  2. #2
    Zarejestrowany
    May 2007
    Postów
    406

    Domyślnie

    ..................... ...
    Ostatnio edytowane przez kaspsior : 04-17-2012 - 22:29

  3. #3

    Domyślnie

    very gut question :} chyba
    ale raczej nie modyfikuje
    Dlaczego wszystkie piosenki są o sexie ,miłości
    i innym pozytywnym gównie
    Nie mogły by być o czystym bólu ,nienawiści i frustracji i innych prawdach których więcej niż mniej ? ......... Ten świat to plastikowe ,fałszywe gówno
    nie mające nic wspólengo z moją rzeczywistością.
    Mtv to nie mój świat
    (tak jestem nie dojrzały ,mam kompelksy ..... i wiecie co? i chuj)

  4. #4

    Domyślnie

    Cytat Napisał naichniach Zobacz post
    ale raczej nie modyfikuje
    Jednak sądzę, że raczej zmienia ponieważ nie ma za bardzo co innego zmienić wartości rejestru. Proponuję uruchomić program w debuggerze dla uzyskania pewności i ustawić pułapkę zaraz za funkcją puts. Poniżej listing z przykładem jak można tego dokonać.

    Kod:
    (gdb) disass For
    Dump of assembler code for function For:
    0x0804808a <For+0>:     dec    %ecx
    0x0804808b <For+1>:     jecxz  0x804809f <BREAK>
    0x0804808d <For+3>:     push   $0x80490c0
    0x08048092 <For+8>:     call   0x80480a6 <puts>
    0x08048097 <For+13>:    add    $0x2,%esp
    0x0804809d <For+19>:    jmp    0x804808a <For>
    End of assembler dump.
    (gdb) break For
    Breakpoint 1 at 0x804808a
    (gdb) break *0x08048097
    Breakpoint 2 at 0x8048097
    (gdb) run
    Starting program
    (no debugging symbols found)
    
    Breakpoint 1, 0x0804808a in For ()
    (gdb) info reg ecx
    ecx            0xa      10
    (gdb) stepi
    0x0804808b in For ()
    (gdb) info reg ecx
    ecx            0x9      9
    (gdb) continue
    Continuing.
    Breakpoint 2, 0x08048097 in For ()
    (gdb) info reg ecx
    ecx            0x80490c0        134516928
    Jeżeli w ostatniej linijce uzyskamy inny wynik niż 0x9 (przy pierwszej iteracji), to powinno się wyjaśnić dlaczego tak działa. Wtedy jasne jest, że należy zachować gdzieś wartość tego rejestru (push i pop w odpowiednich miejscach wydaje się być w miarę dobry).

    Jedna korekta co do kodu. Nawet jeżeli pętla będzie działać prawidłowo, to będzie się ona wykonywała 9 razy ponieważ przy wejściu do etykiety For, od razu dekrementowany jest ecx.

  5. #5
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Kod:
    mov ecx,10 ;początkowa wartośc argumentu petli [licznik]
    For:                               ;etykieta pocztaek petli
    jecxz BREAK                        ;jesli ecx  0 skocz do BREAK
    push ecx
    push tekst                         ;odkaładamy na stos argument naszej funkcji 
    call puts                          ;wywołujemy funkcje puts
    add esp,2                          ;--==blablabklapj==--
    pop ecx
    dec ecx                            ; zmniejsz ecx o 1                  
    jmp short For                      ;skocz do początku petli
    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
    Mar 2008
    Postów
    94

    Domyślnie

    No jeśli modyfikacja rej ECX faktycznie nastapiła to wszytko jasne; A tak na marginesie się zastanawiam...po co się jeszcze programuje w asmie ?

    tzn ja sam bardzo żadko wstawię jakieś instrukcję w językach wysokiego poziomu ale zazwyczaj są to 3-4 linijki a tutaj widzę poważniejszy problem ?

    Gdzie asm jest użuwany jako TYLKO asm ? chyba nikt już nie pisze w tym nic zarobkowo...no chyba że się mylę;

  7. #7
    Zarejestrowany
    Sep 2007
    Skąd
    Różne zakątki sieci.
    Postów
    995

    Domyślnie

    Na jaką cholerę odkopujesz tak stare tematy, nie wnosząc do nich nic? Niektórzy to lubią, traktują jak hobby, inni kręcą na tym kokosy, jeszcze inni by zwiększyć skilla, jeszcze inni, są prawdziwymi hakerami i w ten sposób optymalizują programy...
    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------

  8. #8
    Zarejestrowany
    May 2008
    Postów
    534

    Domyślnie

    Kod:
    format pe console
    section '' import readable
    
    dd 0,0,0,RVA msvcrt_name,RVA msvcrt_table
    dd 0,0,0,0,0
    
    msvcrt_table:
    puts dd RVA _puts
    dd 0
    
    msvcrt_name db 'msvcrt.dll',0
    
    _puts db 0,0,'puts',0
    
    text db 'asfdsdfsdfs',0
    entry $
    
    xor ebx,ebx
    mov bl,10
    
    mov esi,[puts]
    push text
    a:
    dec ebx
    
    call esi
    
    
    test ebx,ebx
    jnz a
    
    pop eax
    ret
    zachowane sa tylko ebx, esi, edi, ebp i w funkcjach nie-stdcall esp.

    chyba nikt już nie pisze w tym nic zarobkowo
    coz, zeby ktos mogl byc lepszy musi byc masa noobow
    Ostatnio edytowane przez rip : 05-26-2008 - 18:31

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