language

ustmenu

searchbar

Commodore 1986-06-01 Sayfa 28

Commodore Dergisi, 1 Haziran 1986, Sayfa 28

 



Özet

SAÇMALIK NO 1: Makina dilinde S00-7F arası rakamlar negatif sayılır. S80-FF arası rakamlar negatif sayılır. Tabii he- men dikkat etiniz (m7), S80 ve üstü ra- kamları ortak özellikleri, ikili sistemde ifade edileklerinde.



Diğer Dergiler



Tam metin içeriği

SAÇMALIK NO 4: Makina dilinde
800-7F arası rakamlar pozitif, $80-FF
arasi rakamlar negatif sayılır. Tabii he-
men dikkat ettiniz (mi?), $80 ve üstü ra-
kamların ortak özelliği, ikili sistemde
ifade edildiklerinde

$80- 10000000 128

Bunun neden negatif olduğunu bu:
güne kadar anlayabilmiş değilim

SAÇMALIK NO 2: Bunu geçen ayın
4'üncü Anayasa maddesinde de gör-
müştük. Makina dilinde bir rakamın
alabileceği en yüksek değer SFF (255)
olduğundan, bu rakamı izleyen de-
ğer 256 değil, O'dır!

Yalnız nasıl olmuşsa bir kölaylık dü-
şünmüşler, CARRY (kalan, elde var) di-
ye bir şey icat etmişler. Şöyle ki, her-
hangi bir hesap sırasında sonuç $FF'ı
aşıp stfırlanırsa, CARRY O iken 4 oluyor.
Ama CARRY bir tek bit; yani 1 iken 2
filan olmuyor. Yaptığı, sadece, “elde
var 256” diye bir şeyi akılda tutmak

Carıy ile ilgili iki faydalı komut:

SEC (kodu: 38) SEt Carry —Carry'i 4
yap.

CLC (kodu: 18) CLear Carry —Car-
r'i sıfırla

İki komut daha:

BCS (BO) Branch on Carry Set —Bir
önceki işlemin sonucunda kalan var-
sa, parametrenin gösterdiği yere af-
la.

BCC (90) Branch on Cary Clear
—öncekinin tersi.

Hazır yeri gelmişken devam edelim

BPL (40) Branch if Plus —önceki işle-
min sonucu, yukarıdaki saçma man-
tığa göre pozitifse, dallan.

BMI (30) Branch if Minus — negatif-
se dallan.

Tüm “branch” komutlarının relatif
adresleme kullandığını, geçen sayıda
BEO ve BNE'yı anlatırken görmüştük.
Unutanlar için hatırlatalım; eğer ko-
mutun içerdiği koşul gerçekleşmişse,
komutu izleyen rakam pozitifse prog-
ram akışı o rakam artı 4 byte ileriye,
negatifse FF eksi o rakam byte geri-
ye atlayacaktır. Şöyle göstersek daha
kolay anlaşılabilir: (FOxBEO; nnspara-
metre)

program

KKK OXX XX FO nn XX XX XX XX

FA FB FC FD FE FF 89 01 02 03
Relatif Pozisyon

1. ceo
coe2

as o9
#0 19

Sonuç: program akışı $C044'ten
devam eder; çünkü C000'daki komut

BEER EŞE EEE
28

LDA o$00 demektir, sonucu sıfırdır,
.C002'deki komut ise sonuç sifirsa hex
14 byte ileriden devam et demekie-
dir.
2.C000 a9 a9
C002 1010

Sonuç: program $C004'ten aynen
devam eder; çünkü C000'da aküye
hex A9, yani negatif bir sayı yüklen-
mekte, C002 ise sonuç pozitifse hex OF
byte geri git demektir.

3. Tüm “branch” komutlarında 00
parametresi anlamsızdır, çünkü koşul
gerçekleşse de, gerçekleşmese de
program bir sonraki byte'tan devam
edecektir.

FE parametresi, eğer koşul ger-
çekleşirse, programı kısır döngüye s0-
kar; çünkü programı bir byte geriye,
yani koşul komutuna atlatır.

1444-—Belli olmaz

Sıra geldi aritmetiğin elifbasına: İki
tane basit rakamı nasıl toplayacağız?

Elcevap: ADC komutuyla, ADC ko-
mutu, akümülatörde o an bulunan sa-
yıya, parametresinde belirtilen sayıyı
ekler. Hemen hemen tüm adresleme
türlerine sahiptir; yani akümülatöre
dolaysız bir rakamı veya mutlak bir
adreste, indeksli bir adreste, dolaylı
bir adreste vb. bulunan bir rakamı ek-
leyebilir.

1-4 işlemini nasıl yaparız?
Elcevap: LDA # $04
ADC # $01

Bu işlemin sonucu ne olur?

Elcevap: Belli olmaz! Zira, ADC ko-
mutu, adı üstünde ADd with Cary de-
mektir ve önceki işlemden kalan var-
sa, toplamanın sonucuna bir ekler.
Cary 0 ise işlem sonucu 2, Carry 4 ise
sonuç 3'tür. Binaenaleyh, özel birta-
kım emellerimiz yoksa, ADC işlemin-
den öne CLC komutunu vermeyi asla
ve kat'a unutmamalıyız.

Carıy'nın hikmetinin ne olduğunu
anlatmanın ve kestirme yolu, $1F8SAC
rakamıyla $3120C90 rakamını topla:
maya çalışmak (isteyen desimale çe-
virip uğraşsın)

İlk iş, LDA ve STA yöntemiyle bellek-
te herhangi 6 adrese, yukarıdaki ra-
kamları yazmak. Örneğin, zero page'-
de $60-65 arasını seçelim

Adres: 60 61 62 63 64 65

Rakam:4F 85 AC 31
(Bak. Şekil 4.)

20 CO

2014 85 66 STA $66 -50 (80)

Sonuç $50A66C. İnanmayan kont-
rol etsin

Tabii bu programı, X indeksli adres-
leme kullanıp çok daha kısa yazmak
mümkün. Ve hayrettir ki, bu ayın Bay-
fan Bitirmez Bilgisayar Bilgisi Birinciliği-
nin Birinci Bilmecesi Bu,

Toplama böyle. Çıkarmaya gelin
ce, bunun da komutu SBC (SuBiraci
with Carry) ve işleyişi ADC'nın tam tersi,
Nasıl FF'ten artırıp 00'a ulaşınca Carry
4 oluyorsa, 00'dan eksiltip $FF'e ula-
şırsak Carry 1 iken sıfırlanıyor (sıfırsa sıfır
kalıyor). Nasıl tek haneli ADC işlemin-
de doğru sonuç almak için Carry'i sı-
fırlamak gerekiyorsa, tek haneli SBC
operasyonunda da Carıy'i 4 yapmak
şart. Yani işlem,

SEC
LDA xx
SBC yy

Çok haneli çıkarma işleminde, her-
hangi bir hanedeki SBC sonucu eksi
ise, Cary sıfırlanıyor; dolayısıyla bir
soldaki hanede SBC sonucu bir eksik
veriyor,

90 AB 25
SBC 40A765

5000Cc0

Toplama sonucunu da $66-68'e yazacağız.

Program şöyle:

2005 18 CLC

2001 AS 65 LDA $S5
2003 65 62 ADC #62
2005 85 68 STA $68
2007 A5 64 LDA $64
2009 65 61 ADC #61
2008 85 67 STA $67
2000 AS 63 LDA #63

2oor 65 60 ADC #68

Şekil 4

Elde var 8

ca <192>

#AC (172) *0

-6C (108) elde 1
28 (32)

“85 (133) #1

SAS (166) elde 9
31 cas»

#IF (31) 48

<256>



Bu sayıdaki diğer sayfalar: