📄 math.asm
字号:
; ***************************************************************************
; * Project : Electronic Dictionary *
; * Date : 2003.9 *
; * File Name : MATH.ASM *
; ***************************************************************************
INCLUDE ST2202.REG
; ***************************************************************************
; * BYTE MULT BYTE *
; * MATH_RESULT_0 = MATH_OPER0_L * MATH_OPER1_L *
; ***************************************************************************
PUBLIC _byte_mult_byte
_byte_mult_byte:
STZ <_MATH_RESULT_0 ; _MATH_RESULT_0 = 0;
LDX #$08 ;
?byte_mult_byte0: ;
LSR <_MATH_OPER1_L ;
BCC ?byte_mult_byte1 ;
CLC ;
LDA <_MATH_RESULT_0 ;
ADC <_MATH_OPER0_L ;
STA <_MATH_RESULT_0 ;
?byte_mult_byte1: ;
ASL <_MATH_OPER0_L ;
DEX ;
BNE ?byte_mult_byte0 ;
RTS ;
; ***************************************************************************
; * WORD MULT WORD *
; ***************************************************************************
PUBLIC __uint_mult_char
__uint_mult_char: ;
STZ <_MATH_RESULT_0 ; MATH_RESULT_0 = 0;
STZ <_MATH_RESULT_1 ; MATH_RESULT_1 = 0;
;
LDX #$08 ; X = 8;
?_uint_mult_char0: ; while (X--)
; {
LSR <_MATH_OPER1_L ; <MATH_OPER1_L>>=1;
BCC ?_uint_mult_char1 ; if (c)
; {
CLC ;
LDA <_MATH_RESULT_0 ;
ADC <_MATH_OPER0_L ;
STA <_MATH_RESULT_0 ;
LDA <_MATH_RESULT_1 ;
ADC <_MATH_OPER0_H ;
STA <_MATH_RESULT_1 ; <MATH_RESULT += <MATH_OPER0;
LDA <_MATH_RESULT_2 ;
ADC <_MATH_OPER0_H+1 ;
STA <_MATH_RESULT_2 ;
; }
?_uint_mult_char1: ;
;
ASL <_MATH_OPER0_L ;
ROL <_MATH_OPER0_H ; <MATH_OPER0<<=1;
ROL <_MATH_OPER0_H+1 ;
;
DEX ;
BNE ?_uint_mult_char0 ; }
;
RTS ;
; ***************************************************************************
PUBLIC __uint_mult_uint
__uint_mult_uint: ;
STZ <_MATH_RESULT_0 ;
STZ <_MATH_RESULT_1 ;
STZ <_MATH_RESULT_2 ;
STZ <_MATH_RESULT_3 ; <MATH_RESULT = 0;
LDX #$10 ;
?_uint_mult_uint0: ;
LSR <_MATH_OPER1_H ;
ROR <_MATH_OPER1_L ;
BCC ?_uint_mult_uint1 ;
CLC ;
LDA <_MATH_RESULT_0 ;
ADC <_MATH_OPER0_L ;
STA <_MATH_RESULT_0 ;
LDA <_MATH_RESULT_1 ;
ADC <_MATH_OPER0_H ;
STA <_MATH_RESULT_1 ;
LDA <_MATH_RESULT_2 ;
ADC <_MATH_OPER0_H+1 ;
STA <_MATH_RESULT_2 ;
LDA <_MATH_RESULT_3 ;
ADC <_MATH_OPER0_H+2 ;
STA <_MATH_RESULT_3 ;
?_uint_mult_uint1: ;
ASL <_MATH_OPER0_L ;
ROL <_MATH_OPER0_H ;
ROL <_MATH_OPER0_H+1 ;
ROL <_MATH_OPER0_H+2 ;
DEX ;
BNE ?_uint_mult_uint0 ;
RTS
; ***************************************************************************
; * BYTE DIV BYTE *
; ***************************************************************************
PUBLIC _byte_div_byte
_byte_div_byte:
LDA <_MATH_OPER1_L ;
STA <_MATH_RESULT_2 ;
STZ <_MATH_OPER1_L ;
LDX #$08 ;
?byte_div_byte0: ;
CLC ;
LDA <_MATH_OPER1_L ;
ADC <_MATH_OPER1_L ;
STA <_MATH_OPER1_L ;
ASL <_MATH_OPER0_L ;
BCC ?byte_div_byte1 ;
INC <_MATH_OPER1_L ;
?byte_div_byte1: ;
SEC ;
LDA <_MATH_OPER1_L ;
SBC <_MATH_RESULT_2 ;
STA <_MATH_OPER1_L ;
BCS ?byte_div_byte3 ;
CLC ;
LDA <_MATH_OPER1_L ;
ADC <_MATH_RESULT_2 ;
STA <_MATH_OPER1_L ;
BRA ?byte_div_byte4 ;
?byte_div_byte3:
INC <_MATH_OPER0_L ;
?byte_div_byte4:
DEX ;
BNE ?byte_div_byte0 ;
RTS ;
; ***************************************************************************
PUBLIC __uint_div_uint
__uint_div_uint: ;
LDA <_MATH_OPER1_H ;
STA <_MATH_RESULT_3 ; LD B,D
LDA <_MATH_OPER1_L ;
STA <_MATH_RESULT_2 ; LD C,E
STZ <_MATH_OPER1_L ;
STZ <_MATH_OPER1_H ; LD HL,0000H
LDX #$10 ; LD A,10H
?_uint_div_uint0: ;?_uint_div_uint0:
CLC ;
LDA <_MATH_OPER1_L ;
ADC <_MATH_OPER1_L ;
STA <_MATH_OPER1_L ;
LDA <_MATH_OPER1_H ;
ADC <_MATH_OPER1_H ;
STA <_MATH_OPER1_H ; ADD HL,HL
ASL <_MATH_OPER0_L ; SLA E
ROL <_MATH_OPER0_H ; RL D
BCC ?_uint_div_uint1 ; JP NC,0031
INC <_MATH_OPER1_L ; INC L
?_uint_div_uint1: ;
SEC ;
LDA <_MATH_OPER1_L ;
SBC <_MATH_RESULT_2 ;
STA <_MATH_OPER1_L ;
LDA <_MATH_OPER1_H ; SBC HL,BC
SBC <_MATH_RESULT_3 ;
STA <_MATH_OPER1_H ;
BCS ?_uint_div_uint3 ; JP NC,003A
CLC ;
LDA <_MATH_OPER1_L ;
ADC <_MATH_RESULT_2 ;
STA <_MATH_OPER1_L ;
LDA <_MATH_OPER1_H ;
ADC <_MATH_RESULT_3 ;
STA <_MATH_OPER1_H ; ADD HL,BC
BRA ?_uint_div_uint4 ; JP 003B
?_uint_div_uint3:
INC <_MATH_OPER0_L ; INC E
?_uint_div_uint4:
DEX ; DEC A
BNE ?_uint_div_uint0 ; JP NZ,0027
RTS
; ********************************* THE END *********************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -