还是随机数的有关问题,自己写了个转换子程序,却使整个程序不能执行了

还是随机数的问题,自己写了个转换子程序,却使整个程序不能执行了
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