Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

Bölüm 4.2: İçiçe Döngüler (Nested Loops)

Nedir?

Döngü içinde döngü. Dış döngü bir kez dönüne kadar iç döngü tamamen çalışır.

Temel Yapı

mov r8, 0              ; Dış döngü sayacı (i)
outer_loop:
cmp r8, 3              ; i < 3 mu?
jge outer_done

  mov r9, 0            ; İç döngü sayacı (j)
  inner_loop:
  cmp r9, 3            ; j < 3 mu?
  jge inner_done

  ; --- İŞLEMLER (i, j kullanarak) ---
  
  inc r9               ; j++
  jmp inner_loop

  inner_done:
inc r8                 ; i++
jmp outer_loop

outer_done:

Çalışma Sırası

i=0, j=0 ✓
i=0, j=1 ✓
i=0, j=2 ✓
i=1, j=0 ✓
i=1, j=1 ✓
i=1, j=2 ✓
i=2, j=0 ✓
i=2, j=1 ✓
i=2, j=2 ✓

Örnek 1: Çarpım Tablosu

; 1*1 = 1, 1*2 = 2, ..., 9*9 = 81 toplamı
xor rax, rax          ; Toplam = 0

mov r8, 1              ; i = 1
outer:
cmp r8, 9              ; i <= 9 mu?
jg outer_done

  mov r9, 1            ; j = 1
  inner:
  cmp r9, 9            ; j <= 9 mu?
  jg inner_done

  mov r10, r8          ; r10 = i
  imul r10, r9         ; r10 = i * j
  add rax, r10         ; toplam += i*j

  inc r9               ; j++
  jmp inner

  inner_done:
inc r8                 ; i++
jmp outer

outer_done:
; RAX = 1+2+...+81 = 285285

Örnek 2: 2D Matris Topla

; 3x3 matris:
; 1 2 3
; 4 5 6
; 7 8 9
; Toplam = 45

xor rax, rax          ; Toplam
mov r8, 0              ; i = 0

row_loop:
cmp r8, 3              ; i < 3 mu?
jge row_done

  mov r9, 0            ; j = 0
  col_loop:
  cmp r9, 3            ; j < 3 mu?
  jge col_done

  ; matris[i][j] oku
  mov r10, r8
  imul r10, 3          ; r10 = i * 3
  add r10, r9          ; r10 = i*3 + j
  ; matris başlangıç adresi rdx ise:
  ; mov r11, [rdx + r10]
  ; add rax, r11

  inc r9               ; j++
  jmp col_loop

  col_done:
inc r8                 ; i++
jmp row_loop

row_done:
; RAX = matris toplamı

Dosyalar

  • example_01.asm - İçiçe döngü örnekleri

C# Karşılığı

// Assembly'de nested loop:
// mov r8, 0
// outer:
// cmp r8, 3
// jge outer_done
//   mov r9, 0
//   inner:
//   cmp r9, 3
//   jge inner_done
//   ... (r8 ve r9 kullanma)
//   inc r9
//   jmp inner
//   inner_done:
// inc r8
// jmp outer
// outer_done:

// C#'da:
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        // ...
    }
}

Pratik

  1. Çarpım tablosu (1-10)
  2. Matriks topla
  3. İki boyutlu dizi üzerinde işlem
  4. Kombinasyon hesapla (nCk)