📄 math.lib
字号:
Quo equ 60Divisor equ 64Op equ 68Rem equ 72Carry equ 72Fract equ 76Aux equ 80Div1: clr C mov R0, #Op mov R2, #4 acall ShiftX ;;; C:Op = Op*2; mov R0, #Rem mov R2, #4 acall ShiftX ;;; Rem = Rem*2 + C; mov R0, #Rem mov R1, #Divisor mov R2, #4 acall LessX jc Quot ;;; if (Rem >= Divisor) { mov R0, #Rem mov R1, #Divisor mov R2, #4 acall SubtractX ;;; Rem -= Divisor; C = 0; clr C Quot: ;;; } else C = 1;retDiv32: mov R0, #Rem mov R2, #4 acall ClearX ;;; Rem = 0; mov R0, #Quo mov R2, #4 acall ClearX ;;; Quo = 0; mov R3, #32 DivLoop: ;;; for (R3 = 32; R3 > 0; R3--) { acall Div1 cpl C mov R0, #Quo mov R2, #4 acall ShiftX ;;; Quo = 2*Quo + (1 - C); djnz R3, DivLoop ;;; } mov R0, #Fract mov R2, #4 acall ClearX ;;; Fract = 0; mov R3, #32 FractLoop: ;;; for (R3 = 32; R3 > 0; R3--) { acall Div1 cpl C mov R0, #Fract mov R2, #4 acall ShiftX ;;; Fract = 2*Fract + (1 - C); djnz R3, FractLoop ;;; }retMulBy10: ;;; Aux:Fract = 10*Fract; mov Aux, #0 mov R0, #Fract mov R1, #Carry mov R2, #4 MulLoop: mov A, @R0 mov B, #10 mul AB mov @R0, A inc R0 mov @R1, B inc R1 djnz R2, MulLoop mov R0, #(Fract + 1) mov R1, #Carry mov R2, #4 acall AddXretLessX: clr C LessLoop: mov A, @R0 inc R0 subb A, @R1 inc R1 djnz R2, LessLoopretAddX: clr C AddLoop: mov A, @R0 addc A, @R1 inc R1 mov @R0, A inc R0 djnz R2, AddLoopretSubtractX: clr C SubtractLoop: mov A, @R0 subb A, @R1 inc R1 mov @R0, A inc R0 djnz R2, SubtractLoopretClearX: ClearLoop: mov @R0, #0 inc R0 djnz R2, ClearLoopretCopyX: CopyLoop: mov A, @R1 inc R1 mov @R0, A inc R0 djnz R2, CopyLoopretShiftX: ShiftLoop: mov A, @R0 rlc A mov @R0, A inc R0 djnz R2, ShiftLoopretCplX: CplLoop: mov A, @R0 cpl A mov @R0, A inc R0 djnz R2, CplLoopretInc10X: Inc10Loop: inc @R0 mov A, @R0 cjne A, #10, Inc10Break mov @R0, #0 inc R0 djnz R2, Inc10Loop Inc10Break:ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -