algoritmada bölme işlemi nasıl yapılır



Cevap :

Bölme Algoritması 1.Yol [değiştir]

Bu birinci yolda bölme işleminin yapılması için n bitlik BÖLÜM yazmacı, 2n bitlik KALAN ve BÖLEN yazmaçları, 2n bitle işlem yapabilen bir Aritmetik Mantık Birimi (AMB) ve yapılacak işlemleri denetlemesi için bir DENETİM birimine ihtiyacımız var. Algoritma genel olarak şu şekilde çalışıyor (Daha anlaşılır olması için n=32 ile çalışacağız):

Önce bölünen sayı kalan yazmacına(64 bit), bölen sayı ise bölen yazmacına(64 bit) yazılır. Sonra bölen yazmacındaki sayı kalan yazmacındaki sayıdan çıkarılır (Çıkarma yapılırken ikiye tümleyen yöntemi kullanılıyor). Elde edilen sayı tekrar kalan yazmacına yazılır. Sonra kalan yazmacındaki bu sayının sıfırdan küçük mü yoksa büyük eşit mi olduğu kontrol edilir.

Eğer sayı sıfırdan küçük ise, bölen yazmacındaki sayı kalan yazmacına eklenir (Yani kalan yazmacındaki sayı ilk durumuna getirilir). Sonra bölüm yazmacındaki sayı sola bir hane kaydırılarak açıkta kalan birinci bite 0 yazılır (çünkü sayı bölünemedi) ve bölen yazmacı sağa doğru bir hane kaydırılır. Bunun neden yapıldığını sorgulayacak olursak yukarıda verilen kalem kâğıt yöntemine bir göz atalım. Dört hanelik bölen sayı bölünen sayının ilk dört hanesi tarafından bölünebilir durumda değil bu nedenle bölen sayıyı bir hane kaydırıyoruz. Bölen kaydırıldıktan sonra bu yeni sayı kalan yazmacındaki sayıdan tekrar çıkarılır ve ilk yapılan işleme geri dönülür.

Eğer sayı sıfırdan büyük eşit ise, bölüm yazmacındaki sayı sola doğru bir hane kaydırılıp birinci bite 1 yazılır (Çünkü sayı bölündü). İkilik tabanda çalışıldığı için bölen sayı bölünenin içinde en fazla bir kez olabilir. Son olarak da bölen sayı sağa doğru bir hane kaydırılır ve ilk yapılan işleme geri dönülür. Yukarıdaki işlemler bir döngü halinde 32 kez tekrarlanır. Yani (n) kez tekrarlanır. Şimdi daha anlaşılır olması için yukarıda anlatılanları bir de algoritmik durum makinelerinde görelim...

Bölme Algoritması 2.Yol [değiştir]

Bu ikinci yolda bölme işleminin yapılması için n bitlik BÖLÜM ve BÖLEN yazmaçları, 2n bitlik KALAN yazmacı, n bitle işlem yapabilen bir Aritmetik Mantık Birimi (AMB) ve yapılacak işlemleri denetlemesi için bir DENETİM birimine ihtiyacımız var. Algoritma genel olarak şu şekilde çalışıyor (Daha anlaşılır olması için n=32 ile çalışacağız):

Önce bölünen sayı kalan yazmacına(64 bit), bölen sayı bölen yazmacına(32 bit) yazılır ve kalan yazmacı bir hane sola kaydırılır(Hatırlanacak olursak 1.yolda bölen yazmacı sağa kaydırılıyordu. Bu 2.yolda onun yerine kalan yazmacı sola kaydırılıyor). Sonra bölen yazmacındaki sayı kalan yazmacındaki sayının sol tarafındaki 32 bitlik sayıdan çıkarılır ve sonuç yine kalan yazmacının sol tarafındaki 32 haneye yazılır. Sonra kalan yazmacındaki bu sayının sıfırdan küçük mü yoksa büyük eşit mi olduğu kontrol edilir.

Eğer sayı sıfırdan küçük ise, bölen yazmacındaki sayı kalan yazmacındaki sayının sol tarafındaki 32 bitlik sayıya eklenir(Yani kalan yazmacındaki sayı ilk durumuna getirilir). Sonra bölüm yazmacındaki sayı sola bir hane kaydırılarak açıkta kalan birinci bite 0 yazılır (çünkü sayı bölünemedi). Sonra kalan yazmacındaki sayı sağa bir hane kaydırılarak ilk yaptığımız işleme geri dönülür.

Eğer sayı sıfırdan büyük eşit ise, bölüm yazmacındaki sayı sola doğru bir hane kaydırılıp birinci bite 1 yazılır (Çünkü sayı bölündü). Sonra kalan yazmacındaki sayı sağa bir hane kaydırılarak ilk yaptığımız işleme geri dönülür. Yukarıdaki işlemler bir döngü halinde 31 kez tekrarlanır. Yani (n-1) kez tekrarlanır. Şimdi daha anlaşılır olması için yukarıda anlatılanları bir de algoritmik durum makinelerinde görelim.

Bölme Algoritması 3.Yol [değiştir]

Bu üçüncü yolda bölme işleminin yapılması için n bitlik BÖLEN yazmacı, 2n bitlik KALAN yazmacı, n bitle işlem yapabilen bir Aritmetik Mantık Birimi (AMB) ve yapılacak işlemleri denetlemesi için bir DENETİM birimine ihtiyacımız var. Algoritma genel olarak şu şekilde çalışıyor (Daha anlaşılır olması için n=32 ile çalışacağız):

Önce bölünen sayı kalan yazmacına(64 bit), bölen sayı bölen yazmacına(32 bit) yazılır ve kalan yazmacı bir hane sola kaydırılır(Hatırlanacak olursak 1.yolda bölen yazmacı sağa kaydırılıyordu. Bu 3.yolda onun yerine tıpkı 2. yoldaki gibi kalan yazmacı sola kaydırılıyor). Sonra bölen yazmacındaki sayı kalan yazmacındaki sayının sol tarafındaki 32 bitlik sayıdan çıkarılır ve sonuç yine kalan yazmacının sol tarafındaki 32 haneye yazılır. Sonra kalan yazmacındaki bu sayının sıfırdan küçük mü yoksa büyük eşit mi olduğu kontrol edilir.

Eğer sayı sıfırdan küçük ise, bölen yazmacındaki sayı kalan yazmacındaki sayının sol tarafındaki 32 bitlik sayıya eklenir(Yani kalan yazmacındaki sayı ilk durumuna getirilir). Sonra kalan yazmacındaki sayı sola bir hane kaydırılarak açıkta kalan birinci bite 0 yazılır (çünkü sayı bölünemedi) (2.yolda burada bölüm yazmacı kaydırılıyordu. Bu yolda ekstra bir bölüm yazmacı kullanılmıyor. Onun yerine kalan yazmacının diğer iki yolda israf edilen sağ 32 hanesi bölümü yazmak için kullanılıyor.). Sonra kalan yazmacındaki sayı sağa bir hane kaydırılarak ilk yaptığımız işleme geri dönülür. Eğer sayı sıfırdan büyük eşit ise, kalan yazmacındaki sayı sola doğru bir hane kaydırılıp birinci bite 1 yazılır (Çünkü sayı bölündü). Sonra kalan yazmacındaki sayı sağa bir hane kaydırılarak ilk yaptığımız işleme geri dönülür. Yukarıdaki işlemler bir döngü halinde 31 kez tekrarlanır. Yani (n-1) kez tekrarlanır. Şimdi daha anlaşılır olması için yukarıda anlatılanları bir de algoritmik durum makinelerinde görelim.