list P=16F877 #include __CONFIG _CP_OFF & _WDT_OFF & _HS_OSC & _LVP_OFF cblock 0x20 szandoH szandoL szorzoH szorzoL er8 er7 er6 er5 er4 er3 er2 er1 mulcnd mulplr H_byte L_byte count Same stat endc org 0 nop ;A szorzandó a szandoH és szandoL bájtokba kerül ;A szorzó a szorzoH és szorzoL bájtokba ;Az eredmény az er4, er3, er2, és er1 bájtokba. (er4 az MSB) ;A 8x8 bájtos szorzás alkalmazása tagonként, majd helyiértékhelyes összeadás ; szandoH , szandoL ; x szorzoH , szorzoL ; --------------------- ; szorzoL x szandoL az összeadásnál carry-re figyelni kell!!! ; szorzoL x szandoH ; szorzoH x szandoL ; + szorzoL x szandoL ; ----------------------------------------- ; er4 , er3 , er2 , er1 Start movlw 0xFF movwf szandoH ;szorzandó H bájt movlw 0xFF movwf szandoL ;szorzandó L bájt movlw 0xFF movwf szorzoH ;szorzó H bájt movlw 0xFF movwf szorzoL ;szorzó L bájt movf szorzoL,W movwf mulcnd movf szandoL,W movwf mulplr call mpy_S movf H_byte,W movwf er2 movf L_byte,W movwf er1 movf szorzoL,W movwf mulcnd movf szandoH,W movwf mulplr call mpy_S movf H_byte,W movwf er4 movf L_byte,W movwf er3 movf szorzoH,W movwf mulcnd movf szandoL,W movwf mulplr call mpy_S movf H_byte,W movwf er6 movf L_byte,W movwf er5 movf szorzoH,W movwf mulcnd movf szandoH,W movwf mulplr call mpy_S movf H_byte,W movwf er8 movf L_byte,W movwf er7 movf er2,W ;er2+er3->e3-ba addwf er3 call carry addwf er4 ;carryt er4-hez hozzáadni call carry addwf er8 movf er3,W ;er3+er5->e5-be addwf er5 call carry addwf er4 ;carryt er4-hez hozzáadni call carry addwf er8 ;ha itt is keletkezik, azt er8-hoz hozzáadni movf er4,W ;er4+er6->e6-ba addwf er6 call carry addwf er8 ;carryt er8-hoz hozzáadni movf er6,W ;er6+er7->er7-be addwf er7 call carry addwf er8 ;carryt er8-hoz hozzáadni movf er5,W movwf er2 movf er7,W movwf er3 movf er8,W movwf er4 not nop goto not carry movf STATUS,W ;carry kezelés 1 !!! movwf stat movlw 0x01 andwf stat movf stat,W return mpy_S clrf H_byte clrf L_byte movlw 8 movwf count movf mulcnd,W bcf STATUS,C ; Clear the carry bit in the status Reg. loop rrf mulplr, F btfsc STATUS,C addwf H_byte,Same rrf H_byte,Same rrf L_byte,Same decfsz count, F goto loop return end