Commodore sayı 76, sayfa 22

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 22

En iyisi, lafı daha fazla uzatmamak. Programın assembler listesini Tablo 3'de görebileceğiniz için detaylı olarak buraya yazmayacağım. Program MDE listesini döküm

- - $57 « $59 - $5B « $BBA2 $BCSB

ARRTAB

4802 uzunluğunu ekle ş;N pointeri dizi göstersin. (ARRTAB) ,Y

»

NPNT*1 KPNT 45805 NPRT

sonunun beş eksiği son elemanın adresini verir. Lı ARRTAB

Li

BE

41 pointer'ı dizinin ilk elemanını göstersin )

KA >» ğ

temizle

BAR

bel >

35

STA

TAY iyüksek değerlikli Y'ye 'TXA şdüşük değerlikli A'ya FAC'a

maya kalkarsanız, ilk baştaki doksan değe- rin sıfır olduğunuz ve sonraki sayıların (eğer sayılarınızın hepsi pozitifse) sizin dizinizin sıralanmış hali olduğunu görürsünüz. Bu yüzden, DIM kullanmadan açılan dizilerde (eğer eleman sayısı 10'dan azsa DIM komu- LDA JPNT JSR COMPARE ile FAC'ı karşılaştır BM büyük ise dallar LOY büyük STY FLAG #Flagsd SWAP LDA (JPNT),Y TAX LDA (JPRTİ),Y ile TXA STA (JPNT1),Y BPL SWAP NOSWAP LDA SEC sac 4505 STA JPNT BC$ TESTİ DEC TESTİ CMP I1PNT BNE — JDÖNGÜSÜ LOA CHP BNE LDA FLAĞ BEO BİTİR şEvet. LDA IPNT ADC STA IPNT BOC TESTİ ENC TESTİ CMP BNE — İDÖNGÜSÜ LDA CMP #İ-N? BNE ;Hayır. BİTİR RTS şEvet. FLAG *BYTEO NPNT

Tablo-3: Sıralama işlemini makine dilinde yapacak olan programın assembly listesi.

Bu program A(N) dizisini deminki BASIC program kadar iyi sıralar. Peki BASIC'den kolayca yazmak dururken neden bu karmaşık makine dili rutinleriyle boğuştuk? Bu sorunun cevabını yer alan ufak hız karşılaştırması gösterecektir. Makine dili rutinini yükledikten sonra kalacak yerlere SYS 828'leri koymanız gereklidir. Ama demin olması gerektiğini söyleyerek sıralanmayacaktır. Eğer 100'lük bir dizinin on elemanını doldurup bunu sıralatmanıza ihtiyacınız yoktur. Programın en başında kullanacağınız bir A(5) 53 komutu A için 10'luk bir dizi açacaktır.) 10'dan az eleman kullandığınızda doğru sonucu elde edemezsiniz. Tablo 4'de de gördüğünüz gibi makine dili programımız dizi boyutu büyüdükçe daha fazla zaman kazanmanızı sağlıyor. Eğer bu program bile size yavaş geliyorsa (çok büyük dizileri sıralamak için), daha etkin sıralama algoritmaları kullanmalısınız. Geçen sayılarımızda Sinan sıralamalar konusuna değinmişti. O yazıdan Quick sort algoritmasının mantığını öğrenebilirsiniz. Eğer makine dilinde kendinize gerçekten güveniyorsanız quick sort'u yapmayı bir deneyin. Gerçekten de kendi yığıt'ınızı (stack'inizi) oluşturmanız ve belli sayıları bu yığıta mantıklı bir şekilde atmanız gerekecek. Bu yüzden bu algoritmanın makine diliyle gerçekleştirilmesi oldukça (oldukçadan daha fazla) zordur. Biraz alıştırma yapmak isterseniz, burada yayınlanan sort programını adam etmeyi deneyin. Mesela gerekli kontrolleri yaparak herhangi bir kayan noktalı diziyi sıralamasını sağlayın (sadece ilk diziyi değil). Ya da tam sayı ve string'leri de sıralayabilen genel bir sıralama programı yazın. Tabii her zaman söyledim, söyleye söyleye dilimi kafamdan daha tüylü hale getirdim lafımı tekrarlayacağım: Yaptığınız programları bana da yollayın. Gerçekten de yazılarımın ne derecede işe yaradığını merak ediyorum. Kendi çalışmalarınızda kullanabilmeniz için sık kullanılan ROM rutinlerinin adreslerini Tablo 5'de bir araya getirdik. FAC kolonunda bulunan bir * işareti, FAC'ın içeriğinin değişeceğini, işareti ise aynı kalacağını belirtir. Eğer fonksiyon hem FAC'ı hem de ARG'ı kullanıyorsa rutin çağrılmadan önce A register'ı, yani akümülatör, FAC'ın üssüyle ($61) yüklenmelidir. AND, OR ve NOT gibi mantık işlemlerinde ilk olarak değerler 16 bit tamsayılara çevrilir, daha sonra bitler üzerinden gerekli işlem yapılır ve sonuç tekrar kesirli sisteme döndürülür. BASIC yorumlayıcısının işlemleri yaparken kullandığı bazı sabitler de ROM'da yer alır. Bu sabitlerin değerlerini, anlamlarını ve adreslerini de Tablo 6'da görebilirsiniz. Bu değerler matematiksel işlemleri yaparken sık sık karşınıza çıkacaktır.

Evet, son yazımız da buraya kadar. Aslında işe ilk başladığımda çok daha derinlere inmeyi düşünüyordum, ama daha önce de belirttiğim sebeplerden dolayı bir süre aşırı teknik yazılardan kaçınacak, daha çok yeni başlayanlara yönelik makine diline başlangıç yazılarına yer vereceğiz dergimizde. Bu sayede burada ele alacağımız konulardan daha fazla yararlanabileceksiniz. Eğer Commodore 64'ünüzün tüm ROM'unun makine dili listesini elde etmek istiyorsanız dergimize yazın. Bu konuda size verebileceğimiz çok güzel bir kitap var. İngilizce açıklamalarıyla birlikte tüm BASIC ROM ve KERNAL programları bu kitapta yer alıyor. Yeni bölümlerde buluşmak üzere hepiniz hoşçakalın.

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