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şlemleri oldukça başımızı ağrıtmıştı. Bu işlemlerle bir müddet daha uğraştıktan son- ra programlarımızda C-64'ün işletim sistemindeki (ker- nal) rutinleri kullanıp örneğin en basitinden makine dili ile ekranın herhangi bir bölümüne istediğimizi yazabile- ceğiz. Fakat şimdi tekrar kaldığımız yere dönelim ve ma- kine 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şlemlerin- de 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 kul- lanı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 yi- ne 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 SAYII'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 dolay- sız olarak (Örneğin SBC — $40) adreslenebilir. Dolaysız olarak adreslendiğinde komut iki bayt, mutlak olarak ad- reslendiğinde ise 3 bayt işgal etmektedir. SEC ise daha önce tanıştığımız CLC gibi tek bayt'lık bir komuttur. İkinci örneğimiz ise bir 16-Bit çıkartmadan oluşmak- ta. Programa geçmeden önce belleğin dört baytı aşağı- daki şekilde düzenlenmelidir: 1300 SAYIİ Alçak Bayt 1301 SAYII Yüksek Bayt 1400 SAYI2 Alçak Bayt 1401 SAYI2 Yüksek Bayt Sonuç yine $1500 ve $1501'e yazalım. 1200 CLD 1201 SEC 1202 LDA $1300 44 ANIL GÜL 1205 SBC $1400 1208 STA $1500 Program bu haliyle iki sayının alçak baytlarını birbi- rinden çı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 kom- bine etme imkânına sahip olacağız. 2) Basic ve Assembler programlarını birbirine bağla- mada 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 rutinleri Basic programların içinde kullanmanın birçok yöntemi vardır ve bu yöntemlerin hepsine sırası geldiğinde teker teker değineceğiz.