1、题1.2参考p.2和p.51.9参考p.13-141.11(1)174.66 D = 10101110.10101000 B = 0AE.A8 H (0AE.A9H / 0AE.A8F5C2H)(2)100011101011.01011 B = 8EB.58 H = 2283.34375 D(3)F18A6.6 H = 11110001100010100110.0110 B= 989350.375 D1.12解:八位机器数原码、反码、补码、移码+3700100101001001010010010110100101 25H25H 25H 0A5H-371010010111011010110110
2、1101011011 0A5H0DAH0DBH5BH1.13解:补码机器数扩充为16位和32位形式+370025 H00000025 H-37FFDB HFFFFFFDB H1.14 解:46H作为无符号数 = 70 D46H作为补码 = +70 D46H作为BCD码 = 46 D46H作为ASCII码 = F1.19解:英文字母 D和d的ASCII码为44H和64H;回车CR为0D H、换行LF为0A H; 数码0、空格SP、空操作NUL的ASCII码分别为30H、20H、00H。2.5题参考p.32逻辑地址形式为段地址:偏移地址物理地址 = 段地址*16+段内偏移地址1MB空间最多可以分成
3、64K个逻辑段,因为段地址的起始必须是16的倍数,220/24=216=64K个。物理地址为:(1) 0FFFF0H(2)00417H(3)24500H(4)0BC777H2.8 已知DS=2000H,BX=0100H,SI=0002H,存储单元20100H20103H依次存放12H、34H、56H、78H,21200H21203H依次存放2AH、4CH、B7H、65H,说明下列指令执行完后AX寄存器的内容以及源操作数的寻址方式。(1)mov ax, 1200h答:ax=1200h立即寻址方式(2)mov ax, bx答:ax=0100h寄存器寻址方式(3)mov ax, 1200h答:ax=
4、21200h=4C2AH直接寻址方式(4)mov ax, bx答:ax=20100h=3412H寄存器间接寻址方式(5)mov ax, bx+1100h答:ax=21200h=4C2AH相对寻址方式(6)mov ax, bx+si答:ax=20102h=7856H基址变址寻址方式(7)mov ax, bxsi+1100h答:ax=21202h=65B7H相对基址变址寻址方式2.9 指出下列指令的错误原因:movcx, dl;源操作数长度与目的操作数不一致mov ip, ax;ip指令指针不能人为改变,由转移指令或子程序调用来改变mov es, 1234h;立即数不能直接送段寄存器moves,
5、ds;段寄存器之间不能直接传递moval, 300;源操作数长度超过al寄存器mov sp, ax;间接寻址可使用bx或bp,堆栈操作应使用专用指令,movax, bx+di;源操作数格式错,应该是 bx+dimov 20h, ah;目的操作数不可以是立即数2.13解:运算公式为 v-(x*y+z-540)/x结果商存放在ax中,余数在dx中。2.16解:求有效地址(1)EA = 1256H(2)EA = 32F7H2.19解:求首地址为array的20个字的数组的元素之和,结果存放于地址为total的字单元中。-题4.1 参见p.14-15 8088具有 20 根地址线。在访问内存时使用地址
6、 A0A19 ,可直接寻址 1MB 容量的内存范围;在访问外设时使用地址线 A0A15 ,共能寻址 64K 个输入输出端口。 实际上PC/XT在寻址外设时,只使用地址线A9A0;若A91,说明它要寻址的IO端口位于IO插卡上。4.2参见p.106-107总线操作指的是发生在总线上的某些特定操作,总线周期指的是完成一次特定总线操作所需的时间。对8088而言其典型的总线周期由 4个T状态组成。PC/XT所采用的时钟频率为4.77MHz,每个T状态的持续时间为210ns。如果CLK引脚接5MHz的时钟信号,那么每个T状态的持续时间为200ns。 4.4解答: 当8088进行读写存储器或I/O接口时,
7、如果存储器或I/O接口无法满足CPU的读写时序(来不及提供或读取数据时),需要CPU插入等待状态TW。(在T3前沿检测Ready信号,若无效则插入TW 。) 具体在读写总线周期的T3和T4之间插入TW。4.6参见p.99,p.1108088的某些输出线有三种状态:高电平、低电平、悬空(高阻态),称为三态能力。在高阻状态,CPU放弃其了对该引脚的控制权,由连接它的设备接管。具有三态能力的引脚有:AD7AD0,A15A8,A19/S6A16/S3,ALE,IO/M*,WR*,RD*,DEN*,DT/R*。4.11总线周期IO/M*WR*RD*存储器读低高低存储器写低低高I/O读(输入操作)高高低I
8、/O写(输出操作)高低高IO/M* 0WR* 0RD* 1WR* 1RD* 0MEMR*IOW*14.12 答:取该指令时引发存储器读总线操作。执行该指令时引发I/O读总线操作。(时序图略)4.13 8088系统最小组态下,对指令ADD 2000H,AX (长度3B)。答:取该指令时需要3个总线周期,均为存储器读周期。执行该指令时需要4个总线周期,2个为存储器读总线周期(读出字操作数参与运算),2个为存储器写总线周期(保存16位运算结果)。4.15 参见p.106图74LS373 的G为电平锁存引脚,控制选通且转为无效时锁存数据。OE* 输出允许引脚,信号来自ALE。4.16 参见p.106图
9、数据收发器74LS245 是8位双向缓冲器,G*控制端为低电平有效,可传输数据;DIR控制导通方向:DIR1,AB;DIR0,AB。4.17 参见p.111-112归纳为:1、8086数据总线变为16位,数据地址线复用为AD15AD0。2、8086指令队列程度变为6字节长,当有2个字节空才取下一指令。3、8088引脚IO/M* ,8086变为M/IO*;4、引脚SS0* 变为BHE*/S7,BHE* 的作用是使D15D8有效。5、8086存储器组织为奇偶分块,偶地址取字只要读1次,奇地址取字需要读两次。6、I/O端口大都采用偶地址,目的是引导8位数据到低8位总线AD7AD0上,以提高效率。=5
10、.1 Cache、主存和辅存的作用参见 p.120121 虚拟存储器参见p.121 在CPU看来,访问主存和访问辅存有什么不同? 访问主存:通过存储器访问机器指令,按字随机访问。 访问辅存:通过操作系统,按块顺序访问。5.2 在半导体存储器中,RAM指的是 随机存取存储器 ,它可读可写,但断电后信息一般会 丢失 ;而ROM指的是 只读存储器 ,正常工作时只能从中 读取 信息,但断电后信息 不会丢失 。以EPROM芯片2764为例,其存储容量为8K8位,共有 8 条数据线和 13 条地址线。用它组成64KB的ROM存储区共需 8 片2764芯片。5.4 一个容量为4K4位的假想RAM存储芯片,他
11、应该有多少根地址线引脚和多少根数据线引脚?如果让你来进行设计,那么它还需要哪些控制引脚?这些引脚分别起什么样的控制作用?解答:4K4的芯片应该有12根地址线引脚和4根数据线引脚。控制引脚应该有:读取信号OE*:有效时,表示读取存储单元的数据写入信号WE*:有效时,表示将数据写入存储单元片选信号CS*:有效时,表示选中该芯片,可以进行读写操作。5.7 什么是存储芯片的位扩充和地址扩充?采用静态RAM的芯片2114(1K*4位)或动态RAM的芯片4116(16K*1位)来组成32KB的RAM存储区,请问各需要多少芯片?在位方向和地址方向各需要进行什么样的扩充?解答:(参见p.140) 使用多个芯片
12、来扩充存储数据位的宽度,称为位扩充。采用多个芯片在地址方向上进行扩充,称为地址扩充或字扩充。用SRAM 2114组成32KBRAM存储区:2片为一组,得1KB,所以组成32KB就要32组,共需要64片SRAM 2114。用DRAM 4116组成32KBRAM存储区:8片为一组,得16KB,所以组成32KB只要2组,共需要16片DRAM 4116。2114(1) A9A0I/O4I/O1片选1D3D0D7D4A9A02114(2)A9A0I/O4I/O1CECE2114(1) A9A0I/O4I/O1片选32D3D0D7D4A9A02114(2)A9A0I/O4I/O1CECE5.8 存储芯片为
13、什么要设置片选信号?它与系统地址总线有哪些连接方式?采用何种连接方式可避免地址重复?采用哪些连接方式可节省用于译码的硬件?解答:片选信号说明该存储器芯片是否被选中正常工作,设置它可以比较方便地实现多个存储器芯片组成大容量的存储空间。存储器片选信号通常与CPU地址总线的高位地址线相关联,可以采用“全译码”、“部分译码”、“线选译码”方式。采用全译码方式可以避免地址重复。采用部分或线选译码可以节省译码硬件。5.9 在一个针对存储器的译码系统中,如果有4个地址线未参与译码,那么每个存储单元会同时拥有几个地址?解答: 理论上每个存储单元会同时拥有16个地址。5.10 解答:p.144图5.33中4个存
14、储芯片的可用地址范围:6264(1)6264(2)2732(1)2732(2)00000 01FFFH02000 03FFFH04000 04FFFH05000 05FFFH40000 41FFFH42000 43FFFH44000 44FFFH45000 45FFFH80000 81FFFH82000 83FFFH84000 84FFFH85000 85FFFHC0000C1FFFHC2000C3FFFHC4000 C4FFFHC5000 C5FFFH重复地址由于A19A18的不定性,每片各有4段范围。5.11采用全译码方式和6264芯片( SRAM,容量8K8位),在内存40000H43F
15、FFH区段扩充RAM,请画出这些芯片与最大组态的系统总线的连接示意图。解: 方法为:容量=末地址首地址+1=214=16KB,所以要2片6264芯片。A12A0为片内地址,A15A13作片选译码的输入CBA,A19 A16A15 A13A12A0地址范围1201000100000001全0全1全0全140000H41FFFH42000H43FFFHA12A0138A18 A15 A14A13CBAE3E2E1Y0A19A17A16D7D0(1)6264CS1WEOEMEMWMEMR(2)6264CS1WEOEY3Y2Y15VCS2CS25.13 采用3:8译码器74LS138和2764芯片(E
16、PROM,8K8位),通过全译码方式在8088系统的地址最高端组成32KB的ROM区,请画出各2764芯片与8088最大组态下形成的线条总线的连接示意图。解答: 注意地址最高端组成32KB的ROM区,意味着地址范围是 F8000HFFFFFH,这样最高五根地址线A19A15上要全为1。2764芯片的片内地址是13根即A12A0,它们是全0到全1变化;现在需要4片来构成32KB存储区,采用3:8译码器的话,A15A13应该取后4种情况,即取100111分别产生Y4Y7。其余地址线可以以多种方式组合产生控制信号。A19 A16A15 A13A12A0地址范围12341111111111111111
17、100101110111全0全1全0全1全0全1全0全1F8000HF9FFFHFA000HFBFFFHFC000HFDFFFHFE000HFFFFFHA12A0(1)2764(2)2764CE*A15 A14A13A16CBAE3138 A17Y7E2E1MEMR*(3)2764(4)2764 Y6Y5Y4A19A18 D7D0CE*CE*CE*OE*OE*OE*OE*考虑:如果要求地址从低端开始的话,高5位全0,即00000H07FFFH,如何连接?5.16访问的局部性原则P122 第1行。高速缓存和虚拟存储的目的p121下部。=6.1 在80x86系统中,I/O端口的地址采用 独立 编码
18、方式,访问端口时要使用专门的 I/O 指令,有 2 种寻址方式,其具体形式是: 直接寻址和DX间接寻址 。6.2 一般的I/O接口电路安排有哪三类寄存器?他们各自的作用是什么?解答: (参见p.154) 数据寄存器保存外设给CPU和CPU发往外设的数据。 状态寄存器保存外设或接口电路的状态。 控制寄存器保存CPU给外设或接口电路的命令。K7K1K0+5VD0D7A0A15CLKLS06反相驱动器LS2738D锁存器LS244三态缓冲器8000H译码+5VLED0LED7GIOWIOR6.4解:K0单独按下:输入0FEH,控制L0 L7 依次循环亮灯,K1单独按下:输入0FDH,控制L7 L0
19、反向依次循环亮灯,程序流程略。BEG:MOV DX,8000HLOP0:IN AL,DXMOV BL,ALMOV CX,8;循环次数CMP AL,0FEH;测试是否K0单独按下JZ LOP1CMP AL,0FDH;测试是否K1单独按下JZ LOP2MOV AL, 0OUTDX, ALJMP LOP0;利用状态值0FEH作为开始位置,指向L0LOP1:MOV AL,BL NOT AL;因为有反相器LS06OUT DX,ALCALL DELAYROL BL,1;准备下个灯亮位置LOOP LOP1JMP LOP0;LOP2:MOV BL,80H;首次亮L7,LPO3:MOV AL,BL ;为1的灯亮
20、,因为有反相器LS06OUT DX,ALCALL DELAYROR BL,1;准备下个灯亮位置LOOP LOP3JMP LOP06.5 数据口地址为FFE0H,状态口地址为FFE2H,当状态标志D0=1时输入数据就绪,编写查询方式进行数据传送程序,读入100个字节,写到2000H:2000H开始的内存中。解:(程序格式参见p.6364 ).CODEMOVAX, 2000HMOV DS,AX;段地址MOV BX,AX;偏移地址MOV CX,100NEXT:MOV DX,0FFE2HSTATUS:IN AL,DX;读入状态TEST AL,01HJZ STATUSDEC DXDEC DX;数据口地址
21、IN AL,DXMOV BX,ALINC BXLOOP NEXTMOV AX, 4C00H;结束INT 21H6.6 某字符输出设备,其数据端口和状态端口的地址均为80H。在读取状态时,当标志位D7为0时表明该设备闲,可以接收一个字符。请编写采用查询方式进行数据传送的程序段,要求将存放于符号地址ADDR处的一串字符(以$为结束标志)输出给该设备,注意在程序中加上注释。解:参考答案一: mov bx, offset addragain:mov ah, bx;取一个字节的字符码 cmp ah, $ jz donestatus: in al, 80h;查询一次 test al, 80h jnz st
22、atus mov al, ah out 80h, al;输出一个字节 inc bx jmp again;循环done: 参考答案二:.DATAaddrDB xxxx$.CODEMOVAX, DATAMOV DS, AXLEABX, addrStatus:INAL, 80H;读入状态,if D7=1,为负数CMPAL, 0;或ROL AL,1JSStatus;JC STATUSMOV AL, BXCMPAL, $JZendofOUT80H, ALINCBXJMP StatusEndof:MOV AX, 4C00HINT 21H6.7 以可屏蔽中断为例,说明一次完整的中断过程主要包括那些环节?80
23、88响应可屏蔽中断请求时需要先满足那些前提条件?答: 中断过程的主要环节:( 参见p.165 )中断请求、中断响应、关中断、断点保护、中断源识别、现场保护、中断服务、恢复现场、开中断、中断返回。8088响应可屏蔽中断请求时需要先满足:中断允许IF1。当前指令执行完毕。6.8什么是中断源?为什么要设立中断优先权?什么是中断嵌套?何种情况下程序可能发生中断嵌套?答:中断源:计算机系统中引起中断的事件或原因。当多个中断源同时请求时,CPU需要利用中断优先权决定首先响应哪一个;当一个中断正在服务时,又发生了新的中断请求,CPU需要利用中断优先权确定后者是否优先权更高,以便实现中断嵌套。中断嵌套:当一个
24、中断服务时CPU又响应新的中断请求就形成中断嵌套。CPU允许中断(开中断)、新的中断请求比正在服务的中断优先权更高,通常发生中断嵌套。A0A15锁存器INTR三态缓冲器译码 8001HD0D7中断0中断1中断2IOR6.9参见P.171中断返回读入中断状态调用PROC0设备1中断?N设备0中断?设备2中断?设备3中断?NNNYYYY调用PROC1调用PROC2调用PROC3STIPUSH DXPUSHAXMOV DX,8001H STATUS:IN AL,DXTEST AL,01HJZ NEXT1CALL PROC0JMP DONESNEXT1:TEST AL,02HJZ NEXT2CALL
25、PROC1JMP DONES NEXT2:TEST AL,04HJZ NEXT3CALL PROC2JMP DONES NEXT3:TEST AL,08HJZ DONES CALL PROC3DONES:POPAXPOP DX IRET6.10 DMA的意思是 直接存储器存取 ,主要用于高速外设和内存间的数据传送。进行DMA传送的一般过程是:外设先向DMA控制器提出 DMA传送请求 ,DMA控制器通过 HOLD 信号有效向CPU提出总线请求,CPU回以 HLDA 信号有效表示响应。此时CPU的三态信号线将输出 高阻 状态,即将它们交由 DMAC(DMA控制器) 进行控制,完成外设和内存间的直接
26、数据传送。7.7 假如某并行总线的数据宽度为32位,工作频率为100MHz,若2个时钟周期传送一次数据,其传输速率是多少?如果在时钟的前后沿各传送一次数据,其传输速率是多少?如果采用2-1-1-1的突发传送模式,其平均传输速率是多少?解答:f =100MHz ,则时钟周期T=1/f =10 ns1) 2T一次的传输速率,即频率减半:fd = (32/8) * 100/2 M = 200 MB/s或fd = (32/8) / (2*10 ns) = 200 MB/s2) 前后沿各传送一次,即频率加倍:fd = (32/8) * 100*2 M = 800 MB/s或即1T2次:fd = (32/
27、8) / (10/2 ns) = 800 MB/s3) 采用2-1-1-1的突发传送模式,平均为5T4次:fd = (32/8) * 100*4/5 M = 320 MB/s或fd = (32/8) /(5*10 ns /4) = 320 MB/s=8.1 8088CPU具有哪些中断类型?各种中断如何产生,如何得到中断向量号?参见p.191、p.1921938.2 8088中断向量表的作用是什么?(参见p.194)答:它是中断向量号到对应的中断服务程序入口地址的链接表。 通过中断向量号n,可以读取中断向量表的物理地址为 n*4 开始的单元,获取中断服务程序的入口地址(即中断向量),长度4个字节
28、。8.3 说明程序段的功能: (程序略,见p.212 上)答:此段程序将中断服务程序intproc的入口地址写入中断向量表的80h*4开始的单元中。 (stows 是数据串传送指令,参见p.78。)(实际上可以使用指令序列: mov ax,seg intprocmov ds,axmov dx,offset intprocmov ax,2580hint 21h 来完成相同功能)8.4 8259A中IRR、IMR和ISR三个寄存器的作用是什么?答: ( 参见p.196197 ) 中断请求寄存器IRR 保存8条外界中断请求信号IR0IR7的请求状态 Di位为1表示IRi引脚有中断请求;为0表示无请求
29、 中断服务寄存器ISR 保存正在被8259A服务着的中断状态 Di位为1表示IRi中断正在服务中;为0表示没有被服务 中断屏蔽寄存器IMR 保存对中断请求信号IR的屏蔽状态 Di位为1表示IRi中断被屏蔽(禁止);为0表示允许8.5 PC/XT对8259A的初始化程序如下:mov al,13h;0001 0011out 20h,al;ICW1mov al,08h;00001000out 21h,al;ICW2mov al,09h;00001001out 21h,al;ICW4请说明其设定的工作方式?解答: 从第一个写指令ICW1,看出是边沿触发、单片方式,有ICW4;第二个写指令ICW2为中断
30、向量08h;第三个写指令ICW4中断方式字,表示普通全嵌套、数据线缓冲方式,从片、非自动中断结束、16位微处理器。8.6 某时刻8259A的IRR内容是08h,说明只有引脚IR3上有中断请求。 某时刻8259A的ISR内容为08h,说明只有IR3上的请求正在被CPU服务。 在两片8259A级联的中断电路中,主片的第5级IR5接从片的中断请求输入,则初始化主、从片时ICW3的控制字分别是20H和05H。(分别是0010 0000 和0000 0101 )8.7 解:初始化时写的是ICW命令,A0=0为ICW1,A0=1时按照顺序决定是写哪个初始化命令字。 当8259处于工作状态时,写的是OCW,
31、由地址A0和D4D3特征位共同决定是写哪个操作命令字(A01时,写OCW1;A00且D4D3=00时,写OCW2,D4D3=01,写OCW3)。在A01时读出的是IMR寄存器的内容。8.8 题略p.212。解:根据题意:SFNM=0,AEOI=0,LTIM=0,ICW1=00010011,ICW2=90H,ICW4=0000x101,初始化8086 所接的8259A中断控制器:MOVDX, 0FFDCH;对应20H端口MOVAL, 13HOUTDX, ALMOVDX, 0FFDEH;对应21H端口MOVAL, 90HOUTDX, ALMOVAL, 05HOUTDX, AL8.10 8259A的
32、中断请求有哪两种触发方式,它们分别对请求信号有什么要求?PC系列机中采用哪种方式?答:上跳沿触发,要求克服噪音尖峰。 高电平触发,请求及时撤销请求信号。 PC系列机采用上升沿方式。 8.11 解答:0bh = 00001011 b,写OCW3,接下来要读的是ISR,中断服务寄存器。8.12解答:0bch = 10111100 b,21H写OCW1即IMR,结果是只允许IR0、IR1、IR6中断,其他中断被屏蔽。8.14 中断服务程序的人口处为什么通常要使用开中断指令?答: 因为8088在进入中断服务程序前的中断响应期内会自动关中断(令IF0),所以对于不十分重要的中断源,其中断服务程序的人口处
33、要开中断,以便可以实现中断嵌套。-题9.3 8253每个通道有 6 种工作方式可供选择。若设定某通道为方式0后,其输出引脚为 低 电平;当 写入计数初值(并进入减1计数器) 后通道开始计数, CLK 信号端每来一个脉冲 减1计数器 就减1;当 计数器减为0 ,则输出引脚输出 高 电平,表示计数结束。8253的CLK0接1.5MHz的时钟,欲使OUT0产生频率为300KHz的方波信号,则8253的计数值应为 5(1.5MHz300KHz) ,应选用的工作方式是 3 。9.4 按要求编写8253初始化程序,对应计数器02和控制字的I/O端口地址为204H207H。(1)使计数器1工作在方式0,仅用
34、8位二进制计数,初值为128。(2)使计数器0工作在方式1,按BCD码计数,计数值为3000。(3)使计数器2工作在方式2,计数值为02F0H。解:(1) MOV AL,01010000B ;即50HMOV DX,207HOUT DX,ALMOV AL,128 ;或80HMOV DX,205HOUT DX,AL (2) MOV AL,00100011B ;即23H,或用33H初值3000HMOV DX,207HOUT DX,ALMOV AL,30H;仅送高8位MOV DX,204HOUT DX,AL (3)MOV AL,10110100B ;即0B4HMOV DX,207HOUT DX,ALM
35、OV DX,206HMOV AX,02F0HOUT DX,AL MOV AL,AHOUT DX,AL 9.5 设8255计数器02和控制字的I/O地址依次为F8HFBH,说明如下程序的作用。 mov al, 33h ;0011 0011out 0fbh, almov al, 80hout 0f8h, almov al, 50hout 0f8h, al解:计数器0工作在方式1,BCD码计数,计数值5080D。9.7 解: 例题9.2中CLK0实际输入101个下降沿后产生中断,还能用工作方式1、4、5。如果利用外部信号启动计数,则GATE0应从 +5v 0v +5v。若采用计数器0方式1的控制字为
36、:00 01 001 0 B= 12H 。(初始化程序类似p.226 例9.2。)MOV AL,12H ;计数器0方式1MOV DX,203HOUT DX,ALMOV DX,200HMOV AL,100OUT DX,AL 题9.8解:先计算计数器0的初值,N=输入f /输出f =5MHz /1KHz=5000计数器0的方式控制字:00 10 010 1 N= 5000 用BCD计数计数器1的方式控制字:01 11 100 0 N=1000=3E8H 计数器0初始化程序:OUT1OUT0CLK0CLK182535MHzIRQ4MOV DX,0FFF3HMOV AL,25H;OUT DX,AL1K
37、HzMOV AL,50HMOV DX,0FFF0HOUT DX,AL(或方式控制字0011 0100,初值5000) mov dx,0fff3hmov al,34hout dx,almov dx,0fff0hmov ax,5000out dx,almov al,ah;先低后高out dx,al计数器1初始化程序:MOV DX,0FFF3HMOV AL,78H ;01 11 100 0OUT DX,ALMOV AX,3E8H MOV DX,0FFF1HOUT DX,ALMOV AL,AH;先低后高OUT DX,AL(或方式控制字01 10 100 1,初值1000D,用BCD计算只送高字节)mo
38、v al, 69hmov dx, 0fff3hout dx, almov dx, 0fff1hmov al, 10hout dx, al补充: (此处题目不需要进行8259A的初始化)IRQ4的中断向量为0CH,若需要设置8259A的初始化如下:MOV AL,13H;ICW1OUT 20H,ALMOV AL,08H;ICW2OUT 21H,ALMOV AL,07H;ICW4OUT 21H,AL 对应中断屏蔽字为11101111,中断屏蔽位设置程序:IN AL,21H;读出IMRAND AL,0EFH;设置允许IRQ4 ,其它位不影响OUT 21H,AL;再写入IMR 即OCW1#9.9 扬声器
39、控制发音程序:子程序speaker、speakon、speakoff参见p.223解:.DATAaddr DW 2277,2029,1808,1709 DW 1522,1356,1196,1139 .CODEMOVAX, DATAMOV DS, AXkeyin:MOVAH,1INT21H;等待按键CMP AL,1BH;是否ESCJZexitCMPAL,31HJLstop; 8ANDAL,0FH;截取数18DECAL;成为07SHLAL;因为DW,*2LEABX,addr;数据表起始地址MOVAH,0ADDBX,AXMOVAX,BXCALLspeakerCALLspeakonJMPkeyinstop:CALLspeakoffJMPkeyinexit:MOVAX,4C00HINT21H9.10计数器的定时长度和精度受脉冲输入信号频率和计数值影响。对