+ -
当前位置:首页 → 问答吧 → 各位大侠帮忙看下。。。

各位大侠帮忙看下。。。

时间:2011-04-06

来源:互联网

实验内容是:计算1+2+3+...+n=?,其中n通过键盘输入,累加和小于2的16次方。
程序如下:DATA SEGMENT
INF1 DB"Please input a number(1-65535):$"
IBUF DB 7,0,6 DUP(?)
OBUF DB 6 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
  MOV DS,AX
  MOV DX,OFFSET INF1
  MOV AH,09H
  INT 21H
  MOV DX,OFFSET IBUF
  MOV AH,0AH
  INT 21H
  MOV CL,IBUF+1
  MOV CH,0
  MOV SI,OFFSET IBUF+2
  MOV AX,0
AGAIN:MOV DX,10
  MUL DX
  AND BYTE PTR[SI],0FH
  ADD AL,[SI]
  ADC AH,0
  INC SI
  LOOP AGAIN
  MOV AH,4CH
  INT 21H
  MOV CX,AX
  MOV AX,0
  MOV BX,1
LOOP2:ADD AX,BX
  INC BX
  LOOP LOOP2
  MOV BX,OFFSET OBUF+5
  MOV BYTE PTR[BX],'$'
  MOV CX,10
LOOP1:MOV DX,0
  DIV CX
  ADD DL,30H
  DEC BX
  MOV [BX],DL
  OR AX,AX
  JNZ LOOP1
  MOV DX,BX
  MOV AH,09H
  INT 21H
  MOV AH,4CH
  INT 21H
CODE ENDS
  END START  
运行结果是:
  please input a number(1-65535):3
  press any key to continue
但是并没有得到想要的结果啊?怎么弄的呢?  

作者: a1178a   发布时间: 2011-04-06

累加和根据这个公式((1+n)*n)/2算比较简单。

作者: masmaster   发布时间: 2011-04-06

AGAIN:MOV DX,10
  MUL DX
  AND BYTE PTR[SI],0FH
  ADD AL,[SI]
  ADC AH,0
  INC SI
  LOOP AGAIN
  MOV AH,4CH
  INT 21H ;到这里已经结束
  MOV CX,AX

作者: shzhfu   发布时间: 2011-04-06