Assemblyde Parite Hesaplamak?

Başlatan ssx, 14 Ocak 2008, 05:06:25

ssx

pcycle
xorwf byteio,W
bcf STATUS,0
rrf byteio,F
decfsz cbit
goto pcycle
andlw 00000001B
movwf parbit
return


Not : (cbit=08H, byteio=01010111B ya da benzeri )

Bir programı incelerken yukardaki parite hesaplama algoritmasına rastladım fakat mantığını anlayamadım.. "byteio" değişkeni için pariteyi bulup "parbit" değişkenine ataması lazım. İzah edebilirseniz sevinirim..

Şimdiden teşekkürler..

ssx

Gerek kalmadı arkadaşlar. Anladım nasıl olduğunu..
İyi çalışmalar.

94220039

Ama ben hala anlamış değilim, mümkünse açıklar mısın?

Saygılarımla.

ssx

Burda programın yaptığı şey son biti diğer bitlerle teker teker XORWF karşılaştırmasına tabi tutmak. Böylelikle byte'ın içinde 2 tane 1 varsa sıfırıncı bit=0 oluyor. 3 tane 1 varsa sıfırıncı bit=1 oluyor.
Mesela byteio=10110011 olsun. Önce 0. bit ile 1. bit karşılaşıyor, bu durumda 0. bite sıfır değeri atanıyor. (1 xorlw 1 = 0) Yani toplamları çift. Daha sonra 0.bit ile 2. bit karşılaşıyor.(0 xorlw 0 = 0). Böylelikle 8. bite kadar karşılaştırılıyor. Eğer sayı
tekse 0. bit=1,
çiftse 0. bit=0 oluyor.

Parity nedir diyenler için:

Parity yollanan bitlerin eksik olup olmadığını kontrol etmeye yarayan metottur. Bitlerin alınması tamamlandıktan sonra parity biti yollanır. Yollanan parity biti bizim hesapladığımız parity biti ile kaşılaştırılarak hata olup olmadığı kontrol edilir.
Parity bitini bulmak için bir byte'ın içindeki birlerin sayı değerlerini toplayıp bunun tek mi çift mi olduğunu anlamamız gerekiyor.  Çift parity ve tek parity olarak ayrılır.

Çift parityde yollanan bitler toplanır. Toplam tek ise bunu çift yapmak için parity bitimizin 1 olması gerekir. Toplam çift ise parity biti 0'dır.

Tek parity ise bunun tam tersi, yollanan bitlerin toplamı çift ise bunu tek yapmak için parity biti 1 olur.
Parity güvenilir bir yöntem değildir çünkü iki bitin yanlış gönderilmesi durumunda( iki tane 1 mesela) bunu anlayamaz.

İyi çalışmalar...