⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 math.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 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 + -