匯編語(yǔ)言的16位除法子程序
應(yīng)邀寫(xiě)個(gè)匯編語(yǔ)言的除法子程序。
編寫(xiě)除法子程序,有兩種算法,移位相減的方法和循環(huán)相減的方法。
移位相減的方法是仿照人們做除法的豎式編寫(xiě),執(zhí)行速度較快,但是計(jì)算的原理,一般人不好理解,難以讓大家推廣到更多的字節(jié)。故此下面采用循環(huán)相減的思路來(lái)編寫(xiě)程序。
設(shè)計(jì)思路:所謂除法,就是要求出在被除數(shù)中,含有多少個(gè)除數(shù)。那么就用被除數(shù)連續(xù)的減去除數(shù),直到不夠減為止,夠減的次數(shù),就是商,不夠減的數(shù)值,就是余數(shù)。
下列程序,對(duì)數(shù)值范圍的要求很寬松,被除數(shù)、除數(shù)和商,都可以是16位數(shù),這比網(wǎng)上常見(jiàn)的16位除8位的除法程序,適用面要廣得多。
注意,除數(shù)為0的問(wèn)題,應(yīng)該在主程序中進(jìn)行檢測(cè)。
;-------------------------------------
;16位/16位的子程序
;被除數(shù):R2R3、除數(shù):R4R5;商:DPTR、余數(shù):R2R3。
;占用:A、B。
;-------------------------------------
R23DIVR45:
MOV DPTR, #0
D_LOOP:
CLR C
MOV A, R3
SUBB A, R5
MOV B, A
MOV A, R2
SUBB A, R4 ;R2R3-R4R5
JC DIV_E ;有借位轉(zhuǎn)移
INC DPTR
MOV R3, B
MOV R2, A
SJMP D_LOOP
DIV_E:
RET;不夠減就結(jié)束
;-------------------------------------
;完
對(duì)于R2R3中的余數(shù),還應(yīng)該有個(gè)“四舍五入”的程序。
呵呵,我來(lái)拋磚,不知那位讀者可以還玉?