一、编写子程序 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 ;程序结束新闻热点
疑难解答