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





