Commodore sayı 46, sayfa 44

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 44

ASSEMBLER - 9

Kursumuzun şu ana kadar olan bölümünde ele aldığımız makine dilinin temelini oluşturan ikilik ve onaltılık sayı sistemlerindeki aritmetik işlemler oldukça başımızı ağrıtmıştı. Bu işlemlerle bir müddet daha uğraştıktan sonra programlarımızda C-64'ün işletim sistemindeki (kernal) rutinleri kullanıp örneğin en basitinden makine dili ile ekranın herhangi bir bölümüne istediğimizi yazabileceğiz. Fakat şimdi tekrar kaldığımız yere dönelim ve makine dilinde çıkartma işleminin nasıl yapıldığını görelim. “Subtract with Carry” (Carry ile birlikte çıkart) veya kısaca SBC komutu makine dilinde çıkartma işlemlerinde kullanılır. Aynı ADC'de olduğu gibi burada da akümülatörün değeri ele alınır ve sonuç tekrar akümülatöre kaydedilir. Fakat SBC'de farklı ve daha karışık olan tek unsur Carry'nin kullanılışıdır. Biz burada Carry'nin kullanılışına detaylı olarak değinmeyeceğiz; karşılaşacağımız sorunlarda ise SEC (Set carry) komutunu kullanacağız. SEC ile Carry'nin değeri 1 yapılmaktadır.

Önemli Not: Herhangi bir toplama işleminden önce muhakkak CLC ile Carry'yi temizleyin. Aynı şekilde yine herhangi bir çıkartma işleminden önce SEC ile Carry'nin “1” değerini almasını sağlayın.

Şimdi iki örnekte yukarıda gördüklerimizi inceleyelim. Öncelikle bir 8-Bit çıkartma: $1300'deki SAYI1'den $1400'deki SAYI2'yi çıkartalım ve sonuç $1500'e yazılsın.

1200 CLD 1201 SEC 1202 LDA $1300 1205 SBC $1400 1208 STA $1500

Yukarıda da görüldüğü gibi SBC mutlak veya dolaysız olarak (Örneğin SBC #$40) adreslenebilir. Dolaysız olarak adreslendiğinde komut iki bayt, mutlak olarak adreslendiğinde ise 3 bayt işgal etmektedir. SEC ise daha önce tanıştığımız CLC gibi tek baytlık bir komuttur. İkinci örneğimiz ise bir 16-Bit çıkartmadan oluşmakta. Programa geçmeden önce belleğin dört baytı aşağıdaki şekilde düzenlenmelidir:

1300 SAYII Alçak Bayt 1301 SAYII Yüksek Bayt 1400 SAYI2 Alçak Bayt 1401 SAYI2 Yüksek Bayt

Sonucu yine $1500 ve $1501'e yazalım.

1200 CLD 1201 SEC 1202 LDA $1300

ANIL GÜL

1205 SBC $1400 1208 STA $1500

Program bu haliyle iki sayının alçak baytlarını birbirinden çıkartmakta ve $1500'e kaydetmektedir.

120B LDA $1301 120E SBC $1401 1211 STA $1501

Bu şekilde iki sayının yüksek baytlarını da birbirinden çıkardıktan sonra görevimiz tamamlanmış oluyor. SBC komutu ADC ile aynı bayrakları (Statü registeri) etkilemektedir.

Bir program projesi:

Şimdi öğrendiklerimizle ilk geniş kapsamlı programımızı geliştirebiliriz. Bu program bize iki açıdan yararlı olacaktır: 1) Şu ana dek tanıdığımız komutları birbirleriyle kombine etme imkânına sahip olacağız. 2) Basic ve Assembler programlarını birbirine bağlamada oldukça sık kullanılan bir yöntemi göreceğiz. Özellikle bu ikinci konu birçok kişi tarafından yeteri derecede bilinmemektedir. Assembler rutinlerini Basic programların içinde kullanmanın birçok yöntemi vardır ve bu yöntemlerin hepsine sırası geldiğinde teker teker

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