汇编高手来帮忙,从1累加到100的程序.

我的答案是DATA SEGMENT
BUF DB 1,2,3,4,.......,100
BUF2 DW?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUF
MOV CX,100
KK: ADD AX,[SI]
INC SI
LOOP KK
MOV BUF2,AX
MOV AH,4CH
INT 21H
LODE ENDS
END START
可是运行了之后却有4个错误,我怎么也找不到,高手帮忙看看。急啊!!最好把理由告诉下。鄙人不胜感谢。

如果你不嫌麻烦把1,2,3,4,.......,100 这一百个数补齐,?号前加空格再修改倒数第二行LODE ENDS为CODE ENDS的话,你的程序编译通过,但我告诉你你的程序还是有问题,你定义的BUFF存放1到~100是字节型的单元,但你加的时候ADD AX,[SI] 取的数是两个单元的字,所以原来的数就不再是1到~100了,所以你还要改,把BUFF定义为DW字,后面取数时后移不是INC SI而是ADD SI,2取一个字大小的数据,但我想说其实最主要的问题是你的程序根本就没必要写这么多。。。
真正实现1加到100只需:
MOV CX,100
NEXT:
ADD SUM,CX;定义SUM=0
LOOP NEXT

完整程序加输出:
;程序实现功能:从1到100进行累加,并把计算结果保存在[SUM]单元里
DATAS SEGMENT
SUM DW 0
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX

MOV CX,100
NEXT:
ADD SUM,CX
LOOP NEXT

CALL DISPLAY

MOV AH,4CH
INT 21H
DISPLAY PROC NEAR
;以下代码段实现输出正整型数
;**************************************************
MOV AX,SUM
MOV BX,10
CONTINUE:
CWD
DIV BX
PUSH DX
INC CX
CMP AX,0
JNZ CONTINUE

NEXT1:
POP DX
AND DX,0FFH
ADD DL,30H
MOV AH,02
INT 21H
LOOP NEXT1
;**************************************************
RET
DISPLAY ENDP
CODES ENDS

END START
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-06
DATA SEGMENT
BUF2 DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,0
MOV CX,100
KK: ADD AX,CX
LOOP KK
MOV BUF2,AX

MOV AH,4CH
INT 21H
CODE ENDS
END START
这样就行了。
1、最开始没有DATA SEGMENT
2、BUF DB 1,2,3,4,.......,100 这一行,我编译不过
3、BUF2 DW?。。问号前面要有空格。。BUF2 DW ?
4、LODE ENDS。。。是code ends
5、MOV AX,DATA MOV DS,AX。之后要mov ax,0
6、完全没有必要像你那样做。本回答被提问者和网友采纳