📄 math.lib
字号:
;;; ARITHMETIC: Integer arithmetic routines.ClearX: ClearLoop: mov @R0, #0 inc R0 djnz R2, ClearLoopretIncX: setb CCarryX: CarryLoop: mov A, @R0 addc A, #0 mov @R0, A inc R0 djnz R2, CarryLoopretCopyX: CopyLoop: mov A, @R1 inc R1 mov @R0, A inc R0 djnz R2, CopyLoopretSubtractX: clr C SubtractLoop: mov A, @R0 subb A, @R1 inc R1 mov @R0, A inc R0 djnz R2, SubtractLoopretSizeX equ 14h ;;; 1 byteSizeY equ 15h ;;; 1 byteArgX equ 16h ;;; 1 byteArgY equ 17h ;;; 1 byteArgZ equ 18h ;;; 1 byteMultiplyX: ;;; The new multiplication algorithm R5 is the carry. mov R5, #0MultiplyLoop: mov R0, ArgX mov A, @R0 mov R2, A inc ArgX ;;; R2 = *ArgX++; mov R0, ArgZ inc ArgZ ;;; R0 = ArgZ++; mov R1, ArgY mov R3, SizeY mov R4, #0 jz BreakCarry MulNibble: mov A, R2 mov B, @R1 inc R1 mul AB ;;; B:A = *R1++ * R2; add A, R4 xch A, B addc A, #0 xch A, B ;;; B:A += R4; add A, @R0 mov @R0, A inc R0 mov A, B addc A, #0 mov R4, A ;;; R4:*R0++ = B:A + *R0; djnz R3, MulNibble mov R3, SizeX mov A, R4 CarryBy1: add A, @R0 mov @R0, A inc R0 ;;; C:*R0++ += *R0 + A; jnc BreakCarry mov A, #1 djnz R3, CarryBy1 inc R5BreakCarry:djnz SizeX, MultiplyLoopret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -