Commodore sayı 13, sayfa 23

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 23

ASLA Akü $47 içersin 001000111 9010001110 $8E, C-0

Bu örneğimizde sonuç olarak akümülatör'ün içeriği olarak $8E elde ettik ve Carry bit'i (flag'ı) söndürüldü, çünkü kaydırmadan önce akümülatör'ün 7'nci bit'i “0” içeriyordu. Akümülatör'ün kaydırmadan önce ve sonraki içeriklerini karşılaştırırsak görürüz ki akümülatör'ün içeriği iki katına çıkmış. Durumu daha iyi kavrayabilmek için ondalık sistemde düşünelim. Şayet ondalık bir sayıyı bir basamak sola kaydırırsak değeri on katına çıkar. Aynı olayın ikili sistem için de geçerli olduğunu gözönünde bulundurursak, demin elde ettiğimiz sonucun rastlantı olmadığını görürüz. Yani ASL komutu ile bir sayıyı iki katına çıkarabiliriz. Bir örnek daha inceleyelim.

ASL A Akü $CD içersin $CD %011001101 %110011010 $9A, C=1

Carry flag'ını işlemin sonucunda sol taraftaki ekstra bit olarak görürsek, gene sayımızın değerinin iki katına çıktığı sonucuna varırız. $CD (205)'in iki katı $19A (410)'dur.

#

5 e te |

LSR

LSR komutu “logical shift right”-ın kısaltılmışı olup, ASL komutunun tersi işlemi yapar. Burada byte'ın içeriği sağ tarafa kaydırılır. 7'nci bit'e “0” yüklenir. Dışarı çıkan 0'ncı bit ise Carry'e alınır. Bir örnekle görelim:

LSR A Akü $CA içersin $CA %011001010 %001100101 = $65, C=0

Sonuç olarak akümülatör'de $65 ve sönük bir Carry bit'i elde ettik. Sizin de dikkatinizi çektiği gibi akümülatör'ün değeri yarıya indi. Carry bit'i kaydırmadan önceki sıfırıncı bit'in kopyasını içeriyor, başka bir deyişle Carry bit'i ikiye bölme sırasında artan olup olmadığını gösteriyor. Böylece bir sayının tek mi, çift mi olduğunu belirleyebiliriz. LSR en alttaki bit'i Carry'ye çıkarır, böylece BCC ve BCS komutları ile dolaylı olarak en alttaki bit'i test edebiliriz. Eğer LSR komutu bir hafıza elemanını adreslerse akümülatör'ün içeriği değişmez.

ROL

ROL komutu “rotate left'in kısaltılmışından gelir ve bit'lerin içeriğini ise dizilmiş boncukları kaydırır gibi döndürür. Sola kaydırma sırasında boşalan sıfırıncı bit'in yerine Carry bit'i kopya edilir. Dışarı çıkan yedinci bit'in içeriği ise Carry bit'ine alınır. Daha genel bakarsak, yapılan işlem dokuz bit'lik bir bilginin kendi içinde döndürülmesidir (Byte'a ait 8 bit ve Carry bit'i). Bir örnek daha iyi kavramımızı sağlayacak: ROL A Akü $4B içersin Carry yanık olsun $4B %001001011 C=1 %010010111 $97

Bütün bit'ler bir basamak sola kaydı. Carry bit'i boşalan sıfırıncı bit'in yerine geldi. Dışarı çıkan yedinci bit Carry'ye alındı. Sonuç olarak $97 ve sönük bir Carry elde ettik. Burada da akünün değerinin iki katına çıktığını, fakat bundan başka mesela daha evvel oluşmuş bir eldenin veya daha evvelki bir kaydırma işleminden çıkmış Carry bit'inin de toplandığını görüyoruz. Bu son yorum oldukça ilgi çekici, çünkü Carry bit'i yalnızca toplama ve çıkarmada değil, aynı zamanda sağa ve sola kaydırmalarda birkaç byte'ı birbirine bağlamak için kullanılan bir ara değer taşıyıcısı durumunda bulunuyor.

ROR

ROR komutu (rotate) ROL komutunun tam tersi işlemi yapar. Bu sefer bit'lerin dönüş yönü sağa doğrudur. Bir örnekle görelim: ROR A F Akü $89 içersin Carry sönük olsun $89: %10001001 C=0 %01000100 C=1

Akümülatör'ün içeriği olarak $89'dan $44 elde ettik. Carry'nin yanık olması bölme işleminde artan olduğunu gösteriyor. Kaydırma komutlarında Carry Flag'ından başka sonuca göre N- ve Z-flag'ları da etkilenir. Aşağıdaki tabloda komutları ve adresleme tiplerini bulacaksınız.

Adresleme tipi ASL LSR ROL ROR akü $0A $4A $2A $6A absolut $0E $4E $2E $6E

0.cı sayfa $06 $46 $26 $66 absolut X-indeksli 0.cı sayfa X-indeks $16 $56 $36 $76

$1E $5E $3E $7E

Klavyeyle gezinmek için ← ve → tuşları.