📄 math.s
字号:
;;; ARITHMETIC: Integer arithmetic routines.global ClearX: 1: mov @R0, #0; inc R0 djnz R2, 1bretglobal IncX: setb Cglobal CarryX: 1: mov A, @R0 addc A, #0 mov @R0, A; inc R0 djnz R2, 1bretglobal CopyX: 1: mov A, @R1; inc R1 mov @R0, A; inc R0 djnz R2, 1bretglobal SubtractX: clr C 1: mov A, @R0 subb A, @R1; inc R1 mov @R0, A; inc R0 djnz R2, 1bretseg dataglobal SizeX: ds 1global SizeY: ds 1global ArgX: ds 1global ArgY: ds 1global ArgZ: ds 1seg codeglobal MultiplyX: ;;; 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 1f 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 1f mov A, #1 djnz R3, CarryBy1 inc R5 1:djnz SizeX, MultiplyLoopret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -