language

ustmenu

searchbar

Commodore 1986-06-01 Sayfa 29

Commodore Dergisi, 1 Haziran 1986, Sayfa 29

 



Özet

ASL (Arithmetic Shift Left) komutu, akümülatörde bulunan veya parametrede belirtilen byte'yi bir sola kaydırıyor; sadece taşan biti bir Carry'e atıyor. Böylece rakam ikileyi çarpmış oluyor, fakat sonuç 256'dan büyükse, fazlaşı 256'dan gözüküyor. LSR (Logical Shift Right), ASL'nin tersi; Rakama sağa kaydırıp ikile bolums oluyor. Sadece taşan kesir, carry'e geçiyor. ASL ve LSR, parametreli kullanımında, akümülatörlerin yükünü sağa sola kaydırıyorlar. Parametreli ççeitlerinden ise, mutlak, zero page, indeksli vb. bilimü adresleme imkanları mevcut. ROL ve ROR, ASL ve LSR'nin ikiz karakterleri. Şu farklı ki, sola veya sağa kaydırmağa başlanan haneyle 0 koyacakları yerde, carry'de o an bulunan değerleri kayuyorlar. Yani, bir şeyi üst- üste 8 kez ASL'lenince sonuç daalmı sifir; oysa 9 kez üstüste ROL edilen sa- yi sonuçta ilk baştaki haline döndüyor. Çünkü, ilk ROL'de soldan taşan bit, bir sonraki ROL'de sağdan gene kuyru- ga giriyor. Peki S47 ile A5'ni nasıl çarpmakça? S47'yi ikileyi çevirdimizde, arif olan cevabı hemen (1) bilbilebilir. S47 = 01000111. Sifirli attayip di- rekleri sayarsak, S47 (onu) 73, = $40+ 04+02+01 ve onu 64+4+2+1. Yani bir sayıyı sırasıyla 1, 2, 4 ve 64'e çarpmıp sonuçları toplamak, o sayıyı S47 ile çarpmakla eşdeğer. O halde işlem şundan ibaret:.



Diğer Dergiler



Tam metin içeriği

Düşünürseniz, tıpkı ilkokuldan bildi-
ğimiz çıkarma işlemi gibi, yalnız elde-
leri onar onar değil, 256'şar alıyoruz.

Bu arada, sırası gelmişken bir konu-
ya daha değinelim. Geçen sayıda kı-
saca gördüğümüz CMP (CoMPare, kı-
yasla) komutu (hatırlayan var mı?), as-
lında SBC'nin bir benzeri. Aradaki fark
şu: SBC, parametrede belirtilen sayı-
yı akümülatörden eksiltiyor ve sonucu
akümülatörde gösteriyor. CMP da ay-
nı işlemi yapıyor, ama akümülatörün
içeriğini değiştirmiyor. Her iki durum-
da da, parametrede belirtilen rakam
akümülatördeki rakamdan büyükse
Carıy sıfırlanıyor; eşit veya küçükse
Carry 4 oluyor. Dolayısıyla:

IDA xXx
CMP yy
BCC 27 —— iFxx (yy THENZZ
LDA xx
CMP yy
BCS 2z———lFxx 7 —yy THEN zz
IDA xx
SBC yy
BCC 22 ——— A-xx<-yy:iF

A CO THEN zz

Bit Kaydırmaca

Gelgelelim çarpma ve bölme işlem-
lerine. Burada bizi acı bir sürpriz bek-
liyor; zira makina dilinde çarpma ve
bölme işlemleri yok. A*B'yi elde etmek
için yöntem, A'yı B defa kendi kendi-
siyle toplamak. Daha bilimsel, üstelik
daha keyifli bir yöntem ise bitlerle oy-
namak. Buraya kadar bitlere bulaş-
madan sürdürdüğümüz makina dili
dizimiz, artık bit hesabına girmek zo-
runda.

Hepimizin malümu ki, 0-255 arası
herhangi bir sayı, iki haneli bir hex ra-
kamla belirtilebileceği gibi, sekiz ha-
neli bir binary rakamla da belirtilebi-
lir. Örneğin, $A9— 40101004, $87-
10000444 filan. Onlu sistemde nasıl bir
sayıyı onla çarpmak için arkasına bir
sıfır eklemek yeterliyse, ikili sistemde
de ikiyle çarpmak için arkaya sıfır ek-
lemek yeterli. 14; 40-2; 400-4;
1000-8. Eğer rakamlarımız sekiz ha-
neyle sınırlıysa, demek ki, ikiyle çarp-
mak için tüm bitleri bir sola kaydırıp
arkada boşalan yere sıfır eklemek ge-
rekiyor.

aAlldiddikz-d
ila19001i0#2-1
ıgidaldeasczi

ildlgdld
igiadidd
öloglddd

ASL (Arifthmetic Shift Lefi) komutu,
akümülatörde bulunan veya para-
metrede belirtilen byte'i bir sola kay-
dırıyor; soldan taşan biti de Carry'e
atıyor. Böylece rakam ikiyle çarpılmış
oluyor, fakat sonuç 256'dan büyükse,
fazlalık 256 Carry'de gözüküyor.

LSR (Logical Shift Right), ASL'nın ter-
si: Rakamı sağa kaydırıp ikiye bölmüş
oluyor. Sağdan taşan kesir, carıy'e
geçiyor.

ASL ve LSR, parametresiz kullanıldık-
larında, akümülatörün yükünü sağa
sola kaydırıyorlar. Parametreli çeşitle-
rinden ise, mutlak, zero page, indek-
sli vb. bilumum adresleme imkânları
mevcut.

ROL ve ROR, ASL ve LSR'nın ikiz kar-
deşleri. Şu farkla ki, sola veya sağa
kaydırmakla boşalan haneye 0 koya-
cakları yerde, cariry'de o an bulunan
değer'i koyuyorlar. Yani, bir şeyi üst-
üste 8 kez ASL'lenince sonuç daima
sıfır; oysa 9 kez üstüste ROL edilen sa-
yı sonuçta ilk baştaki haline dönüyor.
Çünkü, ilk ROL'de soldan taşan bit, bir
sonraki ROL'de sağdan gene kuyru-
ğa giriyor.

Peki $47 ile $A5'ı nasıl çarpacağız?

$47'yi ikiliye çevirdiğimizde, arif
olan cevabı hemen (4) bilebilir.

$47-04000144. Sıfırları atlayıp di-
rekleri sayarsak, $47 (onlu 73), -$404
04402404 veya onlu 64444241.
Yani bir sayıyı sırasıyla 1, 2, 4 ve 64'le
çarpıp sonuçları toplamak, o sayıyı
$47 ile çarpmakla eşdeğer.

O halde işlem şundan ibaret:

$A5*47- A5 00000004
* A5” 00000040
* A5 00000100
* AS“ 01000000

47'yi $60 adresine, A5'i iki byte'lik bir
rakam olarak $64-62'ye koyup, iki
oyte'lık sonucu $63-64'te elde eden
bir program şöyle olabilir:

HAZIRLIK

KISMI

cddd AS 47 LDA H#$47
Cdd2 85 60 STA $6g9
Cd04 AS A5 LDA #$AS
Cdd6 835 62 STA #62
Cc098 AS 980 LDA #$d09
-- #$p93*2- De
--$Daxe-i g4
—-$9g442-1 48

coon 85 61 STA #61
cooc 85 63 STA $63
COBE 85 64 STA $64
İŞLEM

Cal AS 62 LDA #62
COi2 46 60 OoOLSR #69
CO14 SORA EBCC $scasg
CBIB 65 64 OoOADC $64
CA18 85 64 STA #64
COlA AS 61 LDA #61
COIC 6563 ADC #63
COLE 85 63 STA $63
Ca2B 06 62 ASL $6Z
CO22 26 Gİ ROL $61
Ca24 AS 60 OoOLDA $68
CO2E DO E8 EBNE $C919
cez8 oo BRK

C012'deki işlem, $60 adresindeki 47
sayısını tüp gibi sıkıp, sağdan bir biti-

“ni taşıyor. Eğer taşan bit sıfırsa (carry

clear), yapacak tek iş, $61-62'deki sa-
yıyı ikiyle çarpıp devam etmek. Yok
birse, (carry set) $61-62'de habire ikiy-
le çarpılan sayının mevcut hali, $63-
64'teki sonuç hanesine ekleniyor. İlk
geçişte taşan 4 ve 0045 sonuca ek-
leniyor. İkinci geçişte de taşan 4, ek-
lenen 00A5*2. Üçüncüde yine 4, ek-
lenen 00A5*2*2. Dördüncü, beşinci
ve altıncıda sıfır. Yedincide yine 4, ek-
lenen 00A5*2*2*2*2*2*2,

C024-26, tüp sıkılıp bitti mi diye so-
ruyor. Bitmediyse (BNE) baştan.

Bittiyse, bu seferlik BRK.

...

Ananevi yarışmamız bu sefer epey-
ce yüklü:

MADDE: $4F85AC ile 3420C0'yu
toplayan programımızın X indeksli
olarak kısa yazılışı.

MADDE 2: $47 ile $AS'ın çarpım so-
nucu.

BÜYÜK İKRAMİYE: Tek byte'lik herhan-
gi bir bölme işlemini, virgülden sonra
sekiz bite kadar hesaplayan prog-
ram.

29



Bu sayıdaki diğer sayfalar: