📄 bell.asm
字号:
;宏指令(回车换行)
CRLF MACRO
MOV DL,0DH ;回车
MOV AH,02H
INT 21H
MOV DL,0AH ;换行
MOV AH,02H
INT 21H
ENDM
;宏指令(响铃)
BELL MACRO
MOV AH,2
MOV DL,07H ;响铃码07H
INT 21H
ENDM
;
STACK SEGMENT STACK 'STACK';定义堆栈段
DB 256 DUP(0) ;堆栈空间=256
STACK ENDS ;堆栈段结束
;
DATA SEGMENT ;定义数据段
MSG1 DB 'NUM=','$'
MSG2 DB 'ERROR!','$'
DATA ENDS ;数据段结束
;
CODE SEGMENT ;代码段说明
ASSUME CS:CODE,DS:DATA,SS:STACK ; 定义CS=代码段, 定义DS为数据段
START: ;EXE文件执行入口
MOV AX,DATA ;初始化数据段 ds=DS
MOV DS,AX ;ds=DS
MOV ES,AX
SSS: mov dx,offset MSG1 ;输出提示信息
mov ah,09h ;功能号ah=9 (显示字符串)
int 21h ;21h=DOS系统功能中断调用
MOV AH,1 ;输入'0'~'9'
INT 21H
CMP AL,03H ;为Ctrl+C退出
JZ PPP
PUSH AX
CRLF
POP AX
SUB AL,30H ;(AL)=0~9?
JLE ERR ;<=0,转移
CMP AL,10
JNC ERR ;>9,转移
MOV CL,AL ;(CX)=响铃次数
MOV CH,0
LOP1: BELL
CALL DELAY ;延时
LOOP LOP1
JMP SSS
;
ERR: mov dx,offset MSG2 ;出错信息
mov ah,09h ;功能号ah=9 (显示字符串)
int 21h ;21h=DOS系统功能中断调用
CRLF
JMP SSS
;
PPP: mov ax,4c00h ;DOS系统功能调用 4ch=终止程序,退出码=00H
int 21h ;返回DOS
;
delay proc near ;延时子程序
push cx
mov cx,300H
uuu: call dely
loop uuu
pop cx
ret
delay endp
;
dely proc near
push cx
mov cx,0FFFFh
ccc: loop ccc
pop cx
ret
dely endp
;
CODE ENDS ;代码段结束
END START ;汇编结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -