Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

carry biti

Başlatan F493, 29 Eylül 2007, 12:31:32

F493

Selam arkadaşlar benim bir sorum olucaktı.

 Yazılım olarak asm kullanıyorum.

    8 bitlik 2 adet register'ım var  ,bu iki registere porttan gelen  önce yüksek anlamlı olmak üzere, 16 biti yerleştirmek istiyorum.

 Anladıgım kadarıyla rlf reg1,f şeklinde sola kaydıracagım ,8 bit taştıgında ise taşan deger carry bitinde olcak.Mantıgını anladım ancak 8.biti geçtikten sonra carry'de olan degeri 2.registerden nasıl devam ettirecegim,yani carry'deki degeri 2.reg. nasıl aktaracagım.

   Teşekkürler

XX_CİHAN_XX

Selam,
Olayı kavramış sayılırsın.Tam olarak anlaman için yardımcı olayım.Carry biti adındanda anlaşılacağı üzere elde (taşma) bitidir.2 tane 8 bitlik registerimiz var.Bunlara REGH ve REGL diyelim.
Sola kaydırma (RLF) komutunu aşağıdaki resimlede gösterelim.

Görüldüğü üzere sola kaydırma komutu çalıştığında carry deki bit kaydırdığın registerin başına(0. bite) geçer ve 8. bit ise carry e geçer.
Sen porttan aldığın veriyi önce carry e yerleştireceksin.Şimdi sıra bu biti içeri almaya geldi.Örnek kod üzerinde anlatsam daha iyi olacak.
  MOVLW   .16
   MOVWF   SAYAC
LOAD
;PORTTAN SIRA ILE GELEN VERILERI CARRY BITINE YERLEŞTİR
   RLF   REGL,F
   RLF   REGH,F
   DECFS   SAYAC,F
   GOTO   LOAD

görüldüğü üzre once regl hemen ardından regh yı kaydırdım.kaydırmaya başlamadan once carry de porttan gelen sıradakı veri bitim var.ilk kaydırmada bu bit regl nın 0. bitine yerleşti.ve regl nın 8. biti carry e aktarıldı.Akabinden regh yi kaydırdım ve regl den taşan carry deki bit regh nin. 0. bitine girdi.Böylece ne oluyor regl den taşanlar reg h ye girerek devam ediyor.Sanırım sormak istediğin nokta burasıydı.Umarım anlatabilmişimdir.
Kolay gelsin.
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.

bigbey

1. registerden gelen carry registeri içeriği 2. registeri kaydırdığında aynen 2. registerin kayan yönünde 2. registere ilave olur
TA6R

CLR

@F493

1)C içinde 2 register kullanıp  kaydırma operatörleri olan >> veya << kullanırsan derleyici her kaydırma operatörlerini gördüğü zaman Carri flag'i siler. Dolayısla bit aktarımı olmaz. Sadece kaydırma kısmını asm ile yaparsan carry silinmez ve bit aktarımı olur.

2)Veya bir tane C içinde 16 bitlik register tanımlarsan bunun üzerinde shift yaparsan carry'yi derleyici silmez. İstediğin gibi shift yapabilirsin.

Kolay gelsin
Knowledge and Experience are Power

bigbey

Şekilde izah edildiği gibi 1. durumda registerler işlem yapılmamış hali.
2. durumda reg1 sağa kaydırılıyor. ve carry içeriğindeki bit register1 'e 7. bite geliyor. register1 deki sıfırıncı bit ise carry nin içine geçiyor.
3. aşamada register 2 sağa kaydırılıyor. böylece carry içeriği regisre2 nin 7. biti olarak geçiş yapıyor. register2 nin sıfırıncı biti de carry nin içeriği olarak yerini alıyor.
TA6R

F493

Arkadaşlar yardımınız sayesinde hallettim ,ellerinize saglık.

Aslında benim amacım 64 bitlik bir register'a bitleri yerleştirmekti , amacım bu örnekle mantıgını kavramaktı ve testimiz başarılı oldu , sanırım bu şekilde 64 bitide alıp registerlera yerleştirebilirim.

F493

arkaşlar 64 bit için yaptım ,simülasyonda mevcut isteyen arkadaşlara kaynak olabilir.

http://rapidshare.com/files/59467805/carrylikaydirma.rar.htmll