关于一个加法程序
DATAS SEGMENTX DB 100 DUP(30H)
Y DB 100 DUP(30H)
Z DB 100 DUP(30H)
A DB 100 DUP(30H)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV BX,0
X1:
INC BX
MOV AH,01H
INT 21H
MOV X[BX-1],AL;将输入的数存入X[BX-1]内存单元
CMP AL,'+'
JNE X1;判断输入是否为‘+’,不是则继续输入
MOV DI,BX;是等号即将此时BX存入DI
X2:
INC BX;继续使BX加1
MOV AH,01H
INT 21H
MOV X[BX-1],AL;将输入的数存入X[BX-1]内存单元
CMP AL,'='
JNE X2
MOV SI,BX;是等号即将此时BX存入SI,作计数用,如输入‘123+45678=’后,SI等于10
MOV BX,99;然后将99存入BX后再转入X3
X3:
MOV DL,X[SI-2];SI-2可使内存单元变为X[08H],即存放了数字‘8’的单元
MOV Y[BX],DL;因BX置99,将DL传给Y[BX],即DL给Y段的最后一个单元
DEC SI
DEC BX;SI,BX减1,继续将45678倒序放入Y段中最末尾
CMP DL,X[DI];判断是否输入到最后一位数,若以输入到最后一位,跳转
JNE X3
MOV BX,99
X4:
MOV DL,X[SI-4]
MOV Z[BX],DL
DEC SI
DEC BX
CMP DL,X[00h]
JNE X4
CLC
PUSHF
MOV BX,100
X5:
DEC BX
MOV AL,Y[BX]
SUB AL,30H
MOV DL,Z[BX];X5功能即将Y段与Z段每一个对应位置都相加,结果放到A段中
SUB DL,30H
POPF
ADC AL,DL
AAA
PUSHF
MOV A[BX],AL
CMP BX,0
JG X5
MOV BX,0
X6: INC BX
MOV AL,A[BX-1];检索A段,将第一个内容不是0的单元的地址传给SI
CMP AL,0
JZ X6
MOV SI,BX
X7:
MOV DL,A[SI-1]
ADD DL,30H
MOV AH,02H;从A[SI]开始输出结果,只要SI小于30,循环就进行,知道输出完结果
INT 21H
INC SI
CMP SI,101
JL X7
MOV AH,4CH
INT 21H
CODES ENDS
END START
自学汇编,程序是让用户任意输入两个任意位数进行相加,最后输出,但是多次调试仍然不对,所以请大家帮帮忙找找错误在哪里,感激不尽!