Asm de Bölme

Başlatan ahmetinrodisi, 31 Ekim 2005, 11:42:47

ahmetinrodisi

Merhaba arkadaşlar. Ams ile H'60' sayısının 1/3 ünü veya 1/4 ünü nasıl aldırabilirim?.Algoritmasını elle öğrendim sayılır ama programda yazmaya gelince biraz afalladim, aklım karıştı.Yardimci olursaniz çok sevinirim.Şimdiden Teşekürler......

oziant

asm de bölme işlemi çıkarma ile yapılıyor
çarpma işlemide toplama ile

bölme için bölünecek degeri sürekli olarak bölünenden çıkarıyorsun
bölünen degerden bölünecek deger çıkmadıgı zaman işlemi durduruyorsun
çıkarma işlemini kaç kere yaptıysan sonuc odur
MPLAB 5.62 ASM PROPİC 2

ahmetinrodisi

Teşekürler oziant.Fakat bölünecek degeri sürekli olarak bölünenden çıkarırsak sonuç hep 111.... lerden oluşmaz mı? Mesala bi örnek:
10000111 ÷ 00000101 = 00011011

Bölünen:                  10000111
Bölünecek değer :     00000101

Ama sonuç (00011011 ) 1 ve 0 lardan oluşuyor.Konuyu daha iyi anlamam için bana asm yi kullanarak veya algoritmasını yazarak bir örneklersen çok sevinecem.Yoksa birz zor anlayacağıma benziyor bu iş.Teşekürler.

DumrulBey

Alıntı yapılan: "ahmetinrodisi"Merhaba arkadaşlar. Ams ile H'60' sayısının 1/3 ünü veya 1/4 ünü nasıl aldırabilirim?.Algoritmasını elle öğrendim sayılır ama programda yazmaya gelince biraz afalladim, aklım karıştı.Yardimci olursaniz çok sevinirim.Şimdiden Teşekürler......
Dostum iki ve üstü katlarda (örneğin 1/4'de) işlem çok kolay. Bölünecek ifadeyi iki defa sağ kaydır; hepsi o kadar. Zaten gerek bölme olsun gerekse çarpma kaydırma mantığı ile yapılıyor. Yani çarparken sola kaydırıp topluyoruz, bölerken sağa kaydırıyoruz... Tabii bir yandan da taşma olup olmadığına bakıyoruz.

Bu olayların mantığını daha önce öğrendiğine göre sana algoritmalar için bir adres vereyim: http://techref.massmind.org/techref/microchip/routines.htm

Bu adreste ihtiyaç duyabileceğin bir çok algoritma kütüphanesi mevcut. Senin aradığın ise matematik algoritmalarından divide fonksiyonu, adresi ise şu: http://techref.massmind.org/techref/microchip/math/div

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)

stlg

Sevgili ahmetinrodisi
Arkadasım asagıdaki siteyi bir incele istersen bolme carpma gibi konularda
ornekler var kolay gelsin

http://www.piclist.com/techref/microchip/math/index.htm        


           ALLAHA EMANET OLUNUZ
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

ahmetinrodisi

Çok sağolun arkadaşlar.Ben hemen gösterdiğiniz sitelere bir gözatayım.Binary Bölmeyi animasyonla anlatan bir site buldum.Orda enazından 2 li sistemde bölme nasıl yapılır onu çok iyi anladım.Sanırım sizin sitelere de baktık tan sonra yazma işim bayağı kolaylaşacak.Tekrar hepinize çok teşekürler.Sayenizde ilerde belkide devreme bir de hesap makinesi ekleyebilirim:=)Şuan benim için hayal tabii..

sertac2003

Alıntı yapılan: "ahmetinrodisi"Binary Bölmeyi animasyonla anlatan bir site buldum.

bu siteyinin linkini ve varsa başka bilgileri paylaşabilirsen.
belki ihtiyacı olan başka birileri vardır.
Şirketteki herkes en üst yöneticinin müşterisidir.

bigbey

Arkadaşlar size daha önce yaptığım bir dört işlem asm kod veriyorum sanırım işinize yarar.
sayılar tamsayı olarak kullanılıyor ve sonuç 16 bit'i geçmeyecek şekilde kullanılabilir.
sizlerde daha fazla bit için yazılımı genişletebilirsiniz.
include "p16f877.inc"
 __config(_CP_OFF & _PWRTE_OFF & _XT_OSC & _WDT_OFF & _BODEN_OFF & _LVP_OFF)



	CBLOCK H'20'

REG20
REG21
REG22
REG23
REG24
REG25
REG26
REG27
REG28
BOLUMH
BOLUML
BOLENH
BOLENL
SONUCH
SONUCL
CARPIH
CARPIL
CARPANH
CARPANL
TOPL1H
TOPL1L
TOPL2H
TOPL2L
CIKARH
CIKARL
CIKH
CIKL
	ENDC

	ORG	0X000
	GOTO	MAIN
	ORG	0X004
	CLRF	INTCON
	RETFIE
MAIN
	CLRF	SONUCH
	CLRF	SONUCL
;------------------------------------	03E8/0022=1D
	MOVLW	H'03'			
	MOVWF	BOLUMH			;bölünecek sayı high byte
	MOVLW	H'E8'
	MOVWF	BOLUML			;bölünecek sayı low byte
	MOVLW	H'22'
	MOVWF	BOLENL			;bölecek sayı high byte
	MOVLW	H'00'
	MOVWF	BOLENH			;bölecek sayı high byte
;------------------------------------	03E8*0022=
	MOVLW	H'03'
	MOVWF	CARPIH			;çarpılacak sayı high byte
	MOVLW	H'E8'
	MOVWF	CARPIL			;çarpılacak sayı low byte
	MOVLW	H'00'
	MOVWF	CARPANH			;çarpacak sayı high byte
	MOVLW	H'22'
	MOVWF	CARPANL			;çarpacak sayı high byte
;------------------------------------
	MOVLW	H'3'
	MOVWF	TOPL1H			;toplanacak A sayısı high byte
	MOVLW	H'E8'
	MOVWF	TOPL1L			;toplanacak A sayısı low byte
	MOVLW	H'3'
	MOVWF	TOPL2H			;toplanacak B sayısı high byte
	MOVLW	H'E8'
	MOVWF	TOPL2L			;toplanacak B sayısı low byte
;------------------------------------
	MOVLW	H'3'
	MOVWF	CIKARH			;çıkarılacak sayı high byte
	MOVLW	H'E8'
	MOVWF	CIKARL			;çıkarılacak sayı low byte
	MOVLW	H'01'
	MOVWF	CIKH			;çıkacak sayı high byte
	MOVLW	H'F4'
	MOVWF	CIKL			;çıkacak sayı low byte
;------------------------------------

	CALL	BOLMEK			;hangi işlemi yapacaksan onu aktif et.
;	CALL	CARPMAK
;	CALL	CIKARMAK
;	CALL	TOPLAMAK

DUR
	GOTO	DUR			;İŞLEM SONUNDA BURADA BEKLİYOR

;------------------------------------	ÇARPMA İŞLEMİ
CARPMAK
	MOVF	CARPIL,W
	MOVWF	REG26
	MOVF	CARPIH,W
	MOVWF	REG27
	MOVF	CARPANH,W
	MOVWF	REG23
	MOVF	CARPANL,W
	MOVWF	REG22
	CALL	CARPISLEM
	MOVWF	SONUCL
	MOVF	REG25,W
	MOVWF	SONUCH
	RETURN
CARPISLEM
	MOVLW	0X10
	MOVWF	REG28
	CLRF	REG21
	CLRF	REG20
CAR0
	RRF	REG27,F
	RRF	REG26,F
	BTFSS	STATUS,0
	GOTO	CAR1
	MOVF	REG22,W
	ADDWF	REG20,F
	MOVF	REG23,W
	BTFSC	STATUS,0
	INCFSZ	REG23,W
	ADDWF	REG21,F
CAR1
	RRF	REG21,F
	RRF	REG20,F
	RRF	REG25,F
	RRF	REG24,F
	DECFSZ	REG28,F
	GOTO	CAR0
	MOVF	REG24,W
	BCF	STATUS,7
	BCF	STATUS,6
	BCF	STATUS,5
	RETURN
;------------------------------------	ÇIKARMA İŞLEMİ
CIKARMAK
	MOVF	CIKL,W
	SUBWF	CIKARL,W
	MOVWF	SONUCL
	MOVF	CIKH,W
	BTFSS	STATUS,0
	ADDLW	.1
	SUBWF	CIKARH,W
	MOVWF	SONUCH
	RETURN
;------------------------------------	TOPLAMA İŞLEMİ
TOPLAMAK
	MOVF	TOPL1L,W
	ADDWF	TOPL2L,W
	MOVWF	SONUCL
	MOVF	TOPL1H,W
	BTFSC	STATUS,0
	ADDLW	.1
	ADDWF	TOPL2H,W
	MOVWF	SONUCH
	RETURN
;------------------------------------	BÖLME İŞLEMİ
BOLMEK
	MOVF	BOLUML,W
	MOVWF	REG20
	MOVF	BOLUMH,W
	MOVWF	REG21
	MOVF	BOLENL,W
	MOVWF	REG22
	MOVF	BOLENH,W
	MOVWF	REG23
	CLRF	PCLATH
	CALL	BOLISLEM
	MOVWF	SONUCL
	MOVF	REG21,W
	MOVWF	SONUCH
	RETURN	
BOLISLEM
	CLRF	REG25
	CLRF	REG24
	MOVLW	0X10
	MOVWF	REG26
IS0
	RLF	REG21,W
	RLF	REG24,F
	RLF	REG25,F
	MOVF	REG22,W
	SUBWF	REG24,F
	MOVF	REG23,W
	BTFSS	STATUS,0
	INCFSZ	REG23,W
	SUBWF	REG25,F
	BTFSC	STATUS,0
	GOTO	IS1
	MOVF	REG22,W
	ADDWF	REG24,F
	MOVF	REG23,W
	BTFSC	STATUS,0
	INCFSZ	REG23,W
	ADDWF	REG25,F
	BCF	STATUS,0
IS1
	RLF	REG20,F
	RLF	REG21,F
	DECFSZ	REG26,F
	GOTO	IS0
	MOVF	REG20,W
	GOTO	IS2
IS2	BCF	STATUS,7
	BCF	STATUS,6
	BCF	STATUS,5
	RETURN
	END
TA6R

ahmetinrodisi

İşte İnternette araştırırken rastgeldiğim site:

NumberSystems


Bu site de diğer sitelerden farklı olarak 2 lik sistemde toplama, çıkarma , çarpma ve bölmeyi animasyonla anlatılmış.Güzel bir şey yapmışlar bence.
Tekrar herşey için teşekürler arkadaşlar.