【例82】利用无条件数据传送方式,让计算机的扬声器 在1秒钟内保持发出500Hz的声音 解】完整的程序如下 delnum 14000 sta SEGMENT STAcK DW 1024DUP(0) sta ENDS code SEGMENt ASSUME CS: code. ss: sta
【例8.2】利用无条件数据传送方式,让计算机的扬声器 在1秒钟内保持发出500 Hz 的声音。 【解】完整的程序如下: delnum = 14000 sta SEGMENT STACK DW 1024 DUP(0) sta ENDS code SEGMENT ASSUME CS:code,SS:sta
delay PROC NEAr;时间延迟子程序,以CX中的值作 为 PUSH AX;循环次数,做若干次的乘法产生时 PUSH DX;间延迟的效果 de: IMUL AX;用乘法指令延迟,执行时间较长 LooP del POP DX POP AX RET delay ENDP main: MOV CX.500 sou PUSH CX
delay PROC NEAR ;时间延迟子程序,以CX中的值作 为 PUSH AX ;循环次数,做若干次的乘法产生时 PUSH DX ;间延迟的效果 del: IMUL AX ;用乘法指令延迟,执行时间较长 LOOP del POP DX POP AX RET delay ENDP main: MOV CX,500 sou: PUSH CX
AL, 61H ;读出原6H端口的数据 AND AL,10;清最低两位 OUT 6IHAL ;送低电位到P1 MOⅤCX, delnum;取控制延迟时间的循环次数值 CaLL delay AL. 61H OR AL,000000B;置P1位为1 OUT 6IHAL MOV X.delnum
IN AL,61H ;读出原61H端口的数据 AND AL,11111100B ;清最低两位 OUT 61H,AL ;送低电位到P1 MOV CX,delnum ;取控制延迟时间的循环次数值 CALL delay IN AL,61H OR AL,00000010B ;置P1位为1 OUT 61H,AL MOV CX,delnum
CaLL delay POP CX LoOP sou MOV AX. 4C00H NT 21H code ENDS END main 从这个例子可以看出,对扬声器的控制是不需要任何条件 的,程序中在向61H号端口送数据时根本不考虑扬声器是否 准备好、是否可接收数据等问题。由端口6H到放大电路构 成了扬声器的接口电路,该接口以系统总线上送来的信号驱 动薄膜的振动,按无条件方式进行数据传送。 BACK
CALL delay POP CX LOOP sou MOV AX,4C00H INT 21H code ENDS END main 从这个例子可以看出,对扬声器的控制是不需要任何条件 的,程序中在向61H号端口送数据时根本不考虑扬声器是否 准备好、是否可接收数据等问题。由端口61H到放大电路构 成了扬声器的接口电路,该接口以系统总线上送来的信号驱 动薄膜的振动,按无条件方式进行数据传送
83查询方式输入输出 大多数外设不可能像扬声器那样工作,这些外设处理数 据的速度和提供数据的速度往往比主机内部速度慢得多,因 而CPU与这类设备进行数据传递前必须先判断它们是否“就 绪”。CPU以查询方式从外设读取一批数据,以及向外设送 出一批数据的流程如图82所示
8.3 查询方式输入输出 大多数外设不可能像扬声器那样工作,这些外设处理数 据的速度和提供数据的速度往往比主机内部速度慢得多,因 而CPU与这类设备进行数据传递前必须先判断它们是否“就 绪” 。CPU以查询方式从外设读取一批数据,以及向外设送 出一批数据的流程如图8.2所示