8086汇编入门求和出问题

求1+2+……+n,和大于五百结束
我的代码不知道哪里出问题了,百位求的一直不对

DATAS SEGMENT
    N DB 0
    SUM DW 0
    PD DW 500
    BW DB 100
    SW DB 10
    RESULT1 DB "SUM=",'$'
    ;RESULT2 DB 10,"N=",'$'
DATAS ENDS
STACKS SEGMENT STACK
STACKS ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
    
        MOV AX,DATAS
        MOV DX,AX
        
    START:
        MOV CX,SUM
        MOV BH,0
        MOV BL,N
    COUNT:
        CMP CX,PD
        JGE OUTPUT
        INC BX
        ADD CX,BX
        JMP COUNT
    OUTPUT:
        MOV AX,SEG RESULT1
        MOV DS,AX
        LEA DX,RESULT1
        MOV AH,09H
        INT 21H

        MOV AX,CX
        DIV BW
        MOV CX,AX

        MOV AH,02H
        MOV DL,CL
        ADD DL,30H
        INT 21H
    EXIT:
        MOV AH,4CH
        INT 21H
CODES ENDS
    END START



基于Monster 组和GPT的调写:

下面是修改后的代码:

DATAS SEGMENT
    N DB 0
    SUM DW 0
    PD DW 500
    BW DB 100
    SW DB 10
    RESULT1 DB "SUM=", '$'
DATAS ENDS

STACKS SEGMENT STACK
    DW 100H DUP(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
    
    START:
        MOV AX, DATAS
        MOV DS, AX
        
        MOV CX, 1 ; 从1开始累加
        MOV BX, 1 ; 当前累加的数
        MOV AL, 0 ; 十位的值
        MOV AH, 0 ; 百位的值
    COUNT:
        ADD SUM, BX ; 累加到SUM中
        CMP SUM, PD ; 判断SUM是否大于500
        JG OUTPUT
        
        MOV AX, SUM
        DIV BW ; 用100来除,获取百位的值
        MOV AH, AL ; 把百位的值保存到AH中
        MOV AL, 0 ; 将AL清零,为计算十位的值做准备
        DIV SW ; 用10来除,获取十位的值
        MOV CL, AH ; 把十位的值保存到CL中
        ADD CL, 30H ; 转换为ASCII码
        MOV DL, AH ; 把百位的值保存到DL中
        ADD DL, 30H ; 转换为ASCII码
        
        MOV AX, SEG RESULT1
        MOV DS, AX
        LEA DX, RESULT1
        MOV AH, 09H
        INT 21H

        ; 输出千位的值
        MOV AH, 02H
        MOV DL, '0'
        INT 21H

        ; 输出百位的值
        MOV AH, 02H
        MOV DL, DH
        INT 21H

        ; 输出十位的值
        MOV AH, 02H
        MOV DL, CL
        INT 21H

        ; 输出个位的值
        MOV AH, 02H
        MOV DL, AH
        INT 21H

        ; 输出换行符
        MOV AH, 02H
        MOV DL, 0AH
        INT 21H
        
        INC BX ; 下一个数
        JMP COUNT
        
    OUTPUT:
        MOV AH, 4CH
        INT 21H

CODES ENDS

END START