Bu sayfadaki yazılar
Sayfanın metni
Sayfa 47
ve teybi bir kayıt cihazı olarak kabul etmezler. Bu gibi durumlarda kaset kullanıcıları için başka bir monitör programını denemekten başka çare kalmamaktadır. Makine dili programı kaydettikten sonra tekrar yüklerken monitör programına ihtiyacımız olmayacak. Sadece LOAD””,8,1 (veya kaset için ,1,1) yazdıktan sonra Basic başlangıcını normale döndürmek için NEW yazıp RETURN'e basmalısınız. Böylelikle biraz önce yazdığımız Basic programı da yükleyebiliriz. Assembler programını oluştururken A ve D'yi değişken olarak tutmuştuk. Bu nedenle isterseniz Basic programın satırındaki alçak ve yüksek baytları değiştirerek farklı diziler elde edebilirsiniz (1+2+3+4+5+6... gibi). Burada dikkat etmeniz gereken tek unsur ise S toplamının 32767'nin üstünde olmamasıdır. Yalnız hemen şunu belirtelim: Şu ana kadar makine dilinin gerekli temel özelliklerini öğrendik. Bu bilgiler doğrultusunda toplamın 32767'den daha büyük değerler almasını sağlayabilirsiniz. İşte size bir ipucu: Neden yukarıda iki bayt halinde yazdığımız sayılar üç veya daha fazla bayt ile gösterilmesin? Veya yukarıda belirttiğimiz maksimum sınır değeri aşılırsa makine dilinin hangi özelliği ortaya çıkar? (Statü registerinin V-Bayrağı ile ilgili bölüme bir göz atmanızı tavsiye ederiz.)
Branch komutları:
6510 mikroişlemcisi 8 farklı dallanma komutuna sahiptir. Biz bunlardan sadece BNE'yi tanıyoruz. Bu Branch (Branch — dallanma) komutlarının tümü statü registerinin bayraklarını kontrol etmektedir. BNE ve BEQ komutları Z-Bayrağına bakmaktadırlar. Eğer Z-Bayrağında sıfır değeri varsa BNE istenen adrese dallanmaktadır. BEQ (Branch if equal Zero — eğer sıfıra eşitse dallan) ise aynı işi Z-Bayrağı sıfıra eşit ise yapmaktadır. BCC ve BCS ise statü registerindeki C-Bayrağı yani Carry Bit'i ile ilgilenmektedirler. BCC'nin karşılığı “Branch if Carry Clear”, yani “eğer Carry boş ise dallan”dır. Carry Bit'inin “1” değerini aldığı durumlarda ise BCS (Branch if Carry set) komutu devreye girmektedir ve dallanmayı sağlamaktadır. Yukarıda sıraladıklarımız makine dilindeki en anlamlı ve en çok kullanılan dallanma komutlarıdır. Şunu rahatlıkla söyleyebiliriz ki, programcılar tarafından kullanılan dallanmaların %90'ı bu şekilde sağlanmaktadır. R.Mansfield Amerika'da oldukça satılan “Machine Language for Beginners” adlı kitabında okuyucuları programlarında BPL ve BMI komutlarını kesinlikle kullanmamalarını öğütlüyordu.
Aslında bu komutları kullanmamak için bir sebep yoktur. Birçok sorun BPL, BMI, BVS ve BVC ile kolaylıkla çözümlenmektedirler. Sayıların bilgisayar tarafından nasıl yorumlandığını bildikten ve bu dallanma komutlarının fonksiyonlarını kavradıktan sonra bunları rahatlıkla kullanabiliriz. BMI ve BPL (“Branch on Minus” — “Eğer negatif ise dallan” ve “Branch on Plus” — “Eğer pozitif ise dallan”) statü registerindeki N-Bayrağına göre hareket etmektedirler. Bu bayrak hakkında daha önce bazı bilgiler vermiştik. Şimdi kısaca tekrar ele alalım isterseniz. Eğer bir operasyonda 7. Bit'i 1 olan bir sayı ortaya çıkarsa bu bayrak da değerini almaktadır. Dolayısıyla bu Bit 8-Bit'lik bir sayının işaretidir. Eğer bu Bit “1” değerini alırsa BMI, aksi takdirde BPL ile bir dallanma gerçekleşir. BVS ve BVC komutları da statü registerindeki V-Bayrağı ile ilgilenmektedirler. Eğer bu bayrak “1” değerini alırsa BVS (Branch on Overflow Set) komutu kullanıldığında bir dallanma gerçekleşecektir. BVC ile ise V-Bayrağının 0 olduğu durumlarda dallanma sağlanır. Bu şekilde istersek hesap işlemlerinde kullanılan sayıların 16, 24 veya 32 Bit'lik olmaları sağlanabilir ve böylelikle her seferinde ortaya çıkabilecek en büyük ve en küçük değerleri bulmak için uğraşmayız. Yukarıda tanıdığımız tüm Branch komutları aynı BNE gibi 2 baytlık komutlardır ve özel bir adresleme yöntemi kullanmaktadırlar: Relatif Adresleme. Resim 2'de son öğrendiğimiz 11 komut hakkında bazı yararlı bilgiler yer almaktadır.
Tabii ki 9?
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 46
Bayt | — Kod Etkilediği | A*resleme İsayısı|he — dec | bayraklar ADC dolaysız. |2 69 10512 mutlak 3 6D CLC |yok- 1 18 24 (2 O-c SBC |2 absolut 3 ED 237|4 SEC |yok 1 38 56 |2 |LC BEO |relatif 2 FO 2 Değişiklik yok BCC |İrelatif 2 90 2 Değişiklik yok 2 BO 2 Değişiklik yok BM |relatif 2 30 2 iklik yok. BPL |relatif 2 10 2 iklik yok. 2 60 2 Değişiklik yok BVS |relatif 2 70 2 Değişiklik yok *1 dallandırmak 42 sınırın artması halinde
A2: Son öğrendiğimiz 11 komut.
Öncelikle Basic çağrı programıyla biraz ilgileneceğiz. Yalnız hemen şunu belirtelim: POKE, PEEK ve SYS komutlarında kullanacağımız değerler yukarıda belirtilen adreslerin desimal karşılıklarıdır.
10 REM **** ARİTMETİK BİR DİZİNİN TOPLA- MI *** 20 POKE 5120,0 : POKE 5121,0 : REM SONUÇ AD- RESLERİNİN SIFIRLANMASI 30 PRİNT CHRS$(147) CHR$(17) CHRS(17) 40 INPUT “ELEMAN SAYISI N-”;N S0 IF OR N>255 THEN PRİNT #N< -255”: GOTO 40 60 POKE 4864,N :REM N'NİN KAYDEDİLMESİ 70 POKE 4880,1:POKE 4881,0: POKE 4896,1: PO- KE 4897,0: REM A VE D'NİN KAYDEDİLMESİ 80 SYS 4608: REM MAKİNE DİLİ PROGRAMININ ÇAĞRILMASI 90 M-PEEK(5121):L « PEEK(5120): REM SONU- CUN OKUNMASI 100 E— 256*M 4 L:PRİNT CHR$(17) CHR$(17) 110 PRİNT “ ILK “N” TAMSAYININ TOPLAMI: 120 END Şimdi artık makine dili programımıza geçebiliriz. Bu- nun için lütfen Resim 1'deki akış diyagramına bakın. Programımızın hazırlık safhasında eleman sayısını X registerine yükleyeceğiz ve toplama işlemi gerçekleşece- ği için Carry Bit'ini temizleyeceğiz. Monitör programı- nızı yükleyip A1200 yazdığınızda başlangıç adresimiz olan $1200 ekranda gözükecektir. Artık programı yazmaya başlayabiliriz (Her satırdan sonra RETURN'e basmayı unutmayın). 1200 LDX $1300 1203 CLC Şimdi gelecek olan altı satırda ise bir sonraki eleman © ana kadar olan toplama eklenecektir. Başlangıçta $1400/1401 boştur ve $1310/1311'de ise başlangıç ole- manı olan A— | yer almaktadır. Aşağıdaki döngü işle- meye başladığında ise $1400/1401'de o ana kadar olan toplam ve $1310/1311'de ise son eleman bulunacaktır.
1204 LDA $1400 1207 ADC $1310 120A STA $1400 Bu satırlarda alçak baytlar toplanıp $1400'e kaydedil- miştir. 120D LDA $1401 1210 ADC $1311 1213 STA $1401 Böylelikle yüksek baytlarda toplanmış oldu. Bundan sonra dizinin o anki son elemanını bir önceki elemanı D ile toplayarak elde etmeliyiz. Bu işlemin Basic'deki kar- As A4 D'dir. Yine bir 16-Bit toplama yapacağı- mız için CLC komutunu kullanmalıyız. 1216 CLC 1217 LDA $1310 I21A ADC $1320 121D STA $1310 Bunlar alçak baytlar idi. Şimdi de yüksek baytlar: 1220 LDA $1311 1223 ADC $1321 1226 STA $1311 X- Registerini | eksilttikten sonra O olup olmadığını kontrol ederek N tane elemanın toplanıp toplanmadığı- nı anlayabiliriz. 1229 DEX 122A BNE $1203 Eğer tüm elemanlar toplanmamış ise döngünün başı- na dönülecektir. Döngü N defa tekrarlandıktan sonra Ba- sic'e dönüş şu şekilde sağlanır: 122C RTS Yazdığımız bu makine dili programını diskete şu şe- kilde kaydedebilirsiniz: S “Program Adı'',1200,122D,08 Genelde tüm monitör programları bu kalıbı kullanır, fakat bazıları virgül işaretine gerek duymaz. Bu nedenle farklı bir monitör programı kullanıyorsanız biraz dene- me yapmanız gerekecektir. Kaset kullanıcıları ise Yuka- **08”' yerine yazmalıdırlar. Yalnız birçok mo- nitör programı disket ile çalışmak üzere hazırlanmıştır