汇编语言实现2个任意数相加
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
D A TAS SEGMENT
X DB 100 DUP(?)
Y DB 100 DUP(?)
Z DB 100 DUP(?),'$';此处输入数据段代码
DA TAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV BX,0
DA TAX:
MOV AH,01H ;01回显,将数据存放在AL中
INT 21H
CMP AL,'+' ;"+"与输入的数据相减是否为0,即用“+作为X的结束标志”
JZ A1 ;判断,为0时,跳转A1,不为0,执行下一条语句
PUSH AX ;将AX整个16位(包括AH,AL)一起进栈
INC BX ;计数
JMP DATAX ;循环将X的每个位依次输入
A1:
MOV CX,BX
MOV SI,0
A11:
POP AX ;将AX内的数据出栈
MOV X[SI],AL ;将AL的数据保存到X段中
INC SI
LOOP A11 ;依次循环保存
MOV BX,0
DATAY:
MOV AH,01H
INT 21H
CMP AL,'='
JZ A2
PUSH AX
INC BX
JMP DATAY
A2:
MOV CX,BX
MOV SI,0
A12:POP AX
MOV Y[SI],AL
INC SI
LOOP A12 ;同理,此处是以"="作为Y值的结束标志,输入Y值并保存在Y段
RESULT:
CLC
PUSHF ;CF先进栈
MOV CX,100
MOV SI,0
MOV DI,99
A3:
MOV AL,X[SI] ;将X段数据放在AL中
MOV DL,Y[SI] ;将X段数据放在DL中
POPF
ADC AL,DL ;考虑进位运算,AL+DL+CF
AAA
PUSHF
ADD AL,30H ;转换成ASCII码
MOV Z[DI],AL ;将结果从第99位倒着保存到Z段中
INC SI
DEC DI
LOOP A3 ;依次循环将结果保存到Z段
MOV SI,0
A4:
CMP Z[SI],30H
JNZ A5
INC SI
JMP A4 ;从第0位开始判断,看Z[SI]中的数据是否为0
A5:
LEA DX,Z[SI]
MOV AH,09H ;直到不为0的数据那一位是开始显示到第99位
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END ST