INCLUDE"P16F877.INC"ORG 0000HGOTO A1ORG 002BHA1 MOVLW 00HMOVWF 40H;數據處理寄存器高位(乘積高8位)MOVLW 00HMOVWF 41H;數據處理寄存器低位(乘積高中8位)MOVLW 0FFHMOVWF 42H;被乘數高位(乘積低中8位)MOVLW 0FFH MOVWF 43H;被乘數低位(乘積低8位)MOVLW 0FFHMOVWF 44H;乘數高位MOVLW 0FFHMOVWF 45H;乘數低位MOVLW D16MOVWF 4AH;循環次數--8位二進制數相乘8次4位則4次A2 CLRF 4BH;清標志BTFSS 43H,0;判斷被乘數第0位是否為0是則不用相加 GOTO A3MOVFW 45H;不為0則相加ADDWF 41H,1;乘數低位與處理后數據低位相加數據存回數據處理低位寄存器MOVFW 44H;BTFSC STATUS,C;判斷是否溢出INCF 44H,0;是則加1BTFSC STATUS,Z;判斷加1后是否溢出BSF 4BH,1;是則置為標志ADDWF 40H,1;乘數低位與處理后數據高位相加上面相加可能溢出所以用ADDC數據存回數據處理高位寄存器BTFSC 4BH,1;判斷溢出標志BSF STATUS,C;溢出則置位CA3 RRF 40H,1;先右移高位相加可能溢出RRF循環帶C右移RRF 41H,1;再右移低位把高位的數移入低位RRF 42H,1;將處理后的數移到被乘數高位RRF 43H,1;將處理后的數移到被乘數低位DECFSZ 4AH,1;是否完成GOTO A2NOPNOPNOPGOTO $END
評論