# En son değiştirme: 15 Aralık 2020, 19:24 .data head: .asciiz "\nSayinin icindeki bir biti adedi\n" ilkt0: .asciiz "\nt0 sayisinin ilk degeri\n" sont0: .asciiz "\nt0 sayisinin son degeri\n" .text main: li $t0, 101 # main için önemli ise main bunu korur subi $sp,$sp,4 sw $t0, 0($sp) # t0 korunuyor: push # Fonksiyon çağrılır. # a0 parametre # v0 dönüş değeridir li $a0, 12837 jal onebits move $t1,$v0 # string print la $a0, ilkt0 # ilkt0 isimli string adresi yüklenir. li $v0, 4 # String yazdıralacağını bildirir. Syscall # yazdırmaya gider. # tamsayı print move $a0, $t0 # t0 tamsayısı yüklenir. li $v0, 1 # Tamsayı yazdıralacağını bildirir. Syscall # yazdırmaya gider. lw $t0, 0($sp) # t0 geri alındı: pop addi $sp,$sp,4 la $a0, sont0 # sont0 isimli string adresi yüklenir. li $v0, 4 # String yazdıralacağını bildirir. Syscall # yazdırmaya gider. move $a0, $t0 # t0 tamsayısı yüklenir. li $v0, 1 # Tamsayı yazdıralacağını bildirir. Syscall # yazdırmaya gider. la $a0, head # head isimli string adresi yüklenir. li $v0, 4 # String yazdıralacağını bildirir. Syscall # yazdırmaya gider. move $a0, $t1 # t1 tamsayısı yüklenir. li $v0, 1 # Tamsayı yazdıralacağını bildirir. Syscall # yazdırmaya gider. # Çıkış li $v0, 10 # Sistemi durdur syscall onebits: # a0 içindeki 1 olan bit sayısı li $t0, 0 # t0 = 0 li $t2, 1 # t2 = 1 li $v0, 0 # v0 = 0 loop: bge $t0, 32, exit # maks 32 bit tamsayı and $t1, $a0, $t2 # Şu anki pozisyonda bir biti varmı? beq $t1, $zero, skip# Yoksa skip addi $v0, $v0, 1 # Varsa dönüş değerini bir arttır skip: addi $t0, $t0, 1 # Döngü değişkenini arttır mul $t2, $t2, 2 # Maske bitini bir sola kaydır j loop exit: jr $ra