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