?? 16×16位定點(diǎn)數(shù)加、減法子程序.txt
字號(hào):
;【校驗(yàn)舉例2】 26222+3000=29222(十進(jìn)制)
;化為十六進(jìn)制數(shù): 666EH+0BB8H
;結(jié)果:7226H(十六進(jìn)制)
;【例程】
;2 四則運(yùn)算子程序
; 2.1 16×16位定點(diǎn)數(shù)加、減法子程序
;以下子程序?qū)崿F(xiàn)2個(gè)16×16位有符號(hào)數(shù)加、減運(yùn)算,其和或差用一個(gè)16位數(shù)表示。
;在子程序中,減法是通過對(duì)減數(shù)求補(bǔ)后再與被減數(shù)相加來實(shí)現(xiàn)的。因此,當(dāng)程序
;從D_sub進(jìn)入子程序時(shí)為減法,當(dāng)從D_add進(jìn)入子程序時(shí)為加法。
;子程序的入口條件和出口條件如下:
;入口條件:16位被加數(shù)/被減數(shù)存放在ACCBHI、ACCBLO中;
; 16位加數(shù)/減數(shù)存放在ACCAHI、ACCALO中;
;出口條件:16位和/差存放在ACCBHI和ACCBLO中。
;以下為16×16位有符號(hào)數(shù)加、減法子程序。
;注意:在以下注釋程序中均以ACCA代替ACCAHI、ACCALO兩個(gè)字節(jié),以
;ACCB代替ACCBHI、ACCBLO兩個(gè)字節(jié)。
LIST p=16f877
INCLUDE p16f877.inc
ACCALO EQU 20 ;存放加數(shù)或減數(shù)低8位
ACCAHI EQU 21 ;存放加數(shù)或減數(shù)高8位
FULL EQU 22 ;22.0存放進(jìn)位
ACCBLO EQU 23 ;存放被加數(shù)或被減數(shù)低8位
ACCBHI EQU 24 ;存放被加數(shù)或被減數(shù)高8位
ORG 0X0000
START GOTO MAIN
;***雙字節(jié)減法子程序,入口地址ACCB-ACCA,出口地址ACCB***
D_sub CALL NEG_A ;求ACCA的補(bǔ)碼
;***雙字節(jié)加法子程序,入口地址ACCB+ACCA,出口地址ACCB***
;***雙字節(jié)加法子程序,入口地址ACCB+ACCA,出口地址ACCB***
D_add MOVF ACCALO,0 ;ACCB和ACCA低半字節(jié)相加
ADDWF ACCBLO
BTFSC STATUS,C ;有進(jìn)位否?
goto $+6 ;有,
MOVF ACCAHI,0 ;ACCA、ACCB高半字節(jié)相加
ADDWF ACCBHI
BTFSC STATUS,C
BSF FULL,0
RETURN ;子程序返回
MOVFW ACCBHI ;ACCB高字節(jié)加1,再加ACCAHI
ADDLW 1h
BTFSC STATUS,C ;有進(jìn)位否?
BSF FULL,0
MOVWF ACCBHI
GOTO $-D'10'
;************** ACCA取補(bǔ)子程序*****************
NEG_A COMF ACCALO ;ACCALO取反加1
INCF ACCALO
BTFSC STATUS,Z ;低8位有進(jìn)位嗎?
DECF ACCAHI ;有,ACCAHI減1,再取反
COMF ACCAHI ;否則ACCAHI直接取反
RETURN ;子程序返回
MAIN MOVLW 0X6E ;被加數(shù)666EH送ACCB
MOVWF ACCBLO
MOVLW 0X66
MOVWF ACCBHI
MOVLW 0XB8 ;加數(shù)BB8H送ACCA
MOVWF ACCALO
MOVLW 0X0B
MOVWF ACCAHI
CALL D_add ;調(diào)用雙字節(jié)加法子程序,求和
goto $
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -