MAL ‘da 2’ye Tümleme Programı

.data
number: .word 0xFFFFFF64
mask: .word 0x80000000
temp: .word

.text
la $10,number
lw $11,0($10)
add $12,$0,$0
lw $13,4($10)
and $10,$11,$13
beq $10,$0,finish
loop: and $10,$11,$13
bne $10,$0,git
or $12,$12,$13
git: srl $13,$13,1
bne $13,$0,loop
finish: add $12,$12,1
sw $12,temp
put temp
done

Yukarıdaki kodlar number diye tanımladığımız değişkenin binary karşılığının ilk biti 1 mi önce ona bakar.1 değilse çıktıyı direk 1 verir.Eğer ilk bit 1 ise yani hexadecimal sayı olarak ilk sayı 7 den büyükse sayıdaki 1 leri 0, 0ları 1 yapar.Sonra 1 ekler çıkan binary sayının decimal karşılığını bize verir.Yani 2ye tümleme yapar.Yukarıdaki programı çalıştırılınca çıkan sonuç 156 olacaktır.Number değişkenine verilen sayı 15 olarak değiştirilmiş olsaydı sonuç 1 olacaktı.

Bir cevap yazın