一、編寫子程序 Add_16,實現雙字節無符號數加法。要求在地址0x70~0x73定義變量ACCALO、ACCAHI、ACCBLO、ACCBHI。
ACCALO ;存放加數或減數低8位ACCAHI ;存放加數或減數高8位ACCBLO ;存放被加數或被減數低8位ACCBHI 存放被加數或被減數高8位list p=16f877A ; 標明所用的處理器類型 #include <p16f877A.inc> ; 調用頭文件 ;***** 變量聲明**************************************ACCALO EQU 0x70 ;存放加數低8位 ACCAHI EQU 0x71 ;存放加數高8位 ACCBLO EQU 0x72 ;存放被加數低8位 ACCBHI EQU 0x73 ;存放被加數高8位 ;---------------------------------------------------- org 0x0000 ; 復位入口地址;----------------------------------------------------Main MOVLW 0X4B MOVWF ACCBLO ;(ACCBLO)=0x4B MOVLW 0X4C MOVWF ACCBHI ;(ACCBHI)=0x4C MOVLW 0XD2 MOVWF ACCALO ;(ACCALO)=0xD2 MOVLW 0X40 MOVWF ACCAHI ;(ACCAHI)=0x40 CALL Add_16 ;調用子程序Add_16求和,結果應為0x8D1D NOP GOTO $ ;停機 ;--------------雙字節無符號數加法子程序--------------------------------Add_16 MOVF ACCALO,W ADDWF ACCBLO,F ;ACCB和ACCA低8位相加 BTFSC STATUS,C ;有進位否? INCF ACCBHI ;有進位,ACCB高8位加1 MOVF ACCAHI,W ADDWF ACCBHI,F ;ACCB和ACCA高8位相加 RETURN;-------------------------------------------------------------- END ;程序結束二、編寫子程序Sub_16,實現雙字節無符號數減法。要求在地址0x20~0x23定義變量ACCALO、ACCAHI、ACCBLO、ACCBHI。
ACCALO ;存放加數或減數低8位ACCAHI ;存放加數或減數高8位ACCBLO ;存放被加數或被減數低8位ACCBHI 存放被加數或被減數高8位list p=16f877A ; 標明所用的處理器類型 #include <p16f877A.inc> ; 調用頭文件 ;***** 變量聲明***************************************ACCALO EQU 0x70 ;存放減數低8位 ACCAHI EQU 0x71 ;存放減數高8位 ACCBLO EQU 0x72 ;存放被減數低8位 ACCBHI EQU 0x73 ;存放被減數高8位 ;----------------------------------------—----------- org 0x0000 ; 復位入口地址;----------------------------------------------------Main MOVLW 0X4B ;被減數0x4C4BH送ACCB MOVWF ACCBLO MOVLW 0X4C MOVWF ACCBHI MOVLW 0XD2 ;減數0x40D2送ACCA MOVWF ACCALO MOVLW 0X40 MOVWF ACCAHI CALL Sub_16 ;調用Sub_16,求差,結果為0x0B79 NOP GOTO $ ;停機;--------------雙字節無符號數減法子程序-----------------------Sub_16 MOVF ACCALO,W SUBWF ACCBLO,F ;ACCB、ACCA低8位相減 BTFSS STATUS,C ;有借位否? DECF ACCBHI ;有,被減數高8位減1 MOVF ACCAHI,W SUBWF ACCBHI,F ;ACCB、ACCA高8位相減 RETURN;------------------------------------------------------------- END ;程序結束新聞熱點
疑難解答