Sunday, May 17, 2009

Assembly: Tahun Kabisat

Tahun kabisat adalah tahun yang bisa dibagi dengan 4. Namun jika tahun tersebut bisa dibagi dengan 100 maka harus bisa dibagi juga dengan 400. Berikut adalah algoritmanya :


input tahun
if (tahun mod 100 = 0) AND (tahun mod 400 == 0) then
{
write(“Tahun Kabisat”) 
} else {
If (tahun mod 100 != 0) AND (tahun mod 4 == 0) then
{
Write(“Tahun Kabisat”)
} else {
Write(“Bukan Tahun Kabisat”)

Assembly


.data      #mengawali deklarasi variable
teks1:.asciiz "\nMasukkan tahun : " #variable string teks1
teks2:.asciiz "Tahun Kabisat" #variable string teks2
teks3:.asciiz "Bukan Tahun Kabisat" #variable string teks3


.text #mengawali instruksi
.globl main #label main adalah label global 
main: #label main
la $a0, teks1 #load address teks1 ke $a0
li $v0, 4 #$v0, 4 -> perintah print string
syscall #string teks1 di-print


li $v0, 5 #$v0, 5 -> baca integer
syscall #integer di masukkan ke $v0


add $t0,$v0,$0 #t0 = $v0 + $0
addi $t1,$0,100 #t1 = 100
div $t0,$t1 #membagi $t0 dengan $t1
mfhi $t4 #t4 = t0 mod t1
beq $t4,$zero,emprat #jika nol ke emprat
j empat #ke label empat


emprat: #label emprat
addi $t2,$0,400 #t2 = 400
div $t0,$t2 #membagi $t0 dengan $t2
mfhi $t4 #t4 = t0 mod t2
beq $t4,$zero,kabisat #jika nol ke kabisat
j non #ke label non


empat: #label empat
addi $t3,$0,4 #t3 = 4
div $t0,$t3 #membagi $t0 dengan $t3
mfhi $t4 #t4 = t0 mod t3
beq $t4,$zero,kabisat #jika nol ke kabisat
j non #ke label non


kabisat: #label kabisat
li $v0,4 #$v0, 4 -> perintah print string
la $a0,teks2 #load address teks2 ke $a0
syscall #string teks2 dicetak
j exit #ke label exit


non: #label non
li $v0,4 #$v0, 4 -> perintah print string
la $a0,teks3 #load address teks3 ke $a0
syscall #string teks3 dicetak
j exit #ke label exit


exit: #label exit
jr $ra #mengakhiri program



No comments: