⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16×16位定点数加、减法子程序.txt

📁 实用子程序.rar本子程序库对《单片机应用程序设计技术》一书附录中的子程序库作了重大修订
💻 TXT
字号:
;【校验举例2】 26222+3000=29222(十进制)
;化为十六进制数: 666EH+0BB8H
;结果:7226H(十六进制)
;【例程】

;2  四则运算子程序
; 2.1  16×16位定点数加、减法子程序
;以下子程序实现2个16×16位有符号数加、减运算,其和或差用一个16位数表示。
;在子程序中,减法是通过对减数求补后再与被减数相加来实现的。因此,当程序
;从D_sub进入子程序时为减法,当从D_add进入子程序时为加法。
;子程序的入口条件和出口条件如下:
;入口条件:16位被加数/被减数存放在ACCBHI、ACCBLO中;
;              16位加数/减数存放在ACCAHI、ACCALO中;
;出口条件:16位和/差存放在ACCBHI和ACCBLO中。
;以下为16×16位有符号数加、减法子程序。
;注意:在以下注释程序中均以ACCA代替ACCAHI、ACCALO两个字节,以
;ACCB代替ACCBHI、ACCBLO两个字节。
    LIST            p=16f877
    INCLUDE        p16f877.inc
ACCALO     EQU     20    ;存放加数或减数低8位
ACCAHI     EQU     21    ;存放加数或减数高8位
FULL       EQU     22    ;22.0存放进位
ACCBLO     EQU     23    ;存放被加数或被减数低8位
ACCBHI     EQU     24    ;存放被加数或被减数高8位
    ORG    0X0000
START    GOTO     MAIN
;***双字节减法子程序,入口地址ACCB-ACCA,出口地址ACCB***
D_sub    CALL    NEG_A    ;求ACCA的补码
;***双字节加法子程序,入口地址ACCB+ACCA,出口地址ACCB***
;***双字节加法子程序,入口地址ACCB+ACCA,出口地址ACCB***
D_add      MOVF     ACCALO,0    ;ACCB和ACCA低半字节相加
    ADDWF     ACCBLO
    BTFSC     STATUS,C    ;有进位否?
    goto      $+6         ;有,
    MOVF      ACCAHI,0    ;ACCA、ACCB高半字节相加
    ADDWF     ACCBHI
    BTFSC     STATUS,C
    BSF       FULL,0
    RETURN    ;子程序返回
    MOVFW     ACCBHI      ;ACCB高字节加1,再加ACCAHI
    ADDLW     1h
    BTFSC     STATUS,C     ;有进位否?
    BSF       FULL,0
    MOVWF     ACCBHI
    GOTO      $-D'10'
;************** ACCA取补子程序*****************
NEG_A    COMF     ACCALO    ;ACCALO取反加1
    INCF     ACCALO
    BTFSC     STATUS,Z    ;低8位有进位吗?
    DECF     ACCAHI    ;有,ACCAHI减1,再取反
    COMF     ACCAHI    ;否则ACCAHI直接取反
    RETURN    ;子程序返回



MAIN    MOVLW      0X6E    ;被加数666EH送ACCB
    MOVWF    ACCBLO
    MOVLW    0X66
    MOVWF    ACCBHI
    MOVLW    0XB8    ;加数BB8H送ACCA
    MOVWF    ACCALO
    MOVLW    0X0B
    MOVWF    ACCAHI
    CALL    D_add    ;调用双字节加法子程序,求和
    goto  $
    END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -