DATA SEGMENT
CC DB '+'
ww db '-'
GG DB '='
II DB 0DH,0AH,'$'
AA DB 5 DUP(?)
www dw 0
ghh db '0',0dh,0ah,'$'
bnm dw 0
DATA ENDS
STACK SEGMENT
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV CX,20
CALL RAND ;产生一随机数
CALL MCAT ;将随机数转换为16进制表示的ASCII码字符
MOV AX,BX
PUSH AX
CMP www,0 ;WWW=0?
JE A1 ;执行'+'
CMP www,1 ;www=1?
JE A2 ;执行'-'
A1: MOV DL,CC ;显示'+'
MOV AH,2
INT 21H
CALL RAND ;产生另一随机数
add bx,0fh
CALL MCAT ;将随机数转换为16进制表示的ASCII码字符
MOV DL,GG ;显示'='
MOV AH,2
INT 21H
POP AX
ADD AX,BX
cmp ax,0
jne yjw1
lea dx,ghh
mov ah,9
int 21h
jmp qq1
yjw1: JMP B1
A2: MOV DL,WW ;显示'-'
MOV AH,2
INT 21H
mov cx,65535
mai1: loop mai1
CALL RAND1
CALL MCAT
MOV DL,GG
MOV AH,2
INT 21H
POP AX
Sbb AX,BX
cmp ax,0
jne yjw2
lea dx,ghh
mov ah,9
int 21h
jmp qq1
yjw2: JMP B1
B1: MOV BX,AX
CALL MCAT
lea DX,II
MOV AH,9
INT 21H
QQ1: MOV AH,4CH
INT 21H
MCAT PROC ;将随机数转换为16进制表示的ASCII码字符子程序
PUSH AX
push bx
PUSH CX
PUSH DX
MOV AX,BX ;判断是加还是减
MOV DL,5
DIV DL
CMP AH,3
JAE VB1
MOV WWW,1
JMP VN1
VB1:MOV WWW,0
VN1:MOV CL,4 ;转换,以及输出
SHR BL,CL
AND BL,0FH
CMP BL,9
JA S1
ADD BL,30H
JMP MM1
S1:SUB BL,9
ADD BL,40H
MM1:MOV AA,BL
MOV AA+1,'$'
LEA DX,AA
MOV AH,9
INT 21H
POP BX
AND BL,0FH
CMP BL,9
JA S2
ADD BL,30H
JMP MM2
S2:SUB BL,9
ADD BL,40H
MM2:MOV AA+1,BL
MOV AA+2,'$'
LEA DX,AA+1
MOV AH,9
INT 21H
POP AX
POP BX
POP CX
POP DX
RET
MCAT ENDP
RAND PROC
PUSH CX
PUSH DX
PUSH AX
STI
MOV AH,0 ;读时钟计数器值
INT 1AH
MOV AX,DX ;清高6位
AND AH,3
MOV DL,101 ;除101,产生0~100余数
DIV DL
MOV BL,AH ;余数存BX,作随机数
POP AX
POP DX
POP CX
RET
RAND ENDP
RAND1 PROC
PUSH CX
PUSH DX
PUSH AX