單片機 雙字節除法子程序 作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 8位MCU實(shí)現雙字節除法子程序 51單片機只是8位的,但有時(shí)候需要實(shí)現雙字節除法,里面的指令只支持8位。 想來(lái)想去,只好用減法來(lái)實(shí)現了。下面這個(gè)子程序是雙字節除以雙字節,商、余數結果都是雙字節保存,可能有點(diǎn)消耗資源,但這樣可以整合在一塊。 ;**************************************** ;函數名稱(chēng):Div2Byte ;功能描述:無(wú)符號數雙字節除法 ;傳入參數:R0R1被除數 R2R3除數 ;返回數據:R4R5商 R6R7余數 ;其他說(shuō)明:比如雙字節數R0R1,R0高字節 R1低字節 ;**************************************** Div2Byte: mov R4,#0 mov R5,#0 ;商賦初值零 mov A,R0 mov R6,A mov A,R1 mov R7,A ;余數賦初值,保證商為零時(shí)余數正常 Div2Byte_1: mov A,R1 clr c subb A,R3 ;低字節相減 mov R1,A mov A,R0 subb A,R2 ;高位相減 mov R0,A jc Div2Byte_3 ;如果高字節都需要借位則退出循環(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 ;更新余數 LJMP Div2Byte_1 Div2Byte_3: RET 使用示范: 16進(jìn)制雙字節數字 05D2H 除以 0105H,商是0005H,余數是00D2H mov R0,#5H mov R1,#0D2H mov R2,#1H mov R3,#5H lcall Div2Byte 則結果是 R4:00H R5:05H R6:0 R7:D2H
評論