DC (Digit Carry/Burrow bayrağı) nerde kullanılır?

Başlatan Tagli, 15 Kasım 2008, 20:27:17

Tagli

Şu ana kadar hiç ihtiyacım olmadı sadece meraktan soruyorum: Digit Carry/Burrow bayrağı ne işimize yarar? Yani nasıl çalıştığını anladım ama bunu ne amaçla kullanırız? Z ve C bayraklarını karşılaştırmalarda sık sık kullanıyoruz (hatta başka yolu yok zaten) ama DC'nin nerde işe yarayabileceğini bir türlü hayal edemiyorum.  :roll:
Gökçe Tağlıoğlu

XX_CİHAN_XX

Digit Carry bilindiği gibi nibble' larda taşma olduğu durumlarda set olan bir flagdir. Bu bence matematiksel işlemlerde hız kazandırmak için yapılmış birşeydir.
ADDWF, ADDLW, SUBWF, SUBLW işlemlerinin sonuçları C,DC,Z bayraklarını etkilemektedir. Buda aritmetiksel işlemlerde hız kazandırmaktadır. Sonucu sorgulamaktansa direk bu flaglere bakarak işlem yapmak daha kolay ve hızlıdır.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Tagli

ASM ile kod yazarken sonucu sorgulama demek zaten bu bayraklara bakmak demek (16 serisi için en azından, 18 serisinde iş biraz daha kolaylaşmış).

Z'yi eşitlik kontrolü için sorguluyorum. C'yi de eşitlik kontrolü için kullanabilirim, ama genelde çıkarma işlemi sonucunun negatife düşüp düşmediğini, böylece bir sayının başka bir sayıdan büyük olup olmadığını sorgulamak için kullanıyorum. Ayrıca C kaydırmalarda da işe yarıyor.

Zaten ASM'de kod yazabilmek bu bayrakları etkin bir şekilde kullanmayı gerektirir. Ama DC'yi hiç kullanmam gerekmedi. Merak ediyorum acaba hangi amaçla bu bayrak sorgulanır?
Gökçe Tağlıoğlu

XX_CİHAN_XX

Örneğin 10 ile 10 u toplarsak sonuç 20 olur ve DC set olur ama C set olmaz. İşlem sonucunun 15 den büyük mü küçük mü olduğunu sadece DC flagine bakarak anlayabiliriz. Aynı şey çıkarma içinde geçerli.
DC olmasaydı, bir toplama yada çıkarma işleminin sonucunun 15 den büyük mü yoksa küçük mü olduğunu anlamak için sonuçtan 15 çıkarıp Carry flagine bakmamız gerekirdi yada ilk 4 biti maskeleyip Zero flagine bakabilirdik felan ama bunun yerine sadece DC bitini sormak yeterlidir  ;)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.