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

📄 bcd_div.asm

📁 被除数由高到低存于TEMP_STR-->TEMP_STR+4中
💻 ASM
字号:
;被除数由高到低存于TEMP_STR-->TEMP_STR+4中,除数存于TEMP_STR+10-->TEMP_STR+14中,
;运算后商存于TEMP_STR-->TEMP_STR+4中,余数存于TEMP_STR+5-->TEMP_STR+9中
;高字节在前
;方法:移位相除
;10位BCD码除法 XUE:20080729

   TEMP_STR     EQU    30H
                ORG    000
      STAR:     MOV	R0,#TEMP_STR   ;被除数首址
		MOV	R1,#TEMP_STR+10;除数首址
                MOV     R3,#05H        ;被除数字节数
BCD_DIV_A:      MOV     A,R3           ;
                ADD     A,R3           ;
                MOV     R6,A           ;
                ADD     A,R0           ;
                MOV     R0,A           ;
                DEC     R0             ;r0-->被除数的最底位
BCD_DIV_B:      CLR     A              ;
                MOV     R2,#10         ;
BCD_DIV_0:   	XCH	A,@R0		;((r0)-(r0)+2*(r3)-1)<<4,高4位-->R4
		SWAP	A              ;
		XCHD	A,@R0          ;
		XCH	A,@R0          ;
		DEC	R0             ;
     		DJNZ	R2,BCD_DIV_0   ;
                ADD     A,TEMP_STR+9   ;
                MOV     TEMP_STR+9,A   ;被除数最高位移入余数的最低位
                MOV     A,R3           ;
                ADD     A,R3           ;
                ADD     A,R0           ;
                MOV     R0,A           ;
                MOV     A,R1           ;
                ADD     A,R3           ;
                MOV     R1,A           ;
                DEC     R1             ;
  BCD_DIV_C:    MOV     R5,#05H        ;余数减除数
                SETB    C              ;
  BCD_DIV_1:    CLR     A              ;
                ADDC    A,#99H         ;
                SUBB    A,@R1          ;
                ADD     A,@R0          ;
                DA      A              ;
                MOV     @R0,A          ;
                DEC     R0             ;
                DEC     R1             ;
                DJNZ    R5,BCD_DIV_1   ;
                CPL     C              ;
                JC      BCD_DIV_2      ;不够减
                INC     TEMP_STR+4     ;够减被除数的最低位+1
                MOV     A,R3;
                ADD     A,R0;
                MOV     R0,A;
                ADD     A,R3;
                MOV     R1,A;     
                JMP     BCD_DIV_C      ;继续做减法
 BCD_DIV_2:     MOV     A,R3           ;
                ADD     A,R0           ;
                MOV     R0,A           ;
                MOV     A,R3           ;
                ADD     A,R1           ;
                MOV     R1,A           ;
                MOV     R2,#5          ;
 BCD_DIV_3:     MOV     A,@R0          ;余数单元+除数恢复余数单元原值
                ADDC    A,@R1          ;
                DA      A              ;
                MOV     @R0,A          ;
                DEC     R0             ;
                DEC     R1             ;
                DJNZ    R2,BCD_DIV_3   ;
                MOV     A,R3;
                ADD     A,R0;
                MOV     R0,A;
                INC     R1             ;
                DJNZ    R6,BCD_DIV_B   ;继续移位
                JMP     $
           END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -