📄 被除数远小于除数的除法.txt
字号:
;;;;;;;;;;;;;;;;;;;;;除法,适用于被除数远小于除数,可算出小数部分;;;;;;;;;;;;;;;;;;;;;
;--------------------------商存在r3,r2,r3为低位,r5存小数点位置 r7,存第二位有效数字---
divdll data 20h ;定义被除数单元
divdlh data 21h
divdhl data 22h ;存放低位少时的临时空间
divdhh data 23h
divl data 24h ;定义除数单元
divh data 25h
templ data 26h ;定义余数单元
temph data 27h
decimal data 28h ;定义小数点的位置
quit data 29h
result_0 data 30h
result_1 data 31h
mov quit,#1
mov divdll,#3h ;低位
mov divdlh,#0
mov divl,#45h ;低位
mov divh,#0
ag_judge:
mov a,divdlh
jnz divd
mov a,divdll ;计算小数点后面一位
subb a,divl
jnc divd
mov a,quit
cjne a,#1,out_1
inc decimal
out_1: mov r3,divdll
mov r7,#10
acall mul_10
mov divdll,r5
mov divdlh,r4
ajmp ag_judge
divd: push acc
push b
mov a,divh ;判除数是否为零
orl a,divl
jnz divd0
setb ov ;除数为零,置溢出标志
pop b
pop acc
ret
divd0: mov templ,#00h ;除数不为零,进行运算
mov temph,#00h
mov b,#20h ;置循环次数
divd1: clr c ;进位位、余数单元和
mov a,divdll ;被除数单元全体逐个
rlc a ;向左循环移位
mov divdll,a
mov a,divdlh
rlc a
mov divdlh,a
mov a,divdhl
rlc a
mov divdhl,a
mov a,divdhh
rlc a
mov divdhh,a
mov a,templ
rlc a
mov templ,a
xch a,temph
rlc a
xch a,temph
mov f0,c ;保存进位位
clr c
subb a,divl ;用余数减去除数
mov r7,a
mov a,temph
subb a,divh
anl c,/f0 ;判断是否够减
jc divd2 ;不够减,移下一位
mov templ,r7 ;够减,刷新余数单元
mov temph,a
inc divdll ;商上1
divd2: djnz b,divd1
clr ov
pop b
pop acc
mov a,quit
jz wei_2
mov r3, divdll ;存商低位
mov result_0,divdll
mov r2, divdlh
mov r0,templ ;存余数低位
mov r1,temph
mov result_1,divdll
dec quit
mov a,r0
mov b,r1
orl a,b
jz ee1
mov divdll,r0
mov divdlh,r1
ajmp ag_judge
wei_2:
mov r5,decimal
mov r3,result_1
mov r7,divdll ;存第二个有效数字
ee1: jmp $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;乘法运算;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
mul_10:
MULD: MOV A,R3
MOV B,R7
MUL AB
MOV R4,B ;
MOV R5,A
MOV A,R3 ;患扑鉘3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;焕奂硬糠只?
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;患扑鉘2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;焕奂硬糠只?
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;患扑鉘2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;焕奂硬糠只?
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -