Podwójna pętla w asemblerze

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

1

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

loop1:
  ; operacje petli zewnetrznej
  loop2:
    ; operacje petli wewnetrznej
    mov eax, [m]
    cmp eax, 0
    ja loop2
  mov eax, [n]
  cmp eax, 0
  ja loop1
0

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

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

[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

1 użytkowników online, w tym zalogowanych: 0, gości: 1