Podwójna pętla w asemblerze

  • Rejestracja: dni
  • Ostatnio: dni
0

Tak jak w tytule jak w asemblerze można napisać podwójną pętlę for (pętla w pętli) gdzie oba liczniki będą powyżej 65536 i bez użycia stosu. Z góry wielkie dzięki

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

A jaki jest tu problem konkretnie? Trzymasz sobie liczniki w jakichś "zmiennych" i masz dwie sekcje ze skokami. Coś w stylu:

Kopiuj
loop1:
  ; operacje petli zewnetrznej
  loop2:
    ; operacje petli wewnetrznej
    mov eax, [m]
    cmp eax, 0
    ja loop2
  mov eax, [n]
  cmp eax, 0
  ja loop1
  • Rejestracja: dni
  • Ostatnio: dni
0

Robię program wyznaczający liczby pierwsze od k do n. Nie do końca o to mi chodziło, ale wielkie dzięki.

hit02
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kernel
  • Postów: 90
0

Zawsze możesz spojrzeć, co wygenerował kompilator. Trochę to upiększyłem i zmieniłem odwołania do pamięci na odwołania do rejestrów. Poza tym jest to dzieło kompilatora. :D

Kopiuj
[bits 32]

section .text

    xor eax, eax
    jmp check_outside

continue_outside:
    xor ebx, ebx
    jmp check_inside

continue_inside:
    ;do something
    inc eax

check_inside:
    cmp eax, 2
    jle continue_inside
    inc eax

check_outside:
    cmp eax, 4
    jle continue_outside
    ret

PS nasm

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.