div22.asm

来自「通过调试的有用的单片机控制程序」· 汇编 代码 · 共 60 行

ASM
60
字号
;多字节移位相减,商加1的算法。
;主要注意的地方是移位后,其值的比较
;***********************************
DIV22CL   DATA    41H           ;除数低字节
DIV22CH   DATA    40H           ;除数高字节
DIV22BCL        DATA    43H     ;被除数低字节
DIV22BCH        DATA    42H     ;被除数高字节
DIVYUSHUL       DATA    45H     ;余数低字节
DIVYUSHUH       DATA    44H     ;余数高字节
DIV22SHANGL     DATA    47H     ;商低字节
DIV22SHANGH     DATA    46H     ;商高字节
YIWEICOUNT      EQU     16      ;位数
ORG     0000H
DIV22:  MOV     SP,#67H
        MOV     A,#0            ;初始化单元
        MOV     DIVYUSHUL,A
        MOV     DIVYUSHUH,A
        MOV     DIV22SHANGL,A
        MOV     DIV22SHANGH,A
        MOV     A,DIV22BCH      ;判断益处
        SUBB    A,DIV22CH
        JNC     DIVS 
        SETB    OV
        AJMP    DIVEXIT       
DIVS:   MOV     R6,#YIWEICOUNT  ;
DIVSTR: CLR     C               ;商的算法
        MOV     A,DIV22SHANGL
        RLC     A
        MOV     DIV22SHANGL,A
        MOV     A,DIV22SHANGH
        RLC     A
        MOV     DIV22SHANGH,A
        CLR     C               ;移位判断
        MOV     A,DIV22BCL
        RLC     A
        MOV     DIV22BCL,A
        MOV     A,DIV22BCH
        RLC     A
        MOV     DIV22BCH,A
        MOV     A,DIVYUSHUL
        RLC     A
        MOV     DIVYUSHUL,A
        MOV     A,DIVYUSHUH
        RLC     A
        MOV     DIVYUSHUH,A
        SUBB    A,DIV22CH
        JC      LOOP            ;判断算法:高字节-高字节=负数吗?是则进行下次循环
        CLR     C
        MOV     DIVYUSHUH,A
        INC     DIV22SHANGL        
        MOV     A,DIVYUSHUL
        SUBB    A,DIV22CL
        MOV     DIVYUSHUL,A     
        JNC     LOOP            ;低字节是否要借位,是则余数减1        
        DEC     DIVYUSHUH
LOOP:   DJNZ    R6,DIVSTR
DIVEXIT: SJMP    $
         END
        
        

⌨️ 快捷键说明

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