math.lib

来自「一个C style Assembler的source code」· LIB 代码 · 共 87 行

LIB
87
字号
;;; 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 + =
减小字号Ctrl + -
显示快捷键?