rlf komutundan once carry bitini silinmesi nasıl engellenir

Başlatan XX_CİHAN_XX, 18 Aralık 2005, 12:45:07

XX_CİHAN_XX

Arkadaşlar ccs c de istemediğim bir durum ile karşılaştım.
data2=data2<<1;
yukarıdakı koddanda anlaşılacağı gibi data2 degıskenın içeriğini bir sefer sola shıft yapmak ıstıyorum fakat derleyıcı arka planda bu shıft olayını yapmadan once statusun carry flagini clear yapıp ondan sonra data2 yi rotate left yapıyor.Ben carry biti silinmeden data2 nin sola kaymasını istiyorum.Bunun amacıda sola kaydırma sırarında carry bitinin data2 nin 0. bitine yerleşmesını istiyorum.Ama derleyici bu bıtı sıldıgı ıcın istediğim olay olmuyor.Bunu nasıl yapmalıyım?
                      Saygılar&Sevgiler
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.

Petek

“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

XX_CİHAN_XX

Sanırım asm ye geçmekten başka çozum yok.Olsun buda işimi görüyor çok teşekkür ederim.
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.

Petek

Aslında rotate_left ve shift_left olarak iki komut var ama senin istediğini hangisi yapıyor bilmiyorum. Denemek lazım. Mantıken rotate_left carry i silmeden yapması lazım.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

XX_CİHAN_XX

Alıntı yapılan: "Petek"Aslında rotate_left ve shift_left olarak iki komut var ama senin istediğini hangisi yapıyor bilmiyorum. Denemek lazım. Mantıken rotate_left carry i silmeden yapması lazım.
Evet rotate left komutu dedıgın gıbı carry bıtını sılmeden yapıyor fakat şoyle oluyor;
rotate_left( &data2, 1);
yukarıdakı komutun asm de yaptıgı iş şu
rlf   data2,w
rlf   data2,f
bu durumda şoyle bir anormallık olusmaz mı
1. kaydırmada data2nin 7. biti carry e gecer
2. kaydırmada carry bıtı data2 nın sıfırıncı bıtıne gecmez mı?
Yanı yukarıdakı rotate_left komutunun yaptıgı iş asm dekı ıle yıne aynı degıl.Asm de
rlf   data2,f
dedıgınızde data2 de bulunan deger ıle
rlf   data2,w
rlf   data2,f
dedıgınızde data2 de bulunan deger aynı degıl dolayısıyla
rotate_left( &data2, 1);
komutuda işimi gormuyor sanırım dogru mu soyledım acaba fikrinizi paylaşırsanız sevinirim.Teşekkürler,
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.

Petek

Rotate bu durumda 7. biti 0. bitin yerine koyuyor. O zaman işinizi görmeyecek. Shift_left te sanıyorum uzunca bir dizinin (yada 1 baytın) herbirinin elemanlarını kaydırıyor. Help teki örnekte 3 elemanlı bir dizinin elemanlarını kaydırmış. Assembler işinizi görüyorsa vakit kaybetmeyin. Başka boş bir zamanınızda bunlara bakarsınız :)
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein

XX_CİHAN_XX

Alıntı yapılan: "Petek"Rotate bu durumda 7. biti 0. bitin yerine koyuyor. O zaman işinizi görmeyecek. Shift_left te sanıyorum uzunca bir dizinin (yada 1 baytın) herbirinin elemanlarını kaydırıyor. Help teki örnekte 3 elemanlı bir dizinin elemanlarını kaydırmış. Assembler işinizi görüyorsa vakit kaybetmeyin. Başka boş bir zamanınızda bunlara bakarsınız :)
Evet bencede asm ile iş çözülüyor teşekkürler.
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.

piedos

type_bool = bit_test(data2,7);

data2 = data2 * 2;

output_bit( bit 0 of data2, type_bool );

syntax hatası olabilir ama bence bu işini görür. :idea:
Einstein: "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former."

XX_CİHAN_XX

Alıntı yapılan: "piedos"type_bool = bit_test(data2,7);

data2 = data2 * 2;

output_bit( bit 0 of data2, type_bool );

syntax hatası olabilir ama bence bu işini görür. :idea:
Benim sorduğum sorunun cevabı bu değildi sanırım
Sorumu yanlış anladınız herhalde

Alıntı Yap
data2=data2<<1;
yukarıdakı koddanda anlaşılacağı gibi data2 degıskenın içeriğini bir sefer sola shıft yapmak ıstıyorum fakat derleyıcı arka planda bu shıft olayını yapmadan once statusun carry flagini clear yapıp ondan sonra data2 yi rotate left yapıyor.Ben carry biti silinmeden data2 nin sola kaymasını istiyorum.Bunun amacıda sola kaydırma sırarında carry bitinin data2 nin 0. bitine yerleşmesını istiyorum.Ama derleyici bu bıtı sıldıgı ıcın istediğim olay olmuyor.Bunu nasıl yapmalıyım?
Sorduğum soru buydu.
@petek
#asm
rlf    data2,f
#endasm

yapabilirsin dedi.Bunun dışında başka bir yontem (ccs c kodlarıyla) onerebilirsen memnun olurum.Yoksa @petek in dediği şekilde yapmaya karar verdim.
                  Saygılar&Sevgiler
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.

Petek

Bence assembler C programlarının içerisine ayrı bir renk katıyor. Gerçi C de yapı olarak assemblere yakın sayılır. Yani C nin bir komutunun derleyici tarafından assemblera nasıl dönüştürüldüğünü çok kolay kavrayabilirsiniz.

rlf nin yaptığı işi C de yapan komut yoksa sebebi muhtemelen sizin ihtiyacınız olmayacağı içindir. Yani sizin assemblerda düşündüğünüz mantıkla C de program yazmayacağınız düşünülmüştür. Çok zorda kaldığınızda da assembler kullanarak işinizi halledersiniz. Tam ne demek istediğimi helpten shift_left komutuna bakarak anlayabilirsiniz. Bir başka örnek, 16 bitlik bir tamsayıyı sola kaydırmak istediğinizde zaten derleyici kendi içerisinde önce düşük değerli baytı kaydıracak, daha sonra yüksek değerli baytı kaydıracaktır. bu ikisi arasında carry flagini sıfırlaMAdan tabi.
“Önyargıları yıkmak atomu parçalamaktan zordur” A.Einstein