解释一个代码
DATAS SEGMENTDATA1 DB 35H
DATA2 DB 29H
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS ; 段地址伪指令:assume 段寄存器:段名,段寄存器:段名
START: MOV AX,DATAS ; 初始化数据段
MOV DS,AX
MOV AL,DATA1 ; 两数相加
ADD AL,DATA2
PUSH AX ;?
MOV CL,4
SHR AL,CL ;逻辑右移指令,右移4位
ADD AL,30H
CMP AL,39H
JBE OK1 ; 低于或等于转移
ADD AL,07H
OK1: MOV DL,AL
MOV AH,2
INT 21H
POP AX
AND AL,0FH
ADD AL,30H
CMP AL,39H ;比较指令 根据比较结果不同转向不同的程序段
JBE OK2
ADD AL,07H
OK2: MOV DL,AL
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START ;符号地址 start
该段程序中第12行PUSH AX是什么意思,有什么用途?