求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
下面是修改后的代码:
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