ASM cilere kafa sorusu 'isaretli bolme' islemi

Başlatan bunalmis, 31 Mayıs 2011, 01:21:02

z

Negatif sayilari, isaret degistirip pozitife cevirmeden bolebilirmisiniz?

Peki a ve b nin isaretli sayi oldugu durumlarda, a/b yi isaret degistirmeden bolebilirmisiniz?







Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Sanal ve bolme komutu olmayan bir islemci icin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Library kullanmadiysa bravo. Bu algoritmayi eskiden heryerde bulamazdik.

Processor ureticilerine bilgi paylastikca eksilmez desem yerler mi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Burak B

@bunalmis hocam siz sanırsam çarpmayla bölme ve sihirli numalar mevzundan bahsediyorsunuz. ;)

'Division via Multiplication' ve 'Computing Magic Numbers' konuları sizin isteidğinizi temin eder gibi geliyor. Basitce

x değeri için y değerine bölme yapılacaksa y değeri için belirlenen sihirli rakamlar sayesinde (Özellikle y sabit bir sayı ise) bölme kullanmadan çarpma ve sola kaydırma yaparak bu işlemi gerçekleştirebilirsiniz.

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

z

#4
Yok oyle hazır çarpma işlemini kullanmak.

Algoritma sorusu bu.

İşaretsiz bölme algoritmasını kendi kendine oluşturamayan, ben algoritmadan anlarım algoritma yazarım demesin.

Y=A/B = (A* (2^n/B))*2^-n  zaten bilinen bir şey değilmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Burak B

Hocam sorduğunuz sorularda kriterleri daha iyi belirtmelisiniz. :)

Bölme işlemi Bölenin Bölünenden sürekli çıkarılması işlemidir. Çarpmada aynı şekilde toplamadır.

17/3 işlemini 17 den 5 kez 3 çıkararak elde ederiz ve elimizde kalanımız olan 2 de bulunur ve bu negatif sayılar içinde uygulanabilir bir işlemdir.
Yine çarpma içinde aynı durum söz konusudur. 3*5 demek 5 sayısının 3 kez kendisiyle toplanması demektir.

Malum kriptolojide 1024-2048 bitlik sayılar kullanıldığı ve normalde PC'lerde  kullandığımız işlemcilerdeki yapının buna izin vermediği (istisnalar kaideyi bozmaz) düşünülürse. Büyük sayıları kullanan kütüphanelerin bunu birşekilde başarmış olmaları da incelenebilir.

Mesela çarpma için Booth abimiz ne yapmış;
http://en.wikipedia.org/wiki/Booth_encoding




"... a healthy dose of paranoia leads to better systems." Jack Ganssle

z

Bolme işlemini ardışıl çıkartma ile yapacaksak yandık. Mesela 1 trilyonu 3 e bölmek istesem?

2 li sistemde bölme işlemi 10 lu sistemdekinin aksine oldukça kolay fakat zaman alıcı bir işlemdir.

Ancak, sorun unsigned sayıların bölünmesi değil, signed (2's complement) sayılarda bölme işlemi.

İşin üçkağıdı;

Sayılar negatif ise pozitife çevir. İşaretsiz bölme yap. Sonra sonucu girdi işaretlerinin durumuna göre negatife çevir.

Ben harbi harbi unsigned bölme algoritmasını soruyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

The Gariban

http://www.virag.si/nic/?p=10
Ayrıca kodların sonundaki "source site" linkinde daha fazla detaylar var

The Gariban

iyide adam orada ben ARM7 için daha hızlı bir algoritma geliştirdim diyor hocam. ::)

Burak B

#9
Hocam size kolay gelsin;
Ayrıca verdiğim linkteki algoritmayı incelediğinize eminmisiniz ?

Etmediyseniz;
http://people.ee.duke.edu/~sorin/prior-courses/ece152-spring2009/lectures/3.3-arith.pdf
http://www.academic.marist.edu/~jzbv/architecture/Projects/S2002/MultDiv/ComputerArch.ppt

Bildiğiniz birşeyse aç karnınayım zaten hafif sinirli olurum ona yok buna yok benim zamanımı harcatmayın boşuna. :)
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

The Gariban

Sanırım aradığınız bu
http://www.info.uni-karlsruhe.de/lehre/2003SS/asm/material/arm/arm-intro.pdf
bölme için bir işlem yapmadığını söylüyor (3.sayfanın son satırı)

mufitsozen

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

Tagli

Gökçe Tağlıoğlu

z

Verilen algoritmaların alayı unsigned div.

Signed div işlemi de bahsettiğim 3 kağıtla yapılmış.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Burak B

#14
Alıntı Yap
Booth's multiplication algorithm is a multiplication algorithm that multiplies two signed binary numbers in two's complement notation. The algorithm was invented by Andrew Donald Booth in 1951 while doing research on crystallography at Birkbeck College in Bloomsbury, London. Booth used desk calculators that were faster at shifting than adding and created the algorithm to increase their speed. Booth's algorithm is of interest in the study of computer architecture.

Ayrıca
http://opencourseware.kfupm.edu.sa/colleges/ccse/ics/ics233/files/2_Unit5.ppt

Sunumda tüm sorularınızın cevapları mevcut bölme ve çarpma dahil gayet basit anlatmışlar. Dediğiniz unsigned dönüşümü dahil.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle