新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī) 雙字節(jié)除法子程序

單片機(jī) 雙字節(jié)除法子程序

作者: 時(shí)間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
8位MCU實(shí)現(xiàn)雙字節(jié)除法子程序

51單片機(jī)只是8位的,但有時(shí)候需要實(shí)現(xiàn)雙字節(jié)除法,里面的指令只支持8位。
想來想去,只好用減法來實(shí)現(xiàn)了。下面這個(gè)子程序是雙字節(jié)除以雙字節(jié),商、余數(shù)結(jié)果都是雙字節(jié)保存,可能有點(diǎn)消耗資源,但這樣可以整合在一塊。
;****************************************
;函數(shù)名稱:Div2Byte
;功能描述:無符號(hào)數(shù)雙字節(jié)除法
;傳入?yún)?shù):R0R1被除數(shù) R2R3除數(shù)
;返回?cái)?shù)據(jù):R4R5商 R6R7余數(shù)
;其他說明:比如雙字節(jié)數(shù)R0R1,R0高字節(jié) R1低字節(jié)
;****************************************
Div2Byte:
mov R4,#0
mov R5,#0 ;商賦初值零
mov A,R0
mov R6,A
mov A,R1
mov R7,A ;余數(shù)賦初值,保證商為零時(shí)余數(shù)正常
Div2Byte_1:
mov A,R1
clr c
subb A,R3 ;低字節(jié)相減
mov R1,A
mov A,R0
subb A,R2 ;高位相減
mov R0,A
jc Div2Byte_3 ;如果高字節(jié)都需要借位則退出循環(huán)
clr c
mov A,R5;為什么這里不直接使用INC R5????????
add A,#1
mov R5,A
jnc Div2Byte_2
inc R4 ;商加一
Div2Byte_2:
mov A,R1
mov R7,A
mov A,R0
mov R6,A ;更新余數(shù)
LJMP Div2Byte_1
Div2Byte_3:
RET
使用示范:
16進(jìn)制雙字節(jié)數(shù)字 05D2H 除以 0105H,商是0005H,余數(shù)是00D2H
mov R0,#5H
mov R1,#0D2H
mov R2,#1H
mov R3,#5H
lcall Div2Byte
則結(jié)果是 R4:00H R5:05H R6:0 R7:D2H


評(píng)論


技術(shù)專區(qū)

關(guān)閉