原创 三星S3C9488的汇编数学运算子程序

2007-1-27 21:55 3245 9 9 分类: MCU/ 嵌入式

;          ACCAHI   ACCALO
;   *      ACCBHI   ACCBLO
;-------------------------
;          AHI,ALO,BHI,BLO
DD_MULT:
           CLR       ACCCHI
           CLR       ACCCLO        
           LD        R8,#16           
           LD        R9,ACCBHI
           LD        R10,ACCBLO
           CLR       ACCBHI
           CLR       ACCBLO
           RCF    
COMUT:     RRC       R9
           RRC       R10
           JR        NC,NEXT_P1
           ADD       ACCBLO,ACCALO
           ADC       ACCBHI,ACCAHI
NEXT_P1:   RRC       ACCBHI
           RRC       ACCBLO
           RRC       ACCCHI
           RRC       ACCCLO            
           DEC       R8
           JR        NZ,COMUT
           LD        ACCAHI,ACCBHI
           LD        ACCALO,ACCBLO          
           LD        ACCBHI,ACCCHI
           LD        ACCBLO,ACCCLO
           RET                   


 


;    ACCAHI  ACCALO    ACCBHI  ACCBLO
;  /                   ACCCHI  ACCCLO
;---------------------------------
;                    ACCAHI  ACCALO
;功能描述:       双字除法  AB/C
DD_DIV:         LD     R2,#16
                CP     ACCCHI,#00H
                JR     NE,SURE_DIV
                CP     ACCCLO,#00H
                JR     NE,SURE_DIV
                CLR    ACCAHI
                CLR    ACCALO
                RET
SURE_DIV:  
DIVD2:          RCF
                RLC    ACCBLO
                RLC    ACCBHI
                RLC    ACCALO
                RLC    ACCAHI              
                JR     C,NOT_MATHC
                OR     SYSTEM_FLAG,#MATHC                                                     
                JR     SUB_SURE               
NOT_MATHC:      AND    SYSTEM_FLAG,#MATHC_CLR


SUB_SURE:
                RCF
                LD     R1,ACCALO
                SUB    R1,ACCCLO
                LD     R0,ACCAHI
                SBC    R0,ACCCHI
                JR     C,IF_DIVD3
               
NODIVD3:        LD     ACCAHI,R0
                LD     ACCALO,R1
                INC    ACCBLO
                JR     DIVD3
IF_DIVD3:       TM     SYSTEM_FLAG,#MATHC
                JR     Z,NODIVD3
DIVD3:          DEC    R2                                        
                JR     NZ,DIVD2
                LD     ACCAHI,ACCBHI
                LD     ACCALO,ACCBLO
                RET



;数制转换 
;*********************************************************************************
;NAME:   HEX2B_TOBCD
;INPUT:   R11(H),R10(L)(HEX)
;FUNCTION:  双字节十六进制数转换为BCD


;USING RESOURCE: R1,R0,R7,R4,R3,R5
;OUTPUT:  R5,R4,R3,R2,R1
;*********************************************************************************
HEX_BCD:
               CLR      R5
               CLR      R4
               CLR      R3
               CLR      R2
               CLR      R1
               LD       R7,R10
               LD       R8,R11
               LD       R9,#27H                                
LOOP_10000:    SUB      R7,#10H
               SBC      R8,R9
               JR       C,LOOP_10000_ADD
               INC      R5
               JR       LOOP_10000                             
LOOP_10000_ADD:ADD      R7,#10H
               ADC      R8,#27H
               LD       R9,#03H
LOOP_1000:     SUB      R7,#0E8H
               SBC      R8,R9
               JR       C,LOOP_1000_ADD
               INC      R4
               JR      LOOP_1000
LOOP_1000_ADD: ADD      R7,#0E8H 
               ADC      R8,#03H
               LD       R9,#00H
LOOP_100:      SUB      R7,#64H
               SBC      R8,R9
               JR       C,LOOP_100_ADD
               INC      R3
               JR       LOOP_100                                        
LOOP_100_ADD:  ADD      R7,#64H              
LOOP_10:       SUB      R7,#0AH
               LD       R8,R7                
               JR       C,LOOP_10_ADD
               INC      R2
               JR       LOOP_10
LOOP_10_ADD:   ADD      R7,#0AH
               LD       R1,R7
               RET     
              
DB_SUB:
                SCF
                SUB     ACCALO,ACCBLO
                SBC     ACCAHI,ACCBHI
                RET
                                            
;R0R1 COMPARE WITH  R2R3
;If R0R1>=R2R3   C="0" else c="1"


DB_CMP:         CP    R0,R2
                JR    ULT,CMP_SETC               
                JR    UGT,CMP_CLRC
                CP    R1,R3
                JR    UGE,CMP_CLRC               
CMP_SETC:       SCF
                JR    CMP_OVER
CMP_CLRC:       RCF                     
CMP_OVER:
                RET         



READ_ROM:    
               ;DEC     BUFF_PT
               LD      R2,BUFF_PT
               RL      R2
               ADD     R1,R2
               LDC     R2,@RR0
               LD      ACCAHI,R2
               INC     R1
               LDC     R2,@RR0
               LD      ACCALO,R2
               RET   


;INPUT     R8
;OUTPUT    R8              
SWAPDATA:      RR      R8
               RR      R8
               RR      R8
               RR      R8
               RET
READ_BUFF:
                LD              R1,BUFF_POINT
                LD              R3,#DATA_BUFFER
                ADD             R3,R1
                LD              ACCBLO,@R3
                NOP
                INC             R1
                LD              R3,#DATA_BUFFER
                ADD             R3,R1
                LD              ACCBHI,@R3
                RET
WRITE_BUFF:
                LD              R1,BUFF_POINT
                LD              R3,#DATA_BUFFER
                ADD              R3,R1
              
                LD              @R3, ACCBLO
                NOP
                INC             R1
                LD              R3,#DATA_BUFFER
                ADD             R3,R1
                LD              @R3, ACCBHI
                RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;C=1     B<A
;C=0,MATHC=0  B>A
;MATHC=A     B="A"



ASK_MIN:
                LD              ACCAHI,#0FFH
                LD              ACCALO,#0FFH
ASK_MIN_NEXT:
                CALL            READ_BUFF
                CP              ACCBHI,#0
                JR              NZ,COMP_SURE
                CP              ACCBLO,#0
                JR              Z,THIS_MIN               
               
COMP_SURE:      LD              R0,ACCAHI
                LD              R1,ACCALO
                LD              R2,ACCBHI
                LD              R3,ACCBLO
                CALL            DB_CMP
                JR              C,MIN_NEXT_PT
THIS_MIN:               
                LD              ACCAHI,ACCBHI
                LD              ACCALO,ACCBLO
                LD              MIN_PT,BUFF_POINT
MIN_NEXT_PT:
                INC             BUFF_POINT
                INC             BUFF_POINT
                CP              BUFF_POINT,#22
                JR              ULE,ASK_MIN_NEXT
                RET
;------------------------------------
SORT:     
                CLR      LOOP_CNT                 
SORT_NEXT:      
                
                 LD      BUFF_POINT,LOOP_CNT 
                 CALL    ASK_MIN                           
                 LD      BUFF_POINT,LOOP_CNT
                 CALL    READ_BUFF
                 LD      ACCALO,ACCBLO
                 LD      ACCAHI,ACCBHI
                 LD      BUFF_POINT,MIN_PT
                 CALL    READ_BUFF
                 LD      BUFF_POINT,LOOP_CNT
                 CALL    WRITE_BUFF
                 LD      BUFF_POINT,MIN_PT
                 LD      ACCBHI,ACCAHI   
                 LD      ACCBLO,ACCALO
                 CALL    WRITE_BUFF
                 NOP
                 INC     LOOP_CNT
                 INC     LOOP_CNT
                 CP      LOOP_CNT,#22
                 JR      ULT,SORT_NEXT
SORT_ADBUF_OVER:          
                RET
                                       
;DELAY ABOAT 1MS               
DELAYXMS:
                LD              R0,#0B0H
ECHO_FILTER:
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                DEC             R0           
                JR              NZ,ECHO_FILTER          
                RET
               
                ;DELAY 100MS
DELAY100MS:
                LD              R9,#80
DELAY100MS_LOOP:
                CALL            DELAYXMS
                DEC             R9
                JR              NZ,DELAY100MS_LOOP
                RET
DELAY1S:
                CALL            DELAY100MS
                CALL            DELAY100MS
                CALL            DELAY100MS
                CALL            DELAY100MS
                RET
DELAY_20MS:
                LD              R9,#20
DELAY_20MS_LOOP:
                CALL            DELAYXMS
                DEC             R9
                JR              NZ,DELAY_20MS_LOOP
                RET   

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /3 下一条