一、编写子程序 Add_16,实现双字节无符号数加法。要求在地址0x70~0x73定义变量ACCALO、ACCAHI、ACCBLO、ACCBHI。
- ACCALO ;存放加数或减数低8位
- ACCAHI ;存放加数或减数高8位
- ACCBLO ;存放被加数或被减数低8位
- ACCBHI 存放被加数或被减数高8位
list p=16f877A ; 标明所用的处理器类型
#include ; 调用头文件
;***** 变量声明**************************************
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 ;程序结束