⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 03c.asm

📁 录音子程序 mov dx,offset news_2 显示放音提示
💻 ASM
字号:
DATA SEGMENT
ORG 1000H
H1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
H2 DB 1 DUP(?)
TIP DB 13,10,"The input number must be a HEX (0~F), press <ESC> to quit.",13,10,'$'
ERR DB 13,10,"The input number must be a HEX (0~F).",13,10,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START PROC FAR
STT:PUSH DS
    SUB AX,AX
    PUSH AX
;==============================
    MOV AX,DATA
    MOV DS,AX

    LEA DX,TIP           ;打印TIP信息
    MOV AH,09H
    INT 21H
    
BEGIN:
    MOV DL,13            ;打印换行
    MOV AH,2
    INT 21H

    MOV DL,10            ;打印回行首
    INT 21H
    
    MOV AH,1             ;等待从键盘输入
    INT 21H

    MOV SI,OFFSET H2     ;保护输入
    MOV [SI],AL

    CMP AL,27            ;如果按下<ESC>键,跳至QUIT
    JZ QUIT

    CALL DISPLAY0        ;调用DISPLAY0子程序
    
    CALL ASCII2HEX       ;调用ASCII2HEX子程序

    CMP AL,0FFH          ;如果AL不等于FF(出错码)则跳至CORRECT
    JNZ CORRECT
    LEA DX,ERR           ;打印错误信息
    MOV AH,09H
    INT 21H
    JMP FINISH           ;跳至FINISH
    
CORRECT:
    MOV BX,OFFSET H1     ;查表
    XLAT

    MOV AH,0
    MOV BX,0
    MOV BL,AL            ;分离AL的高4位和低4位,分离后AL中为高4位,BL中为低4位
    AND AL,0F0H
    MOV CL,4
    SHR AL,CL
    AND BL,0FH

    
    CALL HEX2ASCII       ;调用HEX2ASCII
    CALL DISPLAY         ;调用DISPLAY子程序
    MOV AL,BL
    CALL HEX2ASCII
    CALL DISPLAY

    MOV DL,72            ;打印字母"H"
    MOV AH,2
    INT 21H

    JMP FINISH

QUIT:CALL ESCAPE          ;调用ESCAPE子程序

FINISH:
    JMP BEGIN
;==============================
    RET
START ENDP

ASCII2HEX PROC NEAR
    CMP AL,30H  ;ASCII转16进制子程序
    JB ERROR    ;如果AL<0则跳至ERROR
    CMP AL,39H
    JBE NUMBER  ;如果AL<=9则跳至NUMBER
    CMP AL,46H
    JA ERROR    ;如果AL>F则跳至ERROR

    SUB AL,07H

NUMBER:
    SUB AL,30H
    JMP DONE

ERROR:
    MOV AL,0FFH

DONE:
    RET
ASCII2HEX ENDP

HEX2ASCII PROC NEAR
    CLC           ;16进制转ASCII子程序
    DAA
    ADD AL,0F0H
    ADC AL,40H
    RET
HEX2ASCII ENDP

DISPLAY PROC NEAR
    PUSH DX       ;显示结果子程序
    
    MOV DL,AL
    MOV AH,2
    INT 21H

    POP DX
    RET
DISPLAY ENDP

DISPLAY0 PROC NEAR
    PUSH AX       ;该子程序打印输入及":"
    PUSH DX
    PUSHF
    
    MOV DL,13
    MOV AH,2
    INT 21H

    MOV DL,10
    INT 21H

    MOV DL,[SI]     ;打印输入
    INT 21H

    MOV DL,58       ;打印":"
    INT 21H

    POPF
    POP DX
    POP AX
    RET
DISPLAY0 ENDP

ESCAPE PROC NEAR
    MOV AH,4CH       ;返回操作系统子程序
    INT 21H
    RET
ESCAPE ENDP

CODE ENDS
END STT

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -