DATAS SEGMENT
OP1 DW 0
OP2 DW 0
RESULT DB 20 DUP(?)
CARRY DB ?
BUFSIZE DB 25
ACTCHAR DB ?
CHARTEXT DB 26 DUP(20H);获取储存空间
DB '$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DX,OFFSET BUFSIZE
MOV AH,0AH
INT 21H
MOV DX,OFFSET CHARTEXT ;键入字符串
MOV AH,09H
INT 21H
MOV SI,OFFSET CHARTEXT ;获取字符串
MOV CL,10D
SBB1: ;获取真值OP1
MOV BL,[SI]
CMP BL,30H;比较字符,进行跳转
JB SBB2
CMP BL,39H;比较字符,进行跳转
JA SBB3
SUB BL,30H;减去ASCII码,取得真值
MOV AX,OP1;赋值AX
MUL CL;AX=AL*CL
MOV BH,0
ADD AX,BX
MOV OP1,AX;获取真值赋予OP1,取得被加数
INC SI
JMP SBB1;循环体SBB1
SBB2:
SBB3:
INC SI ;字符位增一,跳过算法符号
SBB4:
MOV BL,[SI]
CMP BL,30H;比较字符,进行跳转
JB SBB5
CMP BL,39H;比较字符,进行跳转
JA SBB6
SUB BL,30H;减去ASCII码,取得真值
MOV AX,OP2;赋值AX
MUL CL;AX=AL*CL
MOV BH,0;BX高位BH清零
ADD AX,BX;真值相加,AX=AX+BX(BL)
MOV OP2,AX;取得真值赋予OP2,取得加数
INC SI
JMP SBB4;循环体SBB4
SBB5:
SBB6:
;加法计数
MOV AX,DATAS
MOV DS,AX
MOV AX,OP1
ADD AX,OP2
MOV BX,0
MOV CL,10D ;取除数
;计算结果
JSB1:
DIV CL
ADD AH,30H ;转为ASCII码
INC BX
MOV SI,OFFSET RESULT
MOV [SI+BX],AH ;赋值数组
MOV AH,0 ;AL取代AX的值,AH取零即可
CMP AX,0H ;判断商是否为零
JNZ JSB1
JZ NEXT
NEXT:
;输出结果,从高位依次输出
JSB2:
MOV SI,OFFSET RESULT
MOV DL,[SI+BX] ;取出数组的数赋值给DL
MOV AH,2
INT 21H
DEC BX
CMP BX,0H
JNZ JSB2
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START