1 Mart 1987 Tarihli Commodore Gazetesi Sayfa 19

1 Mart 1987 tarihli Commodore Gazetesi Sayfa 19
Metin içeriği (otomatik olarak oluşturulmuştur)

içeriyor. $1234 adresinin içeriği de $43 olsun. Yürütülen hayali “ve' işlemi şu sonucu verir: $10 00010000 $43 01000011 $00 00000000 AND işlemi, sonuçta sıfır verdiği- ne göre Z-flag'ı yanacaktır. V-flag'ı verinin 6'ncı bitine eşit olacak demiş- tik, yani “1”. Verinin 7'nci biti *0” ol- duğu için N-flag'ı sönük olacaktır. Sonuçta şunu elde ederiz: BIT komutu sadece iki adresleme ti- pine sahiptir: Adresleme tipi BIT 0. sayfa $24 absolut $2C 6. Karşılaştırma Komutları Bu gruba giren komutların yaptığı işlem; register'lere zarar vermeden içe- riklerini hafızadaki verilerle karşılaş- tırmamızı sağlar. Sonuç BIT komu- tundaki gibi flag'ları etkiler. Flag'la- rın durumuna göre programın akışı- nı değiştiren komutlar (bu komutları bir sonraki bölümde göreceğiz) yardı- mıyla, bir bakıma IF...THEN...EL- SE yapısına sahip program akışı oluş- turabiliriz. Karşılaştırma komutlarında verinin içeriği sözkonusu register'in içeriğin- den çıkartılır (aritmetik olarak). Bu iş- lem sırasında register'lerin içeriği de- ğişmez. Fakat sonuca C-, N- ve Z- flag'ları belirlenir. Ana işlem ünitemi- zin üç çalışma register'i için de karşı- laştırma komutları mevcuttur. CMP komutu Bu komut (CMP: to CoMPare) akümülatör'ün içeriğini hafızadaki ve- ri ile karşılaştırmaya yarar. Operand (veri), akümülatör'den çıkarılır (CARRY'ye dikkat etmeksizin). Şayet sonuçta “alma' olayı gerçekleşirse CARRY biti söner, tersi durumda da yanar. Şayet sonuç sıfır ise, yani veri akümülatör'e eşitse, Z-flag'ı yanar, diğer durumlarda söner. Şayet sonuç $7F'ten büyükse (7'nci biti yanıksa), N-flag'ı yanar, yoksa söner. Gene bir örnek verelim: CMP 46 $30 İlk örneğimizde akümülatör $50 içersin. Yani $50-530, işlemi yürütü- lecektir. Sonuç pozitif olduğu için (ya- ni *alma' olmadığı için), CARRY bi- ti yanacaktır. Sayılar birbirine eşit ol- madığı için Z- (zero) flag'ı sönecek- tir. Sonuç olarak $20 elde ederiz, bu sayı $7F'ten büyük olmadığı için N- flag'ı sönük kalacaktır. Sonuç olarak; şu görünümü elde ederiz. Diyelim ki akümülatör'ün içeriği $30. Burada CARRY biti gene yana- caktır, çünkü “alma' olayı yoktur. Fa- kat sonuç sıfır olduğu için, ZERO biti yanacaktır. N-flag'ı gene yanmaya- caktır, çünkü sonuç $7F'ten büyük değildir. Sonuç olarak flag'lar bu du- rumu alacaktır: Üçüncü örneğimizde, akümülatör'- ün içeriği $10 olsun. Yapılan işlem $10-$530 — SE0 biçiminde gerçekleşe- cek ve görüldüğü gibi “alma' olayı ola- caktır. C-flag'ı bu yüzden sönecektir. Tabit Z-flag'ı da. Sonucun 7'nci biti yanık olduğundan ($E0 — /011100000), N-flag'ı yanacaktır. Sonuç şudur: Csz0O;Z-0;Ns-l. Pratikte sonuçlar şöyle değerlendi- yilir: C — 1; anlamı: büyük veya eşit. Z - 1; anlamı: eşit. C - 0; anlamı: küçüktür. Şayet *büyüktür” şartını kontrol et- mek istiyorsak, iki flag'a birden ba- ğımlıyız. Bu durum: Z - 0;veC — 1; anlamı büyüktür. Bir kere daha hatırlatalım: Karşılaş- tırma komutları register'lerin veya operand'ların içeriğini değiştirmez. Sadece flag'lar değişir. Flag'ları de- ğerlendiren komut grubunu bir son- raki bölümde inceleyeceğiz. Aşağıdaki tabloda CMP komutu- nun adresleme tiplerini ve kodlarını bulacaksınız. Adresleme tipi CMP direkt $C9 absolut $CD 0. sayfa $CS X-indeksli $DD Y-indeksli $D9 0. sayfa N-indeks $DS5 indirekt indeksli $DI indeksli indirekt $CI CPX komutu CPX komutu CMP komutundan farksız çalışır. Burada karşılaştırılan register, akümülatör değil X-regis- ter'dir. Burada da X-register'inin içe- riği değişmez. Yukarıda tüm söylenen- ler, aynen CPX komutu için de geçer- lidir. Yalnız CPX komutunun o ka- dar çok adresleme tipi yoktur. Aşağı- daki tabloda bu adresleme tiplerini ve karşılık gelen komut kodlarını bula- caksınız. Adresleme tipi CPX direkt $EO absolut $EC 0. sayfa $E4 CPY komutu Burada, gene yukarıda söylenenler geçerliliğini koruyor. Fakat, bu sefer karşılaştırılan Y-register'i. Bu komut için de sadece üç adresleme tipi geçer- i. Adresleme tipi CPY direkt $CO absolut $CC 0.cı sayfa $C4 7. Şartlı Programlama Komutları Şimdi öğreneceğimiz komutlar “programlarımızın şarta bağlı olarak yürümesini sağlıyor. Şartları belirle- yen şey ise daha evvelden tanıdığımız flag'lar. Flag'lardan yalnızca dört ta- nesi için bir karar verme olayı sözko- nusudur. Bunlar: Z-flag'ı (Zero), N- flag'ı (Negative), C-flag'ı (Carry) ve V-flag'ıdır (Verflow). Şartlı program- lama; şarta göre programın belli bir adrese dallanması biçiminde oluşur. Her bir flag için ikişer adet şartlı dal- lanma komutumuz mevcut. Birinci komut grubu şayet flag yanıksa (içe- riği *bir” ise) dallanıyor; ikinci grup- takiler ise flag sönükse (içeriği “sıfır” ise) dallanıyor. Şimdi bir olaya geri dönelim; şayet şart gerçekleşmezse hiçbir şey olma- dan program devam edecek, fakat şart gerçekleştiğinde ise program belli bir adrese dallanacak. Peki bu belli ad- res neresi?.. Dikkatlice bakıldığında

Bu sayıdan diğer sayfalar: