8086 - 蜂鸣直到获得输入
8086 - Beep until get input
我是汇编语言的新手,我想用 8086 汇编语言创建一个程序。 (emu8086) 所以程序应该持续发出哔哔声,直到按下 E 键。现在第一种方法是每次都使用简单的跳转来检查输入,这是我想出的代码:
macro beep
mov dl,7h
mov ah,2
int 21h
endm
.model small
.stack 64
.code :
lp:
beep
mov ah,1
int 21h
cmp al,'e'
je end
jmp lp
end:
mov ah,4ch
int 21h
现在我想要实现的是,哔哔声必须是连续的,我不希望用户在每个循环中都进行输入。类似于 C 中的多线程,在另一个线程中发出蜂鸣声。
在 8086 中甚至可能吗?
如果模拟标准PC环境,你可以设置定时器"chip"(硬件8255)来控制扬声器。打开它,无论您的代码在做什么,它都会发出哔哔声,直到您将其关闭。
BIOS 功能 01h 检查是否有键处于挂起状态。
- 如果没有,您立即重新发出哔哔声。
- 如果存在密钥,则使用 BIOS 函数 00h 获取它,如果不存在,则 'e',继续重新发出蜂鸣声。
这可能是在按下字符 'e' 之前发出连续蜂鸣声的最简单解决方案。
lp:
beep
mov ah, 01h
int 16h ;Gives ZF
jz lp ;No key waiting
mov ah, 00h
int 16h ;Gives AX
cmp al, 'e'
jne lp
mov ax, 4C00h
int 21h
我是汇编语言的新手,我想用 8086 汇编语言创建一个程序。 (emu8086) 所以程序应该持续发出哔哔声,直到按下 E 键。现在第一种方法是每次都使用简单的跳转来检查输入,这是我想出的代码:
macro beep
mov dl,7h
mov ah,2
int 21h
endm
.model small
.stack 64
.code :
lp:
beep
mov ah,1
int 21h
cmp al,'e'
je end
jmp lp
end:
mov ah,4ch
int 21h
现在我想要实现的是,哔哔声必须是连续的,我不希望用户在每个循环中都进行输入。类似于 C 中的多线程,在另一个线程中发出蜂鸣声。
在 8086 中甚至可能吗?
如果模拟标准PC环境,你可以设置定时器"chip"(硬件8255)来控制扬声器。打开它,无论您的代码在做什么,它都会发出哔哔声,直到您将其关闭。
BIOS 功能 01h 检查是否有键处于挂起状态。
- 如果没有,您立即重新发出哔哔声。
- 如果存在密钥,则使用 BIOS 函数 00h 获取它,如果不存在,则 'e',继续重新发出蜂鸣声。
这可能是在按下字符 'e' 之前发出连续蜂鸣声的最简单解决方案。
lp:
beep
mov ah, 01h
int 16h ;Gives ZF
jz lp ;No key waiting
mov ah, 00h
int 16h ;Gives AX
cmp al, 'e'
jne lp
mov ax, 4C00h
int 21h