有几位的结果不对,输入不同个数的0,会在不同位置上出现数字……
程序:
DATA SEGMENT
STRING1 DB 10,?,10 DUP('0');高位在后低位在前
STRING2 DB 10,?,10 DUP('0')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,STRING1
MOV AH,10
INT 21H
MOV AH,2H
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
LEA DX,STRING2
MOV AH,10
INT 21H
MOV AH,2H
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
LEA SI,STRING1
LEA DI,STRING2
ADD SI,2
ADD DI,2
MOV CX,10
MOV AH,0H
L1:MOV AL,DS:[SI]
INC SI
SAHF
ADC AL,[DI]
AAA
LAHF
OR AL,30H
MOV ES:[DI],AL
INC DI
LOOP L1
AND AH,01H
OR AH,30H
MOV [DI],AH
MOV AH,02H
MOV CX,10
L2:MOV DL,[DI]
INT 21H
DEC DI
LOOP L2
MOV AH,4CH
INT 21H
CODE ENDS
END START
------解决思路----------------------
0ah 功能输入的字符串,末尾有个回车 0dh 字节的;数值的顺序也不对吧,输入的和加运算的关系反了;结果放在 STRING2 里,那就应多定义一个字节吧,输出时也要多一个。
------解决思路----------------------
楼主写的程序堪称精美,本人仔细阅读了楼主的程序。
略做修改如下(未改变计算顺序,仍然是高位在后,低位在前):
修改后,程序实现了第一个加数的位数可以和第二个加数的位数不同。和的位数以位数多的加数的位数为准。
由于本人水平有限,还请楼主和各位高手批评指正。
DATA SEGMENT
STRING1 DB 10,?,10 DUP('0');高位在后低位在前
STRING2 DB 10,?,10 DUP('0')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,STRING1
MOV AH,10
INT 21H
MOV AH,2H
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
LEA DX,STRING2
MOV AH,10
INT 21H
MOV AH,2H
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
LEA SI,STRING1
LEA DI,STRING2
ADD SI,2
ADD DI,2
MOV AH,0H
MOV BH,0H
XOR DX,DX
MOV AL,[SI-1]
MOV BL,[DI-1]
CMP AL,BL
JB BL1
PUSH AX
SUB AX,BX
MOV CX,AX
ADD DI,BX
BLCZ1:
MOV BYTE PTR[DI],0
INC DI
LOOP BLCZ1
POP CX
LEA DI,STRING2
ADD DI,2
JMP L1
BL1:
PUSH BX
SUB BX,AX
MOV CX,BX
ADD SI,AX
BLCZ2:
MOV BYTE PTR[SI],0
INC SI
LOOP BLCZ2
POP CX
LEA SI,STRING1
ADD SI,2
L1:
MOV AL,DS:[SI]
SAHF
ADC AL,[DI]
AAA
LAHF
OR AL,30H
MOV ES:[DI],AL
INC SI
INC DI
INC DX
LOOP L1
AND AH,01H
OR AH,30H
MOV [DI],AH
MOV AH,02H
INC DX
MOV CX,DX
L2:MOV DL,[DI]
INT 21H
DEC DI
LOOP L2
MOV AH,4CH
INT 21H
CODE ENDS
END START