汇编语言程序设计的具体细节

用代码块功能插入代码,请勿粘贴截图

DATA SEGMENT
BUF DB 73H,34H,56H ;BCD码
MAX DB ?
MSG1 DB 'the largest unsigned integer is:$'
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START:
MOV AX,DATA
MOV DS,AX
MOV AL,BUF
CMP AL,BUF+1
JA SWAPAB
MOV AL,BUF+1
SWAPAB: CMP AL,BUF+2
JA SWAPAC
MOV AL,BUF+2
SWAPAC: MOV MAX,AL

    LEA DX,MSG1
    MOV AH,09H
    INT 21H  ;输出提示信息
    
    PUSH AX
    MOV BL,AL
    MOV BH,00H
    MOV CL,4 ;设置移位
    SHR BL,CL  
    ADD BL,30H  ;获取7的ASCII码
    
    MOV DL,BL
    MOV AH,02H
    INT 21H   ;输出7

    POP AX
    AND AL,0FH
    ADD AL,30H  ;获取3的ASCII码
    MOV DL,AL
    MOV AH,02H    
    INT 21H   ;输出3

    MOV AH,4CH
    INT 21H    

CODE ENDS
END START

我的解答思路和尝试过的方法

我想问下此处的PUSH AX 和POP AX起到的作用是什么,是保存数据吗?

是的!
因为 AX 里面 含了 数值 73H,
而你用它来运算, 取出了 高位7之后,
AX就不再是 73H了
这时, POP AX -> 就复原 AX = 73H