DOS汇编中"mov ah, 0Bh"与"int 21h"指令的功能是什么?
嘿,我来给你掰扯清楚这俩指令的功能,再结合你贴的那段方波代码说说它们在这儿的作用~
mov ah, 0Bh + int 21h 的核心功能 这是DOS系统里的经典键盘状态检查调用:
mov ah, 0Bh:把功能编号0Bh装进ah寄存器,相当于告诉DOS:“接下来我要查下键盘有没有按键等着处理”int 21h:触发DOS中断,让系统执行ah里指定的这个功能
执行完这俩指令后,al寄存器会给你返回状态:
- 如果
al = 0:当前没按键按下,键盘输入缓冲区是空的 - 如果
al ≠ 0:已经有按键被按下了,就等着程序去读取它
在你的方波生成代码里的实际作用
看你代码里紧接着的or al, al和jz ...:
or al, al:这是汇编里常用的小技巧,用来快速判断al是不是0(效果和cmp al, 0一样,但指令更短、执行更快)jz ...:如果al是0(也就是没按键),就跳回方波循环的地方继续输出高低电平;要是al非0(有用户按键了),就不跳转,执行后续的退出或者其他逻辑
说白了,这段代码就是让方波一直往CRO输出,直到用户按任意键才停下来——这俩指令就是负责“监听”停止信号的。
顺带提一嘴你代码里的方波逻辑:通过往portb交替输出00h(低电平)和0ffh(高电平),再用cx的循环次数控制每个电平持续的时间,这样就能在CRO上生成稳定的方波啦。
内容的提问来源于stack exchange,提问作者user8437000
相关产品推荐
相关产品推荐

