• 877.07 KB
  • 2022-04-22 11:37:23 发布

微机原理 第四版 (周和琴 著) 中国科学技术大学出版社 课后答案

  • 90页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'课后答案网,用心为你服务!大学答案---中学答案---考研答案---考试答案最全最多的课后习题参考答案,尽在课后答案网(www.khdaw.com)!Khdaw团队一直秉承用心为大家服务的宗旨,以关注学生的学习生活为出发点,旨在为广大学生朋友的自主学习提供一个分享和交流的平台。爱校园(www.aixiaoyuan.com)课后答案网(www.khdaw.com)淘答案(www.taodaan.com) 课后答案网www.khdaw.com第一章1.什么是冯?诺依曼机?答:冯?诺依曼于1945年提出了存储程序的概念和二进制原理,利用这种概念和原理设计的电子计算机系统统称为冯?诺依曼机。它包括运算器、控制器、存储器、输入设备和输出设备五个组成部分。早期的冯?诺依曼机结构上以运算器和控制器为中心,随着计算机体系结构的发展,现在已演化为以存储器为中心的结构。2.微处理器,微型计算机,微型计算机系统有什么联系与区别?答:微处理器是微型计算机系统的核心,也称为CPU(中央处理器)。主要完成:①从存储器中取指令,指令译码;②简单的算术逻辑运算;③在处理器和存储器或者I/O之间传送数据;④程序流向控制等。微型计算机由微处理器、存储器、输入/输出接口电路和系统总线组成。以微型计算机为主体,配上外部输入/输出设备及系统软件就构成了微型计算机系统。三者关系如下图:3.微处理器有哪些主要部件组成?其功能是什么?答:微处理器是一个中央处理器,由算术逻辑部件ALU、累加器和寄存器组、指令指针寄存器IP、段寄存器、标志寄存器、时序和控制逻辑部件、内部总线等组成。算术逻辑部件ALU主要完成算术运算及逻辑运算。累加器和寄存器组包括数据寄存器和变址及指针寄存器,用来存放参加运算的数据、中间结果或地址。指令指针寄存器IP存放要执行的下一条指令的偏移地址,顺序执行指令时,每取一条指令增加相应计数。段寄存器存放存储单元的段地址,与偏移地址组成20位物理地址用来对存储器寻址。标志寄存器flags存放算术与逻辑运算结果的状态。时序和控制逻辑部件负责对整机的控制:包括从存储器中取指令,对指令进行译码和分析,发出相应的控制信号和时序,将控制信号和时序送到微型计算机的相应部件,使CPU内部及外部协调工作。内部总线用于微处理器内部各部件之间进行数据传输的通道。4.画一个计算机系统的方框图,简述各部分主要功能。答:计算机系统由硬件(Hardware)和软件(Software)两大部分组成。硬件是指物理上存在的各种设备,如显示器、机箱、键盘、鼠标、硬盘和打印机等,是计算机进行工作的物质基础。软件是指在硬件系统上运行的各种程序、数据及有关资料。一个完整的计算机系统不仅应该具备齐全的基本硬件结构,还必须配备功能齐全的基本软件系统,后者是为了充分发挥基本硬件结构中各部分的功能和方便用户使用计算机而编制的各种程序,一般称为计算机的软件系统。主机外部设备总线操作系统编译系统服务性程序 课后答案网www.khdaw.com数据库系统应用软件系统软件中央处理器内存储器控制器外存输入设备输出设备运算器硬件系统计算机系统软件系统5.列出计算机系统中的三种总线结构,画出面向存储器的双总线结构图。答:(1)面向系统的单总线结构(2)面向CPU的双总线结构(3)面向主存储器的双总线结构6.8086微处理器可寻址多少字节存储器?PentiumII微处理器可寻址多少字节存储器?器7.什总线即系统总线的一种,是用来连接构成微处理机的tInterconnect,即外设互连局部总线,是Intel公司推出的3总线,通用串行总线(UniversalSerialBus),属于外部总线的一种,用作微处理机系统插即用和热插拔功能,具有传输速度快,使用方便,连接灵活,独指令的作用。(4)DD数。75进制、十六进制。答:8086微处理器有20条地址线,可寻址220=1MB存储器PentiumII处理器有36条地址线,可寻址236=64GB存储么是PCI总线?什么是USB?答:PCI总线是微处理机机箱内的底板各个插件板的一种数据传输标准。PCI全称为PeripheralComponen2/64位标准总线。数据传输速率为132MB/s,适用于Pentium微型机。PCI总线是同步且独立于微处理器的,具有即插即用的特性,允许任何微处理器通过桥接口连接到PCI总线上。USB与系统之间,系统与外部设备之间的信息通道。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的,不过直到近期,才得到广泛应用,已成为目前电脑 课后答案网www.khdaw.com中的标准扩展接口。USB接口支持设备的即立供电等优点。8.说明以下一些伪(1)DB(2)DQ(3)DW答:(1)在汇编语言中定义字节数据。(2)在汇编语言中定义4字数据。(3)在汇编语言中定义字数据。(4)在汇编语言中定义双字数据。9.将下列二进制数转换为十进制数。(1)1101.01B(2)111001.0011B(3)101011.0101B(4)111.0001B答:(1)13.25(2)57.1875(3)43.3125(4)7.062510.将下列十六进制数转换为十进制(1)A3.3H(2)129.CH(3)AC.DCH(4)FAB.3H答:(1)163.1875(2)297.75(3)172.859375(4)4011.1811.将下列十进制数转换为二进制、八(1)23(2)107(3)1238(4)92答:(1)23D=27Q=17H(2)107D=153Q=6BH2[-12]补=11110100B[-92]补=10100100B0000010B0000100B0000001B000000000000000B10010010B(4)10001001B原码时真值为-18,看作反码时真值为-109,看作补码时真值为-11015.5(4)-12001B0000000000000000000(2)0000000000000000000000000000000000000(3)1238D=2326Q=4D6H(4)92D=134Q=5CH12.将下列十进制数转换为8位有符号二进制数。(1)+32(2)-12(3)+100(4)-9答:(1)[+32]原=[+32]反=[+32]补=00100000B 课后答案网www.khdaw.com(2)[-12]原=10001100B[-12]反=11110011B(3)[+100]原=[+100]反=[+100]补=01100100B(4)[-92]原=11011100B[-92]反=10100011B13.将下列十进制数转换为压缩和非压缩格式的BCD码。(1)102(2)44(3)301(4)1000答:(1)[102]压缩BCD=0000000100000010B[102]非压缩BCD=00000001000000000(2)[44]压缩BCD=01000100B[44]非压缩BCD=000001000(3)[301]压缩BCD=0000001100000001B[301]非压缩BCD=00000011000000000(4)[1000]压缩BCD=0001000000000000B[1000]非压缩BCD=0000000100000000014.将下列二进制数转换为有符号十进制数。(1)10000000B(2)00110011B(3)答:(1)看作原码时真值为-0,看作反码时真值为-127,看作补码时真值为-128(2)+51(3)看作(4)看作原码时真值为-9,看作反码时真值为-118,看作补码时真值为-119将下列十进制数转换为单精度浮点数。(1)+1.5(2)-10.625(3)+100.2答:(1)+1.5=1.1B=1.1×20,符号为0,移码阶127+0=127=0111111尾数10000000000000000000000故单精度浮点数为0011111111000-10.625=-1010.101B=-1.010101×23,符号为1,移码阶127+3=130=10000010B,尾数010101000故单精度浮点数为110000010010101000000000000000(3)+100.25=1100100.01B=1.10010001×26,符号为0移码阶127+6=133=10000101B,尾数1001000100故单精度浮点数为01000010110010001000000000000000(4)-1200=-10010110000B=-1.0010110000×210,符号为1移码阶127+10=137=10001001B,尾数0010110000000故单精度浮点数为1100010010010110000000000000000016.将下列单精度浮点数转换为十进制数。(1)01000000011000000000000000000000(2)10111111100000000000000000000000(3)01000000010010000000000000000000答:(1)1.11×21=11.1B=+3.5D(2)-1.0×20=-1B=-1D(3)1.1001×21=11.001B=+3.125D 课后答案网www.khdaw.com第二章1.8086CPU内部由哪两部分组成?它们的主要功能是什么?答:8086CPU内部由执行单元EU和总线接口单元BIU组成。主要功能为:执行单元EU负责执行指令。它由算术逻辑单元(ALU)、通用寄存器组、16位标志寄存器(FLAGS)、EU控制电路等组成。EU在工作时直接从指令流队列中取指令代码,对其译码后产生完成指令所需要的控制信息。数据在ALU中进行运算,运算结果的特征保留在标志寄存器FLAGS中。总线接口单元BIU负责CPU与存储器和I/O接口之间的信息传送。它由段寄存器、指令指针寄存器、指令队列、地址加法器以及总线控制逻辑组成。2.8086CPU中有哪些寄存器?各有什么用途?答:8086CPU内部包含4组16位寄存器,分别是通用寄存器组、指针和变址寄存器、段寄存器、指令指针和标志位寄存器。(1)通用寄存器组包含4个16位通用寄存器AX、BX、CX、DX,用以存放普通数据或地址,也有其特殊用途。如AX(AL)用于输入输出指令、乘除法指令,BX在间接寻址中作基址寄存器,CX在串操作和循环指令中作计数器,DX用于乘除法指令等。(2)指针和变址寄存器BP、SP、SI和DI,在间接寻址中用于存放基址和偏移地址。(3)段寄存器CS、DS、SS、ES存放代码段、数据段、堆栈段和附加段的段地址。(4)指令指针寄存器IP用来存放将要执行的下一条指令在现行代码段中的偏移地址。(5)标志寄存器Flags用来存放运算结果的特征。3.8086CPU和8088CPU的主要区别是什么?答:8088CPU的内部结构及外部引脚功能与8086CPU大部分相同,二者的主要不同之处如下:(1)8088指令队列长度是4个字节,8086是6个字节。(2)8088的BIU内数据总线宽度是8位,而EU内数据总线宽度是16位,这样对16位数的存储器读/写操作需要两个读/写周期才能完成。8086的BIU和EU内数据总线宽度都是16位。(3)8088外部数据总线只有8条AD7~AD0,即内部是16位,对外是8位,故8088也称为准16位机。(4)8088中,用IO/M信号代替M/IO信号。(5)8088中,只能进行8位数据传输,BHE不再需要,改为SS0,与DT/R和IO/M一起决定最小模式中的总线周期操作。4.简要解释下列名词的意义:CPU,存储器,堆栈,IP,SP,BP,段寄存器,状态标志,控制标志,物理地址,逻辑地址,机器语言,汇编语言,指令,内部总线,系统总线。答:CPU:中央处理器,是整个计算机系统的控制中心,主要功能是进行算术和逻辑运算,以及发出各种控制信号以协调整个系统正常工作。存储器:是计算机系统中的记忆元件,用于存储指令和数据。堆栈:在存储器中开辟的一个区域,用来存放需要暂时保存的数据。其操作特点是先进后出。IP:指令指针寄存器,用来存放将要执行的下一条指令在现行代码段中的偏移地址。SP:堆栈指针寄存器,用于指向当前栈顶单元。BP:基址指针,间接寻址中用于存放基址,隐含段地址为SS。段寄存器:用于存放逻辑段的段地址。 课后答案网www.khdaw.com状态标志:SF、ZF、OF、AF、PF和CF,反映运算结果的状态特征。控制标志:IF、DF和TF,对可屏蔽中断、字符串操作指针变换方向和单步运行起控制作用。物理地址:指存储器中存储单元的实际地址编码,是一种绝对地址,是CPU访问存储器的实际寻址地址,对于8086系统,地址范围为00000H~FFFFFH。逻辑地址:由段基址和偏移地址组成,均为无符号的16位二进制数,程序设计时采用逻辑地址,可由逻辑地址变换为物理地址,物理地址=段基址×16+偏移地址。机器语言:直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,计算机可以直接识别,不需要进行任何翻译。每台机器的指令,其格式和代码所代表的含义都是硬性规定的,故称之为面向机器的语言,也称为机器语言,是第一代计算机语言。汇编语言:使用助记符表示的二进制代码指令语言,是一种符号化的机器语言,必须经编译程序将汇编语言编译成机器语言,计算机才能识别。指令:能被计算机识别并执行的二进制代码,规定了计算机能完成的某一操作。内部总线:微处理器内部各个部件之间传送信息的通道。系统总线:微处理机机箱内的底板总线,用来连接构成微处理机的各个插件板,如ISA总线、EISA总线、PCI总线等。5.要完成下述运算或控制,用什么标志位判别?其值是什么?(1)比较两数是否相等(2)两数运算后结果是正数还是负数(3)两数相加后是否溢出(4)采用偶校验方式,判定是否要补1(5)两数相减后比较大小(6)中断信号能否允许答:(1)ZF,两数相减,若ZF=1,则相等。(2)SF,SF=1则为负,否则为正(3)对有符号数:OF,OF=1为溢出;对无符号数:CF,CF=1为溢出(4)PF,PF=1,不补1(5)对有符号数:无溢出时(OF=0),如ZF=1,则两数相等;如ZF=0且SF=0,则被减数大;如ZF=0且SF=1,则减数大;有溢出时(OF=1),如SF=1,则被减数大;如SF=0,则减数大;对无符号数:如ZF=1,则两数相等;如CF=0,则被减数大;如CF=1,则减数大(6)IF,IF=1,允许中断6.8086系统中存储器采用什么结构?用什么信号来选中存储体?答:8086系统中,存储器采用分体结构,1MB的存储空间分成两个存储体:偶地址存储体和奇地址存储体,各为512KB。使用A0和BHE来区分两个存储体。当A0=0时,选中偶地址存储体,与数据总线低8位相连,从低8位数据总线读/写一个字节。当BHE=0时,选中奇地址存储体,与数据总线高8位相连,从高8位数据总线读/写一个字节。当A0=0,BHE=0时,同时选中两个存储体,读/写一个字。7.用伪指令DB在存储器中存储ASCII码字符串“Whattimeisit?”。并画出内存分布图。答:STRDB‘Whattimeisit?’,’$’‘W’‘h’‘a’‘t’ 课后答案网www.khdaw.com‘‘‘t’‘i’‘m’‘e’‘‘‘i’‘s’‘‘‘i’‘t’‘?’‘$’8.用伪指令将下列16位二进制数存储在存储器中,并画出内存分布图。(1)1234H(2)A122H(3)B100H答:NUMDW1234H,A122H,B100H34H12H22HA1H00HB1HSTRNUM9.段寄存器装入如下数据,写出每段的起始和结束地址。(1)1000H(2)1234H(3)2300H(4)E000H(5)AB00H答:(1)10000H~1FFFFH(2)12340H~2233FH(3)23000H~32FFFH(4)E0000H~EFFFFH(5)AB000H~BAFFFH10.根据下列CS:IP的组合,求出要执行的下一条指令的存储器地址。(1)CS:IP=1000H:2000H(2)CS:IP=2000H:1000H(3)CS:IP=1A00H:B000H(4)CS:IP=3456H:AB09H答:(1)12000H(2)21000H(3)25000H(4)3F069H11.求下列寄存器组合所寻址的存储单元地址:(1)DS=1000H,DI=2000H(2)SS=2300H,BP=3200H(3)DS=A000H,BX=1000H(4)SS=2900H,SP=3A00H答:(1)12000H(2)26200H(3)A1000H(4)2CA00H12.若当前SS=3500H,SP=0800H,说明堆栈段在存储器中的物理地址,若此时入栈10个字节,SP内容是什么?若再出栈6个字节,SP为什么值?答:物理地址:35000H~35800H。入栈10个字节后SP为7F6H。再出栈6个字节后SP为7FCH。 课后答案网www.khdaw.com13.某程序数据段中存放了两个字,1EE5H和2A8CH,已知DS=7850H,数据存放的偏移地址为3121H及285AH。试画图说明它们在存储器中的存放情况。若要读取这两个字,需要对存储器进行几次操作?答:1EE5H的存储物理地址=78500H+3121H=7B621H,为奇数,故若要读取这个字,需要对存储器进行两次读操作。2A8CH的存储物理地址=78500H+285AH=7AD5AH,为偶数,故若要读取这个字,只需对存储器进行一次读操作。MM8CH2AHMME5H1EHM7850:00007850:285A7850:312114.存储器中每段容量最多64K字节,若用debug调试程序中的r命令,在屏幕上有如下显示:C:>debug-rAX=0000BX=0000CX=0079DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=10E4ES=10F4SS=21F0CS=31FFIP=0100NVUPDIPLNZNAPONC(1)试画出此时存储器分段示意图(2)写出状态标志OF、SF、ZF、CF的值答:(1)代码段首地址:31FF0H当前指令地址:320F0H数据段首地址:10E40H堆栈段首地址:21F00H堆栈段栈顶地址:31EEEH附加段首地址:10F40H(2)OF=SF=ZF=CF=015.说明8086系统中“最小模式”和“最大模式”两种工作方式的主要区别是什么?答:为了便于组成不同规模的系统,在8086芯片中设计了两种工作模式,即最小模式和最大模式。最小模式用于单机系统,系统中所需要的控制信号全部由8086直接提供;最大模式用于多处理机系统,系统中所需要的控制信号由总线控制器8288提供。16.8086系统中为什么要用地址锁存器?8282地址锁存器与CPU如何连接?答:为了减少引脚的数量,8086CPU的地址引脚和数据引脚分时复用,为了保证在总线操作周期中地址信号能有效而稳定的输出,必须使用地址锁存器。由于8086有20条地址线,故需使用三片8282,其中OE接地,STB与CPU的ALE相连,前两片8282的DI0~DI7分别与CPU的AD0~AD15相连,第三片8282的DI0~DI3分别与CPU的AD16~AD19相连,DI4与CPU的BHE相连。 课后答案网www.khdaw.com17.哪个标志位控制CPU的INTR引脚?答:IF,中断允许标志,IF=1时,允许可屏蔽中断,IF=0时,禁止可屏蔽中断。18.什么叫总线周期?在CPU读/写总线周期中,数据在哪个机器状态出现在数据总线上?答:CPU完成一次存储器访问或I/O端口操作所需要的时间称为一个总线周期,由几个T状态组成。在读/写总线周期中,数据在T2~T4状态出现在数据总线上。19.8284时钟发生器共给出哪几个时钟信号?答:OSC:振荡器输出信号,是内部振荡电路的TTL电平输出,其频率与晶振的频率相等,在PC/XT中,其频率为14.318MHzCLK:三分频OSC后的时钟,输出频率为4.77MHz,占空比为1/3,供8086CPU使用。PCLK:二分频CLK后的时钟,输出频率为2.38636MHz,TTL电平,占空比为1/2,供PC/XT机的外设使用。20.8086CPU重新启动后,从何处开始执行指令?答:重新启动后,CS=FFFFH,IP=0000H,故从物理地址为FFFF0H的位置开始执行指令。21.8086CPU的最小模式系统配置包括哪几部分?答:8086最小模式系统配置包括:8086CPU,存储器,I/O接口芯片,1片8284时钟发生器,3片8282地址锁存器,2片8286双向数据总线收发器。 课后答案网www.khdaw.com第三章1.分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。(1)MOVAX,2408H(2)MOVCL,0FFH(3)MOVBX,[SI](4)MOV5[BX],BL(5)MOV[BP+100H],AX(6)MOV[BX+DI],’$’(7)MOVDX,ES:[BX+SI](8)MOVVAL[BP+DI],DX(9)INAL,05H(10)MOVDS,AX答:(1)立即数,寄存器(2)立即数,寄存器(3)寄存器间接,寄存器(4)寄存器,寄存器相对(5)寄存器,寄存器相对(6)立即数,基址变址(7)基址变址,寄存器(8)寄存器,相对基址变址(9)直接端口寻址,寄存器(10)寄存器,寄存器2.已知:DS=1000H,BX=0200H,SI=02H,内存10200H~10205H单元的内容分别为10H,2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX寄存器的内容各是什么?(1)MOVAX,0200H(2)MOVAX,[200H](3)MOVAX,BX(4)MOVAX,3[BX](5)MOVAX,[BX+SI](6)MOVAX,2[BX+SI]答:(1)0200H(2)2A10H(3)0200H(4)5946H(5)463CH(6)6B59H3.设DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,数据段中变量名为VAL的偏移地址值为0030H,试说明下列源操作数字段的寻址方式是什么?物理地址值是多少?(1)MOVAX,[100H](2)MOVAX,VAL(3)MOVAX,[BX](4)MOVAX,ES:[BX](5)MOVAX,[SI](6)MOVAX,[BX+10H](7)MOVAX,[BP](8)MOVAX,VAL[BP][SI](9)MOVAX,VAL[BX][DI](10)MOVAX,[BP][DI]答:(1)直接,10100H(2)直接,10030H(3)寄存器间接,10100H(4)寄存器间接,20100H(5)寄存器间接,100A0H(6)寄存器相对,10110H(7)寄存器间接,35200H(8)相对基址变址,352D0H(9)相对基址变址,10154H(10)基址变址,35224H4.写出下列指令的机器码(1)MOVAL,CL(2)MOVDX,CX(3)MOV[BX+100H],3150H答:(1)1000101011000001B(2)1000101111010001B(3)110001111000011100000000000000010101000000110001B5.已知程序的数据段为:DATASEGMENTADB‘$’,10HBDB‘COMPUTER’CDW1234H,0FFHDDB5DUP(?)EDD1200459AHDATAENDS求下列程序段执行后的结果是什么。MOVAL,A 课后答案网www.khdaw.comMOVDX,CXCHGDL,AMOVBX,OFFSETBMOVCX,3[BX]LEABX,DLDSSI,ELESDI,E答:MOVAL,AAL=24HMOVDX,CDX=1234HXCHGDL,ADL=24H,A=34HMOVBX,OFFSETBBX=2MOVCX,3[BX]CX=5550HLEABX,DBX=000EHLDSSI,EDS=1200H,SI=459AHLESDI,EES=1200H,DI=459AH6.指出下列指令中哪些是错误的,错在什么地方。(1)MOVDL,AX(2)MOV8650H,AX(3)MOVDS,0200H(4)MOV[BX],[1200H](5)MOVIP,0FFH(6)MOV[BX+SI+3],IP(7)MOVAX,[BX][BP](8)MOVAL,ES:[BP](9)MOVDL,[SI][DI](10)MOVAX,OFFSET0A20H(11)MOVAL,OFFSETTABLE(12)XCHGAL,50H(13)INBL,05H(14)OUTAL,0FFEH答:(1)长度不匹配(2)立即数不能做目的操作数(3)段寄存器不能用立即数赋值(4)两个内存单元不能直接传送数据(5)IP不能用指令直接修改(6)指令中不能出现IP(7)BX/BP应与SI/DI搭配(8)正确(9)SI/DI应与BX/BP搭配(10)OFFSET后应跟内存单元(11)偏移地址为16位,AL长度不够(12)立即数不能用于XCHG(13)IN必须用AL/AX(14)操作数顺序反向;地址应为8位7.已知当前数据段中有一个十进制数字0~9的7段代码表,其数值依次为40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。要求用XLAT指令将十进制数57转换成相应的7段代码值,存到BX寄存器中,试写出相应的程序段。答:DATASEGMENTTABLEDB40H,79H,24H,30H,19H,12H,02H,78H,00H,18HDATAENDS⋯⋯MOVAL,5MOVBX,OFFSETTABLEXLATTABLEMOVCL,ALMOVAL,7XLATTABLEMOVBL,ALMOVBH,CL 课后答案网www.khdaw.com8.已知当前SS=1050H,SP=0100H,AX=4860H,BX=1287H,试用示意图表示执行下列指令过程中,堆栈中的内容和堆栈指针SP是怎样变化的。PUSHAXPUSHBXPOPBXPOPAX答:(1)指令执行前(2)执行PUSHAX后⋯⋯10500H(3)执行PUSHBX后(4)执行POPBX后(5)执行POPAX后⋯⋯87H12H60H48H9.下列指令完成什么功能?(1)ADDAL,DH(2)ADCBX,CX(3)SUBAX,2710H(4)DECBX(5)NEGCX(6)INCBL(7)MULBX(8)DIVCL答:(1)AL+DH→AL(2)BX+CX+CF→BX(3)AX-2710H→AX(fs214)BX-1→BX(5)0-CX→CX(6)BL+1→BL(7)AX*BX→DX,AX(8)AX/CL商→AL,余数→AH10.已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每条指令执行后的结果是什么?标志位CF等于什么?(1)ANDAH,CL(2)ORBL,30H(3)NOTAXSP->SP->10500H⋯⋯60H48HSP->⋯⋯10500H10500H⋯⋯48H60H12H87HSP->48H60H 课后答案网www.khdaw.com12H87H10500HSP->(4)XORCX,0FFF0H(5)TESTDH,0FH(6)CMPCX,00H(7)SHRDX,CL(8)SARAL,1(9)SHLBH,CL(10)SALAX,1(11)RCLBX,1(12)RORDX,CL答:(1)AX=0408H,CF=0(2)BX=0F36H,CF=0(3)AX=0DAF7H,CF不变(4)CX=0FFF4H,CF=0(5)DX=01864H,CF=0(6)CX=0004H,CF=0(7)DX=0186H,CF=0(8)AX=2504H,CF=0(9)BX=0F036H,CF=0(10)AX=4A10H,CF=0(11)BX=1E6C/1E6DH,CF=0(12)DX=4186H,CF=011.假设数据段定义如下:DATASEGMENTSTRINGDB‘hePersonalComputer&TV’DATAENDS试用字符串操作等指令编程完成以下功能:(1)把该字符串传送到附加段中偏移量为GET_CHAR开始的内存单元中。(2)比较该字符串是否与’heComputer’相同,若相同则将AL寄存器的内容置1,否则置0。并要求将比较次数送到BL寄存器中。(3)检查该字符串是否有’’,若有则用空格字符将其替换。(4)把字符串大写字母传送到附加段中以CAPS开始的单元中,其余字符传到以CHART开始的单元中。然后将数据段中存储上述字符串的单元清0。答:(1)CLDLEASI,STRINGLEADI,GET_CHARMOVCX,26REPMOVSB(2)补充在附加段定义STRING1DB‘hecomputer’MOVAL,1CLDLEASI,STRINGLEADI,STRING1MOVCX,12REPZCMPSBJZSKIPMOVAL,0SKIP:MOVBX,12SUBBX,CX(3)MOVAX,DATAMOVES,AXCLDMOVAL,"&" 课后答案网www.khdaw.comLEADI,STRINGMOVCX,26NEXT:REPNESCASBJZFINDJMPEXITFIND:MOVBYTEPTR[DI-1],""JCXZEXITJMPNEXTEXIT:(4)LEASI,STRINGLEADI,CAPSLEABX,CHARTMOVCX,26NEXT:MOVAL,[SI]CMPAL,’’JBOTHERCMPAL,’’JAOTHERMOVES:[DI],ALINCDIJMPSKIPOTHER:MOVES:[BX],ALINCBXSKIP:MOVBYTEPTR[SI],0INCSILOOPNEXT12.编程将AX寄存器中的内容以相反的顺序传送到DX寄存器中,并要求AX中的内容不被破坏,然后统计DX寄存器中‘1’的个数是多少。答::MOVBL,0PUSHAXMOVDX,0MOVCX,16NEXT:SHLAX,1JNCSKIPINCBLSKIP:RCRDX,1LOOPNEXTSTOP:POPAX13.设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H,(20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG_N标号的地址为1200:0278H,PROG_F标号的地址为3400H:0ABCH。说明下列每条指令执行完后,程序将分别转移到何处执行?(1)JMPPROG_N(2)JMPBX(3)JMP[BX] 课后答案网www.khdaw.com(4)JMPFARPROG_F(5)JMPDWORDPTR[BX]如将上述指令中的操作码JMP改成CALL,则每条指令执行完后,程序转向何处执行?并请画图说明堆栈中的内容和堆栈指针如何变化。答:(1)1200H:0278H(2)1200H:0300H(3)1200H:4800H(4)3400H:0ABCH(5)00FFH:4800H将操作码JMP改成CALL后:(1)1200H:0278H指令长度为3,则IP=0100H+3=0103H,入栈⋯⋯03H01H5000H:0000H5000H:03FEH5000H:0400H?.SP(2)1200H:0300H指令长度为2,则IP=0100H+2=0102H,入栈⋯⋯02H01H(3)1200H:4800H指令长度为2,则IP=0100H+2=0102H,入栈⋯⋯02H01H(4)3400H:0ABCH指令长度为5,则IP=0100H+5=0105H,入栈⋯⋯05H01H00H12H(5)__________00FFH:4800H指令长度为2,则IP=0100H+2=0102H,入栈5000H:0000H5000H:03FEH5000H:0400H?.SP5000H:0000H 课后答案网www.khdaw.com5000H:03FEH5000H:0400H?.SP5000H:0000H5000H:03FCH?.SP5000H:03FEH5000H:0400H⋯⋯02H01H00H12H14.在下列程序段括号中分别填入以下指令(1)LOOPNEXT(2)LOOPENEXT(3)LOOPNENEXT试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX的内容分别是什么。START:MOVAX,01HMOVBX,02HMOVDX,03HMOVCX,04HNEXT:INCAXADDBX,AXSHRDX,1()答:(1)AX=05HBX=10HCX=0DX=0(2)AX=02HBX=04HCX=03HDX=01H(3)AX=03HBX=07HCX=02HDX=015.某班有7个同学英语成绩低于80分,分数存在ARRAY数组中,试编程完成以下工作:(1)给每人加5分,结果存到NEW数组中(2)把总分存到SUM单元中答:DATASEGMENTARRAYDB?,?,?,?,?,?,?NEWDB7DUP(?)SUMDW0DATAENDSMOVAX,DATAMOVDS,AX(1)LEASI,ARRAYLEADI,NEWMOVCX,7NEXT:MOVAL,[SI]ADDAL,5MOV[DI],ALINCSI 课后答案网www.khdaw.comINCDILOOPNEXT(2)LEASI,ARRAYCLC?.SP5000H:0000H5000H:03FCH5000H:03FEH5000H:0400HMOVCX,7NEXT1:MOVAL,[SI]MOVAH,0ADCSUM,AXINCSILOOPNEXT116.中断向量表的作用是什么?它放在内存的什么区域内?中断向量表中的什么地址用于类型3的中断?答:中断向量表用来存放中断服务程序的入口地址。8086的256类中断的入口地址要占用1K字节,位于内存00000H~003FFH的区域内。中断向量表中0000CH~0000FH用于类型3的中断。17.设类型2的中断服务程序的起始地址为0485:0016H,它在中断向量表中如何存放?答:物理地址内容00008H16H00009H00H0000AH85H0000BH04H18.若中断向量表中地址为0040H中存放240BH,0042H单元里存放的是D169H,试问:(1)这些单元对应的中断类型是什么?(2)该中断服务程序的起始地址是什么?答:(1)10H(2)D169H:240BH19.简要说明8086响应类型0~4中断的条件是什么?答:类型0:除法错中断执行除法指令时,若除数为0或所得商超过寄存器能容纳的范围,则自动产生类型0中断。类型1:单步中断若CPU的单步标志TF=1,则每执行完一条指令后,自动产生类型1中断。类型2:不可屏蔽中断NMI当8086的NMI引脚上接收到由低变高的电平变化时,将自动产生类型2中断。类型3:断点中断若在程序中某位置设置断点,当程序执行到该断点时,则产生类型3中断。类型4:溢出中断若溢出标志OF=1,则可由溢出中断指令INTO产生类型4中断。 课后答案网www.khdaw.com第四章1.下列变量各占多少字节?A1DW23H,5876HA2DB3DUP(?),0AH,0DH,‘’A3DD5DUP(1234H,567890H)A4DB4DUP(3DUP(1,2,’BC’)答:A1占4个字节A2占6个字节A3占40个字节A4占60个字节2.下列指令完成什么功能?MOVAX,00FFHAND1122H+3344HMOVAL,15GE1111BMOVAX,00FFHLE255+6/5ANDAL,50MOD4ORAX,0F00FHAND1234OR00FFH答:(1)将0066H传送给AX(2)将0FFH传送给AL(3)将0FFFFH传送给AX(4)ANDAL,02H(5)ORAX,00FFH3.有符号定义语句如下:BUFDB3,4,5,’23’ABUFDB0LEQUABUF-BUF求L的值为多少?答:L=64.假设程序中的数据定义如下:PARDW?PNAMEDB16DUP(?)COUNTDD?PLENTHEQU$-PAR求PLENTH的值为多少?表示什么意义?答:PAR的偏移地址为0,PLENTH当前偏移地址$=2+16+4=22,$-PAR=22,故PLENTH的值为22。若在PLENTH所在行有变量定义,则$表示该变量的偏移地址,即$表示PLENTH所在行的当前偏移地址。故PLENTH表示从当前行到PAR之间定义的变量所占的字节个数。5.对于下面的数据定义,各条MOV指令执行后,有关寄存器的内容是什么?DA1DB?DA2DW10DUP(?)DA3DB‘BCD’MOVAX,TYPEDA1MOVBX,SIZEDA2MOVCX,LENGTHDA3答:AX=1,BX=20,CX=1 课后答案网www.khdaw.com6.下段程序完成后,AH等于什么?INAL,5FHTESTAL,80HJZL1MOVAH,0JMPSTOPL1:MOVAH,0FFHSTOP:HLT答:讨论从端口5FH输入的数据最高位的情况。若最高位为1,则AH=0;若最高位为0,则AH=0FFH。7.编程序完成下列功能:(1)利用中断调用产生5秒延时。(2)利用中断调用,在屏幕上显示1~9之间随机数。答:(1)可以利用中断类型1CH来处理,因为在系统时钟的中断处理程序中,时钟中断一次要调用一次INT1CH,即每隔55ms,产生一次1CH中断,要产生5秒延时,只要中断5s/55ms=91次即可。又因1CH中断处理程序中只有一条IRET指令,故可将用户的程序代替原有的INT1CH程序。DATASEGMENTCOUNTDW91;计数器MESSDB‘sdelayed!’0AH,0DH,’’DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATA,ES:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVAL,1CH;得到原中断向量MOVAH,35HINT21HPUSHES;存储原中断向量PUSHBXPUSHDSMOVDX,OFFSETDELAY;DELAY的偏移地址和段地址MOVAX,SEGDELAYMOVDS,AXMOVAL,1CH;设置中断向量MOVAH,25HINT21HPOPDSINAL,21H;设置中断屏蔽位ANDAL,0FEH 课后答案网www.khdaw.comOUT21H,ALSTIMOVDI,2000H;主程序延迟,在执行此段程序期间A1:MOVSI,3000H;产生中断A2:DECSIJNZA2DECDIJNZA1POPDX;取原中断向量POPDSMOVAL,1CHMOVAH,25HINT21HRETMAINENDPDELAYPROCNEARPUSHDSPUSHAXPUSHCXPUSHDXMOVAX,DATAMOVDS,AXSTIDECCOUNT;5秒计数JNZEXITMOVDX,OFFSETMESS;显示信息MOVAH,09HINT21HMOVCOUNT,91;5秒的值EXIT:CLIPOPDXPOPCXPOPAXPOPDSIRETDELAYENDPCODEENDSENDSTART(2)可以利用INT1AH,读取当前时间的1/100秒为随机数。CODESEGMENTASSUMECS:CODESTART:MOVAH,0INT1AH;读取当前时间CH:CL=时:分 课后答案网www.khdaw.comMOVAL,DL;DH:DL=秒:1/100秒MOVAH,0MOVBL,9DIVBLINCAHMOVDL,AHADDDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART8.编两个通过过程完成将AX中存放的二进制数转换成压缩型BCD码以及将BCD码转换成二进制数。答:(1)将AX中的二进制数先后除以1000,100和10,每次除法所得的商,即是BCD数的千位、百位和十位数,余数是个位数。子程序名:B2TOBCD输入参数:AX=十六位二进制数输出参数:CF=0,则AX=4位压缩型BCD码。CF=1,则要转换的数大于9999,AX不变。使用寄存器:CX:存放除数,DX:存放中间结果。B2TOBCDPROCFARCMPAX,9999;AX>9999,则CF置1JBETRANSTCJMPEXITTRAN:PUSHCXPUSHDXSUBDX,DX;DX清0MOVCX,1000;计算千位数DIVCXXCHGAX,DX;商在DX中,余数在AX中MOVCL,4SHLDX,CL;DX左移4位MOVCL,100;计算百位数DIVCLADDDL,AL;百位数加到DL中,DX左移4位MOVCL,4SHLDX,CLXCHGAL,AH;余数保留在AL中SUBAH,AHMOVCL,10;计算十位数 课后答案网www.khdaw.comDIVCLADDDL,AL;十位数加到DL中,DX左移4位MOVCL,4SHLDX,CLADDDL,AH;加个位数MOVAX,DX;结果送到AX中POPDXPOPCXEXIT:RETB2TOBCDENDP(2)将AX中4位BCD码顺序乘以1000,100,10和1,然后求和即得。子程序名:BCDTOB2输入参数:AX=4位压缩BCD码输出参数:AX=十六位二进制数使用寄存器:BX:暂存数据,CX:存放乘数,DX:存放中间结果BCDTOB2PROCFARPUSHBXPUSHCXPUSHDXMOVBX,AXMOVCL,4ROLAX,CLANDAX,000FHMOVCX,1000;乘以1000MULCXMOVDX,AXMOVAX,BXMOVCL,8ROLAX,CLANDAX,000FHMOVCL,100;乘以100MULCLADDDX,AXMOVAX,BXMOVCL,4SHRAX,CLANDAX,000FHMOVCL,10;乘以10MULCLADDDX,AXANDBX,000FHADDDX,BXMOVAX,DX 课后答案网www.khdaw.comPOPDXPOPCXPOPBXRETBCDTOB2ENDP9.编写两个通用过程,一个完成ASCII码转换成二进制数功能,另一个完成ASCII字符显示输出功能。答:(1)将AX中两位ASCII码先转化成数字,然后AH*10+AL。子程序名:ASCIITOB2输入参数:AX=2位ASCII码输出参数:AX=转换后二进制数使用寄存器:BX,CX,DXASCIITOB2PROCFARPUSHBXPUSHCXPUSHDXMOVBX,AXSUBAH,30HMOVAL,AHMOVCL,10;乘以10MULCLMOVDX,AXMOVAX,BXSUBAL,30HMOVAH,0ADDAX,DXPOPDXPOPCXPOPBXRETASCIITOB2ENDP(2)使用2号DOS功能调用显示字符。子程序名:DISPLAY输入参数:AX=2位ASCII码输出参数:无使用寄存器:BX,DXDISPLAYPROCFARPUSHBXPUSHDXMOVBX,AXMOVDL,AHMOVAH,2INT21H 课后答案网www.khdaw.comMOVAX,BXMOVDL,ALMOVAH,2INT21HPOPDXPOPBXRETDISPLAYENDP10.编制两个通用过程,完成十六进制数转换成ASCII码并将ASCII码字符显示。答:(1)子程序名:HEXTOASC输入参数:AX:4位十六进制数输出参数:DX,AX:4位ASCII码,DX高2位,AX低2位使用寄存器:BX,CX,DXHEXTOASCPROCFARPUSHBXPUSHCXPUSHDXMOVBX,AXMOVCL,4;转换AH高4位SHRAX,CLANDAX,0F00HADDAH,30HCMPAH,3AHJBA1ADDAH,7A1:MOVDH,AHMOVAX,BX;转换AH低4位ANDAX,0F00HADDAH,30HCMPAH,3AHJBA2ADDAH,7A2:MOVDL,AHMOVBH,BL;转换AL高4位MOVCL,4SHRBL,CLADDBL,30HCMPBL,3AHJBA3ADDBL,7A3:MOVAH,BLANDBH,0FH;转换AL低4位ADDBH,30H 课后答案网www.khdaw.comCMPBH,3AHJBA4ADDBH,7A4:MOVAL,BHPOPDXPOPCXPOPBXRETHEXTOASCENDP(2)子程序名:DISPLAYASC输入参数:DX,AX:4位ASCII码输出参数:无使用寄存器:BX,CXDISPLAYASCPROCFARPUSHBXPUSHCXMOVBX,DXMOVCX,AXMOVDL,BHMOVAH,02HINT21HMOVDL,BLINT21HMOVDL,CHINT21HMOVDL,CLINT21HMOVDL,’’INT21HPOPCXPOPBXRETDISPLAYASCENDP11.某程序可从键盘接收命令(0~5),分别转向6个子程序,子程序入口地址分别为P0~P5,编制程序,用跳转表实现分支结构。答:DATASEGMENTTABLEDW6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,TABLEMOVWORDPTR[SI],OFFSETP0 课后答案网www.khdaw.comMOVWORDPTR[SI+2],OFFSETP1MOVWORDPTR[SI+4],OFFSETP2MOVWORDPTR[SI+6],OFFSETP3MOVWORDPTR[SI+8],OFFSETP4MOVWORDPTR[SI+10],OFFSETP5MOVAH,1INT21HSUBAL,30HSHLAL,1MOVAH,0MOVSI,AXJMPTABLE[SI]P0:P1:P2:P3:P4:P5:MOVAH,4CHINT21HCODEENDSENDSTART12.在首地址为TABLE的数组中按递增次序存放着100个16位补码数,编写一个程序,把出现次数最多的数及其出现次数分别存放于AX和BL中。答:DATASEGMENTTABLEDW100DUP(?);数组中的数据是按增序排列的NUMDW?COUNTDW0DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDS;设置返回DOSSUBAX,AXPUSHAXMOVAX,DATAMOVDS,AX;给DS赋值BEGIN:MOVCX,100;循环计数器MOVSI,0NEXT:MOVDX,0MOVAX,TABLE[SI]COMP:CMPTABLE[SI],AX;计算一个数的出现次数JNEADDR 课后答案网www.khdaw.comINCDXADDSI,2LOOPCOMPADDR:CMPDX,COUNT;此数出现的次数最多吗?JLEDONEMOVCOUNT,DX;目前此数出现的次数最多,记下次数MOVNUM,AX;记下此数DONE:LOOPNEXT;准备取下一个数MOVCX,COUNT;出现最多的次数存入(CX)MOVAX,NUM;出现最多的数存入(AX)RETMAINENDPCODEENDS;以上定义代码段ENDSTART13.将键盘上输入的十六进制数转换成十进制数,在屏幕上显示。答:DATASEGMENTSTRINGDB"INPUT4HEXNUM:",0AH,0DH,"$"NUMDB10DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STRING;显示提示信息MOVAH,9INT21HMOVBP,4MOVDX,0CONT:MOVCL,4;输入4位十六进制数?.DXSHLDX,CLD1:MOVAH,1INT21HCMPAL,"0"JBD1CMPAL,"F"JAD1CMPAL,"A"JBA1SUBAL,7A1:SUBAL,30HMOVAH,0ADDDX,AXDECBP 课后答案网www.khdaw.comJNZCONTMOVSI,0;将DX转换成十进制数,再转换成ASCII码—NUMMOVAX,DXMOVDX,0MOVBX,10D2:DIVBXADDDL,30HMOVNUM[SI],DLINCSICMPAX,0JZEXITMOVDX,0JMPD2EXIT:MOVDL,0AH;显示十进制数MOVAH,2INT21HMOVDL,0DHINT21HD3:DECSIMOVDL,NUM[SI]MOVAH,2INT21HJNZD3MOVAH,4CHINT21HCODEENDSENDSTART14.将AX中的无符号二进制数转换成ASCII字符串表示的十进制数。答:将13题输入过程和输出过程去掉即得。DATASEGMENTNUMDB10DUP(?);转换后ASCII码按倒序存放于NUMDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,××××;无符号二进制数MOVSI,0;将AX转换成十进制数,再转换成ASCII码—NUMMOVDX,0MOVBX,10D2:DIVBXADDDL,30HMOVNUM[SI],DL 课后答案网www.khdaw.comINCSICMPAX,0JZEXITMOVDX,0JMPD2EXIT:MOVAH,4CHINT21HCODEENDSENDSTART15.从键盘输入20个有符号数,将它们排序并在屏幕上显示。答:DATASEGMENTNUMDW20DUP(?);存放20个有符号数ASCDB10DUP(?);输出时暂时保存每一个数的ASCII码DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,20MOVBX,10MOVSI,0MOVBP,0BEGIN:MOVDX,0;输入20个有符号数(十进制),并A1:MOVAH,1;转化为二进制数存放于NUM数组INT21HCMPAL,"";判断是否空格JZA2CMPAL,0DH;是否回车符JZA2CMPAL,"-";是否‘-’JZA3JMPA4A3:MOVBP,1JMPA1A4:PUSHAXMOVAX,DXMULBXMOVDX,AXPOPAXSUBAL,30HMOVAH,0ADDDX,AXJMPA1 课后答案网www.khdaw.comA2:CMPBP,1JNZA5NEGDX;若为负数,则取负A5:MOVNUM[SI],DXMOVBP,0ADDSI,2LOOPBEGINMOVDL,0DH;回车换行MOVAH,2INT21HMOVDL,0AHINT21HMOVBX,0;对20个有符号数按由小到大顺序排序MOVCX,19;采用冒泡法,排序后依然存放于NUM数组L1:MOVDX,CXL2:MOVAX,NUM[BX]CMPAX,NUM[BX+2]JLECONT1XCHGAX,NUM[BX+2]MOVNUM[BX],AXCONT1:ADDBX,2LOOPL2MOVCX,DXMOVBX,0LOOPL1MOVCX,20;将20个有符号数(二进制)转换为十进制数MOVSI,0;再转换为ASCII码并输出屏幕D1:MOVAX,NUM[SI]ADDSI,2TESTAX,1000HJZD4PUSHAXMOVDL,"-"MOVAH,2INT21HPOPAXNEGAXD4:MOVDI,0MOVDX,0MOVBX,10D2:DIVBXADDDL,30HMOVASC[DI],DL 课后答案网www.khdaw.comINCDICMPAX,0JZD3MOVDX,0JMPD2D3:MOVDL,ASC[DI-1]MOVAH,2INT21HDECDIJNZD3MOVDL,""MOVAH,2INT21HLOOPD1MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART16.编写多字节有符号数的加法程序,从键盘接收两个加数,在屏幕上显示结果。答:DATASEGMENTSTRING1DB"INPUTFIRSTNUM(HEX):",0DH,0AH,"$"STRING2DB"INPUTSECONDNUM(HEX):",0DH,0AH,"$"STRING3DB"THERESULTIS(HEX):",0DH,0AH,"$"NUM1DW0,0;存放加数1NUM2DW0,0;存放加数2RESULTDB0,0,0,0;存放结果DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STRING1;输入第一个加数(4位十六进制数)MOVAH,9INT21HMOVSI,2MOVCX,8CONT:PUSHCXCMPCX,4JNZB1SUBSI,2B1:MOVCL,4SHLNUM1[SI],CLC1:MOVAH,1 课后答案网www.khdaw.comINT21HCMPAL,"0"JBC1CMPAL,"F"JAC1CMPAL,"A"JBA1SUBAL,7A1:SUBAL,30HMOVAH,0ADDNUM1[SI],AXPOPCXLOOPCONTMOVDL,0DH;回车换行MOVAH,2INT21HMOVDL,0AHINT21HLEADX,STRING2;输入第二个加数(4位十六进制数)MOVAH,9INT21HMOVSI,2MOVCX,8CONT1:PUSHCXCMPCX,4JNZB2SUBSI,2B2:MOVCL,4SHLNUM2[SI],CLC2:MOVAH,1INT21HCMPAL,"0"JBC2CMPAL,"F"JAC2CMPAL,"A"JBA2SUBAL,7A2:SUBAL,30HMOVAH,0ADDNUM2[SI],AXPOPCXLOOPCONT1 课后答案网www.khdaw.comMOVDL,0DH;回车换行MOVAH,2INT21HMOVDL,0AHINT21HLEASI,NUM1;两数相加LEABX,NUM2LEADI,RESULTMOVCX,4CLCAD:MOVAL,[SI]ADCAL,[BX]MOV[DI],ALINCSIINCBXINCDILOOPADLEADX,STRING3;显示结果(4位十六进制数)MOVAH,9INT21HMOVCX,4MOVDI,3TT:PUSHCXMOVDL,RESULT[DI]MOVCL,4SHRDL,CLADDDL,30HCMPDL,3AHJBD1ADDDL,7D1:MOVAH,2INT21HMOVDL,RESULT[DI]ANDDL,0FHADDDL,30HCMPDL,3AHJBD2ADDDL,7D2:MOVAH,2INT21HDECDIPOPCXLOOPTT 课后答案网www.khdaw.comMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART17.编写2位非压缩型BCD码相乘的程序。答:转化成加法进行累加运算。DATASEGMENTDA1DB09H,09HDA2DB09H,08HRESULTDB4DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,DA2+1;计算加法次数MOVBL,10MULBLMOVBL,DA2MOVBH,0ADDAX,BXMOVCX,AXCONT:MOVAH,0;通过循环做累加MOVAL,RESULTADDAL,DA1AAAMOVRESULT,ALMOVAL,RESULT+1ADDAL,AHMOVAH,0AAAADDAL,DA1+1AAAMOVRESULT+1,ALMOVAL,RESULT+2ADDAL,AHMOVAH,0AAAMOVRESULT+2,ALMOVAL,RESULT+3ADDAL,AHMOVAH,0AAA 课后答案网www.khdaw.comMOVRESULT+3,ALLOOPCONTMOVAH,4CH;返回DOSINT21HCODEENDSENDSTART18.编写完整的程序求N!,求N大于6时的运算结果,并在屏幕上显示结果。答:DATASEGMENTNDB8;求8的阶乘DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,NMOVAH,0CALLFACT;调用过程求N!,AX=N,BX=N!CALLB2TODEC;调用过程将结果转换为十进制,然后屏幕显示MOVAH,4CHINT21HFACTPROCCMPAL,0JNZCHNMOVBX,1RETCHN:PUSHAXDECALCALLFACT;递归调用N!=N*(N-1)!POPAXMULBXMOVBX,AXRETFACTENDPB2TODECPROCMOVCX,10000CALLBINMOVCX,1000CALLBINMOVCX,100CALLBINMOVCX,10CALLBINMOVCX,1 课后答案网www.khdaw.comCALLBINRETB2TODECENDPBINPROCMOVAX,BXMOVDX,0DIVCXMOVBX,DXMOVDL,ALADDDL,30HMOVAH,2INT21HRETBINENDPCODEENDSENDSTART19.在附加段有一个数组,首地址为BUFF,数组中第一个字节存放了数组的长度。编一个程序在数组中查找0,找到后把它从数组中删去,后续项向前压缩,其余部分补0。答:DATASEGMENTBUFFDB10,1,0,2,3,4,0,5,6,7,0;10个数MEQU0DATAENDSCODESEGMENTASSUMECS:CODE,ES:DATA,DS:DATASTART:MOVAX,DATA;初始化ES,DSMOVES,AXMOVDS,AXMOVAL,M;关键字M存入ALMOVDI,OFFSETBUFFMOVCL,[DI];数组长度存入CXMOVCH,0INCDI;指向数组起始地址CLD;清方向标志L1:REPNESCASB;重复搜索关键字JNZSTOP;未找到,转STOP结束JCXZSTOP;最后一个数是M,转STOPPUSHDI;关键字下一单元地址和循PUSHCX;环次数入栈保护DEL:MOVBL,[DI];前移,末尾补0MOV[DI-1],BLINCDILOOPDELMOVBYTEPTR[DI-1],0 课后答案网www.khdaw.comPOPCX;恢复CX,DIPOPDIDECDI;由于REPNESCASB已自动加1JMPL1STOP:MOVAH,4CHINT21HCODEENDSENDSTART20.编程完成将第二个字符串插入到第一个字符串的指定位置上。答:DATASEGMENTSTRING1DB"THISISTHEFIRSTSTRING!","$"DB100DUP(0);缓冲区NUM1DW?;字符串1的长度STRING2DB"thesecondstring!","$"NUM2DW?;字符串2的长度POSDW8;插入位置DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEADI,STRING1;求字符串1的长度存入NUM1MOVAL,"$"MOVNUM1,0CLDD1:SCASBJZD2INCNUM1JMPD1D2:LEADI,STRING2;求字符串2的长度存入NUM2MOVAL,"$"MOVNUM2,0CLDD3:SCASBJZD4INCNUM2JMPD3D4:LEASI,STRING1;将字符串1自插入位置开始的字符向后移动,ADDSI,NUM1;空出位置以便插入字符串2MOVDI,SIADDDI,NUM2STD 课后答案网www.khdaw.comMOVCX,NUM1SUBCX,POSINCCXREPMOVSBLEASI,STRING2;将字符串2插入到字符串1指定位置LEADI,STRING1ADDDI,POSCLDMOVCX,NUM2REPMOVSBLEADX,STRING1MOVAH,9INT21HMOVAH,4CHINT21HCODEENDSENDSTART21.将学生的班级、姓名、学号、课程名、成绩定义为一个结构,用结构预置语句,产生5个学生的成绩登记表,编程序将成绩小于60分的学生姓名、成绩显示出来。答:STUDENTSTRUCCLASSDB?;班级NAMDB"ABCDE$";姓名NUMDB?;学号COURSEDB"ABCD";课程SCOREDB?;成绩STUDENTENDSDATASEGMENTSTUDENT1STUDENT<1,"XIAOA$",001,"MATH",70>STUDENT2STUDENT<1,"XIAOB$",002,"MATH",80>STUDENT3STUDENT<1,"XIAOC$",003,"MATH",50>STUDENT4STUDENT<1,"XIAOD$",004,"MATH",90>STUDENT5STUDENT<1,"XIAOE$",005,"MATH",55>DATAENDSCODESEGMENTASSUMECS:CODE,ds:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,5;通过循环结构进行筛选MOVSI,0CONT:MOVAL,STUDENT1.SCORE[SI];取成绩CMPAL,60JAED1LEADX,STUDENT1.NAM[SI];小于60则显示姓名和成绩 课后答案网www.khdaw.comMOVAH,9INT21HMOVDL,""MOVAH,2INT21HMOVAL,STUDENT1.SCORE[SI];成绩转换为ASCII码显示MOVAH,0MOVBL,10DIVBLPUSHAXMOVDL,ALADDDL,30HMOVAH,2INT21HPOPAXMOVDL,AHADDDL,30HMOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HMOVDL,0AHINT21HD1:ADDSI,13LOOPCONTMOVAH,4CHINT21HCODEENDSENDSTART22.编程序统计学生的数学成绩,分别归类90分~99分,80分~89分,70分~79分,60分~69分及60分以下,并将各段的人数送入内存单元中。答:设学生人数为字节,成绩为压缩BCD码,且都是合法的。DATASEGMENTBUFFDBXXH,⋯⋯.ANUMEQU$-BUFFSNUMDB5DUP(0);存放各类成绩统计结果BUFF1DBANUMDUP(0);存放60分以下成绩BUFF2DBANUMDUP(0);存放60分~69分成绩BUFF3DBANUMDUP(0);存放70分~79分成绩BUFF4DBANUMDUP(0);存放80分~89分成绩BUFF5DBANUMDUP(0);存放90分以上成绩DATAENDS 课后答案网www.khdaw.comCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVCL,ANUM;取学生人数MOVCH,0MOVBH,0MOVSI,OFFSETBUFFMOVDI,OFFSETSNUMD1:MOVAL,[SI]CMPAL,60HJAENEXT1MOVBL,[DI]MOVBUFF1[BX],ALINCBYTEPTR[DI]JMPNEXT5NEXT1:CMPAL,69HJANEXT2MOVBL,[DI+1]MOVBUFF2[BX],ALINCBYTEPTR[DI+1]JMPNEXT5NEXT2:CMPAL,79HJANEXT3MOVBL,[DI+2]MOVBUFF2[BX],ALINCBYTEPTR[DI+2]JMPNEXT5NEXT3:CMPAL,89HJANEXT4MOVBL,[DI+3]MOVBUFF3[BX],ALINCBYTEPTR[DI+3]JMPNEXT5NEXT4:MOVBL,[DI+4]MOVBUFF4[BX],ALINCBYTEPTR[DI+4]NEXT5:INCSILOOPD1MOVAH,4CHINT21HCODEENDS 课后答案网www.khdaw.comENDSTART23.编制宏定义,将存储器区中一个用’’结尾的字符串传送到另一个存储器区中,要求源地址、目的地址、串结尾符号可变。答:SENDMACROSCHARS,DCHARS,FLAGLOCALNEXT,EXIT;LOCAL用于解决宏定义内的标号问题PUSHAX;SCHARS源串地址,DCHARS目的串地址PUSHSI;FLAG串结尾符号MOVSI,0NEXT:MOVAL,SCHARS[SI]MOVDCHARS[SI],ALCMPAL,FLAGJZEXITINCSIJMPNEXTEXIT:POPSIPOPAXENDM24.定义宏指令名FINSUM:它完成比较两个数X和Y,若X>Y,则执行X+2*Y结果送到SUM,若X≤Y,则执行2*X+Y结果送到SUM。答:FINSUMMACROX,Y,SUMIFXGTYMOVAX,YSHLAX,1ADDAX,XMOVSUM,AXELSEMOVAX,XSHLAX,1ADDAX,YMOVSUM,AXENDIFENDM25.DOS功能调用需要在AH寄存器中存放不同的功能码,试将这些功能调用定义成宏指令DOS,再定义宏指令DISP,完成显示字符的功能,并展开宏调用DISP‘’。答:DOSMACRONUMMOVAH,NUMINT21HENDMDISPMACROZIFUMOVDL,ZIFUDOS02HENDM宏调用:DISP‘’宏展开:MOVDL,‘’MOVAH,02H 课后答案网www.khdaw.comINT21H26.编一段程序产生乐曲。答:演奏儿歌《一闪一闪亮晶晶》11|55|66|5-|44|33|22|1-|55|44|33|2-|55|44|33|2-|11|55|66|5-|44|33|22|1-||DATASEGMENTFREQUECYDW65535,262,294,330,349,392,440,494;各音阶频率,65535对应0,DW523,578,659,698,784,880,988;表示不发声DW1046,1175,1318,1397,1568,1760,1976TABLEDW0,8,8,12,12,13,13,12,0,11,11,10,10,9,9,8,0;乐谱各音符频率在DW12,12,11,11,10,10,9,0,12,12,11,11,10,10,9,0;FREQUECY中的相对DW8,8,12,12,13,13,12,0,11,11,10,10,9,9,8,0;位置DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBP,49;CISHULEASI,TABLECONT:MOVBX,[SI]INCSIINCSISHLBX,1MOVDI,[FREQUECY+BX]CALLPLAYDECBPJNZCONTEXIT:MOVAH,4CHINT21HPLAYPROCMOVAL,10110110BOUT43H,ALMOVDX,12HMOVAX,34DEHDIVDIOUT42H,ALMOVAL,AHOUT42H,ALINAL,61HMOVAH,ALORAL,03HOUT61H,AL 课后答案网www.khdaw.comMOVCX,0FFFFHDELAY:MOVDX,1700HGOON:DECDXJNZGOONLOOPDELAYINAL,61HMOVAH,ALANDAL,0FCHOUT61H,ALMOVCX,0FFFFHDELAY1:MOVDX,100HGOON1:DECDXJNZGOON1LOOPDELAY1RETPLAYENDPCODEENDSENDSTART 课后答案网www.khdaw.com第五章1.静态RAM与动态RAM有何区别?答:(1)静态RAM内存储的信息只要电源存在就能一直保持,而动态RAM的信息需要定时刷新才能保持(2)静态RAM的集成度比较低,运行速度快,而动态RAM的集成度高,运行相对较慢(3)静态RAM造价成本高,动态RAM价格便宜2.ROM、PROM、EPROM、EEPROM在功能上各有何特点?答:ROM是只读存储器,根据写入方式的不同可以分为四类:掩膜型ROM、PROM、EPROM和EEPROM。掩膜型ROM中信息是厂家根据用户给定的程序或数据,对芯片图形掩膜进行两次光刻而写入的,用户对这类芯片无法进行任何修改。PROM出厂时,里面没有信息,用户采用一些设备可以将内容写入PROM,一旦写入,就不能再改变了,即只允许编程一次。EPROM可编程固化程序,且在程序固化后可通过紫外光照擦除,以便重新固化新数据。EEPROM可编程固化程序,并可利用电压来擦除芯片内容,以重新编程固化新数据。3.DRAM的CAS和RAS输入的用途是什么?答:CAS为列地址选通信号,用于指示地址总线上的有效数据为列地址;RA行地址选通信号,用于指示地址总线上的有效数据为列地址。S为4.什么是Cache?作用是什么?它处在微处理机中的什么位置?答:Cache也称为高速缓存,是介于主存和CPU之间的高速小容量存储器。为了减少CPU与内存之间的速度差异,提高系统性能,在慢速的DRAM和快速CPU之间插入一速度较快、容量较小的SRAM,起到缓冲作用,使CPU既可以以较快速度存取SRAM中的数据,又不使系统成本上升过高,这就是Cache的作用。Cache在微处理机中的位置如下图:5.直接映像Cache和成组相联Cache的组成结构有什么不同?答:直接映象Cache是将主存储器中每一页大小分成和Cache存储器大小一致,Cache中每一块分配一个索引字段以确定字段,这样可以通过一次地址比较即可确定是否命中,但如果频繁访问不同页号主存储器时需要做频繁的转换,降低系统性能;成组相联Cache内部有多组直接映象的Cache,组间采用全关联结构,并行地起着高速缓存的作用。访问时需要进行两次比较才能确定是否命中。6.为什么要保持Cache内容与主存储器内容的一致性?为了保持Cache与主存储器内容的一致性应采取什么方法?答:由于Cache的内容只是主存部分内容的拷贝,故应当与主存内容保持一致。数据不一致问题通常是由于更新了Cache的数据而没有更新与其关联的存储器的数据,或更新了存储器数据却没有更新Cache的内容所引起的。为了保持Cache与主存储器内容的一致性,有两种写入策略:(1)通写法在此方法中,当CPU写入数据到Cache中后,Cache就立即将其写入主存中,使主存始终保持Cache中的最新内容。此方法简单,更新内容不会丢失,但每次对Cache的修改同时要写入主存储器,总线操作频繁,影响系统性能。(2)回写法 课后答案网www.khdaw.com此方法中,Cache的作用好像缓冲区一样,当CPU写入数据到Cache中后,Cache并不立即将其回写到主存中,而是等到系统总线空闲时,才将Cache中的内容回写到主存中,此方法使得CPU可以持续运行而不必等待主存的更新,性能比通写法要提高很多,但其Cache控制器复杂,价格高。7.用1024×1位的RAM芯片组成16K×8位的存储器,需要多少芯片?在地址线中有多少位参与片内寻址?多少位组合成片选择信号?(设地址总线为16位)答:由于所用的芯片为1024×1位,构成1024×8位(即1K×8位)的存储器需要8片,因此组成16K×8位的存储器需要16×8=128片。片内有1024个单元,需要10根地址线。16组(每组8片)存储器需要16根片选信号,至少需要4根地址线经译码器输出。8.现有一存储体芯片容量为512×4位,若要用它组成4KB的存储器,需要多少这样的芯片?每块芯片需要多少寻址线?整个存储系统最少需要多少寻址线?答:4K×8/512×4=16片每块芯片内有512个单元,故需要9根地址线整个存储系统最少需要12根地址线9.利用1024×8位的RAM芯片组成4K×8位的存储器系统,试用A15~A12地址线用线性选择法产生片选信号,存储器的地址分配有什么问题,并指明各芯片的地址分配。答:组成4K×8的存储器,那么需要4片这样的芯片:将A15取反后分配芯片1的CS;将A14取反后分配给芯片2的CS;将A13取反后分配芯片3的CS;将A12取反后分配给芯片4的CS。芯片1的地址范围8000H~83FFH、8400H~87FFH、8800H~8BFFH、8C00H~8FFFH芯片2的地址范围4000H~43FFH、4400H~47FFH、4800H~4BFFH、4C00H~4FFFH芯片3的地址范围2000H~23FFH、2400H~27FFH、2800H~2BFFH、2C00H~2FFFH芯片4的地址范围1000H~13FFH、1400H~17FFH、1800H~1BFFH、1C00H~1FFFH这样会造成地址的重叠。10.当从存储器偶地址单元读一个字节数据时,写出存储器的控制信号和它们的有效逻辑电平信号。(8086工作在最小模式)答:8086发出20位地址信息和BHE=1,通过地址锁存信号锁存至8282,然后发出M/IO=1和RD=0等控制信号,20位地址信号和BHE=1送给存储器,经过译码,选中偶地址单元一字节,将其数据读出,送至数据总线,经过由DEN=0和DT/R=0控制的数据收发器8286传送至CPU。11.当要将一个字写入到存储器奇地址开始的单元中去,列出存储器的控制信号和它们的有效逻辑电平信号。(8086工作在最小模式)答:此时要启动2个写总线周期,第一个写周期将字的低8位写入存储器奇地址单元,第二个写周期将字的高8位写入存储器奇地址单元下一个单元。第一个写周期中,BHE=0,第二个写周期中,BHE=1。其余信号M/IO=1,WR=0,DEN=0,DT/R=112.设计一个64K×8存储器系统,采用74LS138和EPROM2764器件,使其寻址存储器的地址范围为40000H~4FFFFH。答:因为EPROM2764是8K×8的ROM,所以要构成64K×8的存储器系统,需要8片EPROM2764。其中CPU的A12~A0直接与8片EPROM的A12~A0相连(没有考虑驱动能力问题),A15、A14和A13与138的A、B、C三个端口相连,其他地址线(A19~A16)和M/IO组合连到G1、G2A和G2B上,确保A19=0、A18=1、A17=0和A16=0即可。 课后答案网www.khdaw.com13.用8K×8位的EPROM2764、8K×8位的RAM6264和译码器74LS138构成一个16K字ROM、16K字RAM的存储器子系统。8086工作在最小模式,系统带有地址锁存器8282,数据收发器8286。画出存储器系统与CPU的连接图,写出各块芯片的地址分配。答:CED77~~D00D1155~~D88A1122~~A00OECEA1133~~A11RD11##22776644CED77~~D00D1155~~D88A1122~~A00OECEA1133~~A11RD22##22776644CE22D77~~D00D1155~~D88A1122~~A00WEECE11A1133~~A11WR33##66226644CE22D77~~D00D1155~~D88A1122~~A00WECE11A1133~~A11WR44##66226644CE22CE22A00Y00 课后答案网www.khdaw.comY11Y22Y33BHEM//IIOA1199A1188A1177A1166A1155A1144BACG22BBG22AAG11BHEEY22Y33A00A00CBAA19A18A17A16A15A14A13~A0100000Y0有效80000~83FFFH100001Y1有效84000~87FFFH100010Y2有效88000~8BFFFH100011Y3有效8C000~8FFFFH14.上题中若从74LS138的Y2开始选择ROM和RAM芯片,写出各块芯片的地址分配。答:CBAA19A18A17A16A15A14A13~A0100010Y2有效88000~8BFFFH100011Y3有效8C000~8FFFFH100100Y4有效90000~93FFFH100101Y5有效94000~97FFFH 课后答案网www.khdaw.com第六章1.CPU与外设交换数据时,为什么要通过I/O接口进行?I/O接口电路有哪些主要功能?答:CPU和外设之间的信息交换存在以下一些问题:速度不匹配;信号电平不匹配;信号格式不匹配;时序不匹配。I/O接口电路是专门为解决CPU与外设之间的不匹配、不能协调工作而设置的,处于总线和外设之间,一般应具有以下基本功能:⑴设置数据缓冲以解决两者速度差异所带来的不协调问题;⑵设置信号电平转换电路,来实现电平转换。⑶设置信息转换逻辑,如模拟量必须经A/D变换成数字量后,才能送到计算机去处理,而计算机送出的数字信号也必须经D/A变成模拟信号后,才能驱动某些外设工作。⑷设置时序控制电路;⑸提供地址译码电路。2.在微机系统中,缓冲器和锁存器各起什么作用?答:缓冲器多用在总线上,可提高总线驱动能力、隔离前后级起到缓冲作用,缓冲器多半有三态输出功能。锁存器具有暂存数据的能力,能在数据传输过程中将数据锁住,然后在此后的任何时刻,在输出控制信号的作用下将数据传送出去。3.什么叫I/O端口?一般的接口电路中可以设置哪些端口?计算机对I/O端口编址时采用哪两种方法?在8086/8088CPU中一般采用哪些编址方法?答:在CPU与外设通信时,传送的信息主要包括数据信息、状态信息和控制信息。在接口电路中,这些信息分别进入不同的寄存器,通常将这些寄存器和它们的控制逻辑统称为I/O端口。一般的接口电路中可以设置数据端口、状态端口和命令端口。计算机对I/O端口编址时采用两种方法:存储器映像寻址方式、I/O单独编址方式。在8086/8088CPU中一般采用I/O单独编址方式。4.CPU与外设间传送数据主要有哪几种方式?答:CPU与外设间的数据传送方式主要有:程序控制方式、中断方式、DMA方式。程序控制传送方式:CPU与外设之间的数据传送是在程序控制下完成的。⑴无条件传送方式:也称为同步传送方式,主要用于对简单外设进行操作,或者外设的定时是固定的或已知的场合。⑵条件传送:也称为查询式传送方式,在开始传送前,必须先查询外设已处于准备传送数据的状态,才能进行传送。采用中断方式:CPU平时可以执行主程序,只有当输入设备将数据准备好了,或者输出端口的数据缓冲器已空时,才向CPU发中断请求。CPU响应中断后,暂停执行当前的程序,转去执行管理外设的中断服务程序。在中断服务程序中,用输入或输出指令在CPU和外设之间进行一次数据交换。等输入或输出操作完成之后,CPU又回去执行原来的程序。DMA方式:也要利用系统的数据总线、地址总线和控制总线来传送数据。原先,这些总线是由CPU管理的,但当外设需要利用DMA方式进行数据传送时,接口电路可以向CPU提出请求,要求CPU让出对总线的控制权,用DMA控制器来取代CPU,临时接管总线,控制外设和存储器之间直接进行高速的数据传送。这种控制器能给出访问内存所需要的地址信息,并能自动修改地址指针,也能设定和修改传送的字节数,还能向存储器和外设发出相应的读/写控制信号。在DMA传送结束后,它能释放总线,把对总线的控制权又交还给CPU。5.说明查询式输入和输出接口电路的工作原理。 课后答案网www.khdaw.com答:查询式传送方式也称为条件传送方式。一般情况下,当CPU用输入或输出指令与外设交换数据时,很难保证输入设备总是准备好了数据,或者输出设备已经处在可以接收数据的状态。为此,在开始传送前,必须先确认外设已处于准备传送数据的状态,才能进行传送,于是就提出了查询式传送方式。查询式传送方式的工作过程:在传送数据前,CPU要先执行一条输入指令,从外设的状态口读取它的当前状态。如果外设未准备好数据或处于忙碌状态,则程序要转回去反复执行读状态指令,不断检测外设状态;如果该外设的输入数据已经准备好,CPU便可执行输入指令,从外设读入数据。查询式输入方式的接口电路如下:查询式输入方式的工作过程:当输入设备准备好数据后,就向I/O接口电路发一个选通信号。此信号有两个作用:一方面将外设的数据打入接口的数据锁存器中,另一方面使接口中的D触发器的Q端置l。CPU首先执行IN指令读取状态口的信息,这时M/IO和RD信号均变低,M/IO为低,使I/O译码器输出低电平的状态口片选信号CS1。CS1和RD经门1相与后的低电乎输出,使三态缓冲器开启,于是Q端的高电平经缓冲器(1位)传送到数据线上的READY(D0)位,并被读入累加器。程序检测到READY位为1后,便执行IN指令读数据口。这时M/IO和RD信号再次有效,先形成数据口片选信号CS2,CS2和RD经门2输出低电平。它一方面开启数据缓冲器,将外设送到锁存器中的数据经8位数据缓冲器送到数据总线上后进入累加器,另一方面将D触发器清0,一次数据传送完毕。接着就可以开始下一个数据的传送。当规定数目的数据传送完毕后,传送程序结束,程序将开始处理数据或进行别的操作。查询式输出方式的接口电路如下:查询式输出方式的工作过程:当CPU准备向外设输出数据时,它先执行IN指令读取状态口的信息。这时,低电平的M/IO和有效的端口地址信号使I/O译码器的状态口片选信号CS1变低,CS1再和有效的RD信号经门l相与后输出低电平,它使状态口的三态门开启,从数据总线的D1位读入BUSY状态。若BUSY=l,表示外设处在接收上一个数据的忙碌状态。只有在BUSY=0时,CPU才能向外设输出新的数据。当CPU检查到BUSY=0时,便执行OUT指令将数据送向数据输出口。这时低电平的M/IO使I/O译码器的状态口片选信号CS2变低,CS2再和WR信号经门2相与后输出低电平的选通信号,它用来选通数据锁存器,将数据送向外设。同时,选通信号的后沿还使D触发器翻转,置Q为高电平,即把状态口的BUSY位置成l,表示忙碌。当输出设备从接口中取走数据后,就送回一个应答信号ACK,它将D触发器清0,即置BUSY=0,允许CPU送出下一个数据。6.简述在微机系统中,DMA控制器从外设提出请求到外设直接将数据传送到存储器的工作过程。答:DMA方式,外设向內存传输数据的过程:当一个接口中有数据要输入时,就向DMA控制器发送DMA请求;DMA控制器接收到请求后,便往控制总线上发一个总线请求;如果CPU允许让出总线,则发一个总线允许信号;DMA控制器接到此信号后,就将地址寄存器的内容送到地址总线上,同时往接口发一个DMA回答信号,并发一个1/O读信号和一个内存写信号;接口接到DMA回答信号以后,将数据送到数据总线上,并撤除DMA请求信号;内存在接收到数据以后,一般往DMA控制器回送一个准备好信号,DMA控制器的地址寄存器内容加1或减1,计数器的值减1,而且撤除总线请求信号,这样,就完成了对一个数据的DMA输入传输。DMA传输结束时,往接口发一个结束信号,向CPU交回总线控制权。其状态寄存器的传输结束标 课后答案网www.khdaw.com志置“1”。查询时,CPU在主程序中通过查询状态寄存器的传输结束标志,决定是否进行后续处理。7.某一个微机系统中,有8块I/O接口芯片,每个芯片占有8个端口地址,若起始地址为300H,8块芯片的地址连续分布,用74LS138做译码器,试画出端口译码电路,并说明每块芯片的端口地址范围。答:8.什么叫总线?总线分哪几类?在微型计算机中采用总线结构有什么好处?答:在微型计算机系统中,将用于各部件之间传送信息的公共通路称为总线(BUS)。总线分三类:片级总线、系统总线、外部总线。在微型计算机中采用总线的好处有:(1)总线具有通用性,只要按统一的总线标准进行设计或连接,不同厂家生产的插件板可以互换,不同系统之间可以互连和通信,很适合于大批量生产、组装和调试,也便于更新和扩充系统。(2)对于用户来说,可以根据自身需要,灵活地选购接口板和存储器插件,还可以根据总线标准的要求,自行设计接口电路板,来组装成适合自己应用需要的系统或更新原有系统。9.PC总线和ISA总线各用于何种类型的微型计算机中?它们的数据总线各有多少根?答:IBMPC/XT使用的总线称为PC总线,有8条数据线。ISA总线又称AT总线,是以80286为CPU的PC/AT机及其兼容机所用的总线,具有16条数据线。10.PCI总线有哪些主要特点?根据PCI总线引脚图和典型时序图,说明如何完成PCI突发读交易。答:PCI总线的特点:(1)PCI总线传输数据的位数为32位,也可扩展到64位。32位PCI总线在读写传送中,以33MHz的频率进行,传输速率为132MB/s,当数据宽度为64位时,以66MHz的频率运行,传输速率高达528MB/s。(2)PCI总线支持突发传送方式(BurstTransfer)。(3)PCI总线支持即插即用(PlugandPlay,PnP)功能。(4)PCI总线与微处理器之间不直接相连,而是通过与CPU结构无关的中间部件桥接器相连。PCI总线突发读交易的过程:PCI突发读交易以周期帧信号FRAME#有效后开始进行PCI交易,交易的第一个时钟周期为地址时段,此时主设备通过驱动地址总线寻址目标,驱动PCI命令确定交易类型。因PCI的地址线/数据线(AD)和命令信号(C/BE#)都是分时复用的,所以每个PCI目标设备在下一个时钟周期的上升沿将地址信号和命令信号锁存,然后经译码,确定自己是否是本次寻找的目标和将要交易的类型是什么。PCI目标确定自己是交易的目标后,则将设备选择信号DEVSEL#置为有效状态,向交易的启动方声明本次交易有效。在主设备的IRDY#和目标设备的TRDY#都有效的情况下可以连续进行交易,传送多个数据,直至交易结束为止。 课后答案网www.khdaw.com第七章1.什么叫中断?什么叫可屏蔽中断和不可屏蔽中断?答:当CPU正常运行程序时,由于微处理器内部事件或外设请求,引起CPU中断正在运行的程序,转去执行请求中断的外设(或内部事件)的中断服务子程序,中断服务程序执行完毕,再返回被中止的程序,这一过程称为中断。可屏蔽中断由引脚INTR引入,采用电平触发,高电平有效,INTR信号的高电平必须维持到CPU响应中断才结束。可以通过软件设置来屏蔽外部中断,即使外部设备有中断请求,CPU可以不予响应。当外设有中断申请时,在当前指令执行完后,CPU首先查询IF位,若IF=0,CPU就禁止响应任何外设中断;若IF=1,CPU就允许响应外设的中断请求。不可屏蔽中断由引脚NMI引入,边沿触发,上升沿之后维持两个时钟周期高电平有效。不能用软件来屏蔽的,一旦有不可屏蔽中断请求,如电源掉电等紧急情况,CPU必须予以响应。2.列出微处理器上的中断引脚和与中断有关的指令。答:INTR:可屏蔽中断请求输入引脚。NMI:不可屏蔽中断请求输入引脚INTA:可屏蔽中断响应引脚INTn:软件中断指令,其中n为中断类型号INTO:溢出中断,运算后若产生溢出,可由此指令引起中断。CLI:中断标志位IF清0STI:置位中断标志位为13.8086/8088系统中可以引入哪些中断?答:(1)外部中断两种外部中断:不可屏蔽中断NMI和可屏蔽中断INTR(2)内部中断内部中断又称软件中断,有三种情况引起:①INTn:中断指令引起的中断②CPU的某些运算错误引起的中断:包括除法错中断和溢出中断③由调试程序debug设置的中断:单步中断和断点中断。4.CPU响应中断的条件是什么?简述中断处理过程。答:CPU响应中断要有三个条件:外设提出中断申请;本中断位未被屏蔽;中断允许。可屏蔽中断处理的过程一般分成如下几步:中断请求;中断响应;保护现场;转入执行中断服务子程序;恢复现场和中断返回。CPU在响应外部中断,并转入相应中断服务子程序的过程中,要依次做以下工作:⑴从数据总线上读取中断类型号,将其存入内部暂存器。⑵将标志寄存器PSW的值入钱。⑶将PSW中的中断允许标志IF和单步标志TF清0,以屏蔽外部其它中断请求,避免CPU以单步方式执行中断处理子程字。⑷保护断点,将当前指令下面一条指令的段地址CS和指令指针IP的值入栈,中断处理完毕后,能正确返回到主程序继续执行。⑸根据中断类型号到中断向量表中找到中断向量,转入相应中断服务子程序。⑹中断处理程序结束以后,从堆栈中依次弹出IP、CS和PSW,然后返回主程序断点 课后答案网www.khdaw.com处,继续执行原来的程序。5.中断服务子程序中中断指令STI放在不同位置会产生什么不同结果?中断嵌套时,STI指令应如何设置?答:由于响应中断时CPU自动关闭中断(IF=0),故在中断服务子程序中STI指令后方可实现中断嵌套。一般在中断服务子程序中保护现场后即设置开中断指令STI(IF=1),以便实现中断嵌套。6.中断结束命令EOI放在程序不同位置处会产生什么不同结果?答:中断结束命令EOI后,清除中断服务寄存器中的标志位,即允许响应同级或低级中断,为避免错误,一般将中断结束命令EOI置于中断服务子程序结束前。7.中断向量表的功能是什么?答:中断向量表又称中断服务程序入口地址表。将每个设备的中断服务程序入口地址(矢量地址)集中,依次放在中断向量表中。当CPU响应中断后,控制逻辑根据外设提供的中断类型号查找中断向量表,然后将中断服务程序的入口地址送到段寄存器和指令指针寄存器,CPU转入中断服务子程序,这样可大大加快中断处理的速度。8086/8088系统允许处理256种类型的中断,对应类型号为0~FFH。在存储器的00000H~003FFH,占1K字节空间,用作存放中断向量。每个类型号占4个字节,高2个字节存放中断入口地址的段地址,低2个字节存放段内偏移地址。8.假定中断类型号15的中断处理程序的首地址为ROUT15,编写主程序为其建立一个中断向量。PUSHESMOVAX,0MOVES,AXMOVDI,54H;15H*4MOVAX,OFFSETROUT15;中断处理程序的偏移→AXCLDSTOSWMOVAX,SEGROUT15;中断处理程序的段地址→AXSTOSWPOPES9.8086/8088CPU如何获得中断类型号?答:对于内部中断①INTn:n即为中断类型号②除法错中断自动获得类型号0,INTO溢出中断自动获得中断类型号4③单步中断自动获得类型号1,断点中断自动获得类型号3。对于外部中断:①不可屏蔽中断NMI:自动获得中断类型号2②可屏蔽中断INTR:CPU响应可屏蔽中断,对中断接口电路发出两个中断响应信号INTA,中断接口电路收到第二个INTA以后,通过数据线向CPU送中断类型号。10.给定SP=0100H,SS=0500H,PSW=0240H,在存储单元中已有内容为(00024H)=0060H,(00026H)=1000H,在段地址为0800H及偏移地址为00A0H的单元中有一条中断指令INT9,试问执行INT9指令后,SP、SS、IP、PSW的内容是什么?栈顶的三个字是什么? 课后答案网www.khdaw.com答:执行INT9指令,标志寄存器PSW、下一条指令的段地址CS和指令指针IP的值分别入栈,PSW中的中断允许标志IF和单步标志TF清0,中断向量表的中断入口地址送CS和IP,转入中断服务子程序。所以此时SP=00FAH,SS=0500H,CS=1000H,IP=0060H,PSW=0040H。栈顶的三个字是:(0500H:00FAH)=00A2H、(0500H:00FCH)=0800H、(0500H:00FEH)=0240H标志寄存器PSWXXXXOFDFIFTFSFZFXAFXPFXCF执行INT9前0000001001000000执行INT9后0000000001000000PSW=0040H11.8259A优先权管理方式有哪几种?中断结束方式又有哪几种?答:8259A优先权管理方式有如下4种:(1)全嵌套方式此方式下,中断优先级分配固定级别0~7级,IR0具有最高优先级,IR7优先级最低。(2)特殊全嵌套工作方式此种工作方式主要用于8259A级联情况。此方式与全嵌套工作方式基本相同,区别在于当处理某级中断时,有同级中断请求进入,8259A也会响应,从而实现了对同级中断请求的特殊嵌套。(3)优先级自动循环方式优先级可以改变,初始优先级次序为IR0~IR7,当任何一级中断被处理完后,它的优先级别变为最低,将最高优先级赋给原来比它低一级的中断请求。(4)优先级特殊循环方式特殊循环方式下,初始时优先级由程序指定,而不是固定的。8259A中断结束方式有如下3种:(1)普通EOI结束方式在全嵌套工作方式下,任何一级中断,处理结束返回上一级程序前,CPU向8259A传送EOI结束命令字,8259A收到EOI结束命令后,自动将ISR寄存器中级别最高的置1位清0。(2)特殊EOI结束方式在非全嵌套工作方式下,中断服务寄存器是无法确定哪一级中断为最后响应和处理的,此时要采用特殊SEOI结束方式。CPU向8259A发特殊EOI结束命令字,命令字中将当前要清除的中断级别也传给8259A,此时8259将ISR寄存器中指定级别的对应位清0。(3)自动EOI结束方式在自动AEOI方式中,任何一级中断被响应后,ISR寄存器对应位置1,但在CPU进入中断响应周期,发第二个INTA脉冲后,自动将ISR寄存器中对应位清0。12.单片8259A在全嵌套中断工作方式下,要写哪些初始化命令字及操作命令字?答:初始化命令字需要写:ICW1,ICW2,ICW4。操作命令字需要写:OCW1中断屏蔽操作命令字(根据需要,若不需要可不写)OCW2优先权循环方式和中断结束方式操作字13.系统中新增加一个中断源,在软件上应增加哪些内容,此中断系统才能正常工作?答:需要确定中断源的中断类型,然后将中断服务程序的入口地址放入中断向量表中。编写相应的中断服务程序。 课后答案网www.khdaw.com14.系统中有3个中断源,从8259A的IR0、IR2、IR4端引入中断,以边沿触发,中断类型号分别为50H、52H、54H,中断入口地址分别为5020H、6100H、3250H,段地址为1000H。使用完全嵌套方式,普通EOI结束,试编写初始化程序,使CPU能正确响应任何一级中断;并编写一段中断服务子程序,保证中断嵌套的实现和正确返回。答:;初始化程序设8259A的端口地址为20H和21H;设置中断向量表MOVAX,1000H;段地址MOVDS,AXMOVDX,5020H;偏移地址MOVAL,50H;中断类型号MOVAH,25HINT21H;写50H的中断入口地址MOVDX,6100H;偏移地址MOVAL,52H;中断类型号INT21H;写52H的中断入口地址MOVDX,3250H;偏移地址MOVAL,54H;中断类型号INT21H;写54H的中断入口地址;8259A初始化命令字MOVAL,13H;定义ICW1,单片,边沿触发OUT20H,ALMOVAL,50H;定义ICW2,中断号50H~57HOUT21H,ALMOVAL,01H;定义ICW4,完全嵌套,非缓冲,普通EOIOUT21H,ALMOVAL,0EAH;定义OCW1,屏蔽IR1,3,5,6,7OUT21H,AL;中断服务子程序PUSHAX;保护现场⋯⋯STI;开中断⋯⋯;中断处理CLI;关中断MOVAL,20H;定义OCW2,普通EOI结束命令OUT20H,AL⋯⋯POPAX;恢复现场IRET;中断返回15.如外设A1、A2、A3、A4、A5按完全嵌套优先级排列规则,外设A1的优先级最高,A5最低。若中断请求的次序如下所示,试给出各外设的中断处理程序的次序。(假设所有的中断处理程序开始后就有STI指令)(1)外设A3和A4同时发出中断请求;(2)在外设A3的中断处理中,外设A1发出中断请求; 课后答案网www.khdaw.com(3)在外设A1的中断处理未完成前,发出EOI结束命令,外设A5发出中断请求答:外设的中断处理程序的次序为:A3→A1→A3→A4→A516.某系统中有3片8259A级联使用,1片为8259A主片,2片为8259A从片,从片接入8259A主片的IR2和IR5端,并且当前8259A主片的IR3及两片8259A从片的IR4各接有一个外部中断源。中断类型基号分别为80H,90H,A0H,中断入口段地址为2000H,偏移地址分别为1800H,2800H,3800H,主片8259A的端口地址为F8H,FAH。一片8259A从片的端口地址为FCH,FEH,另一片为FEECH,FEEEH。中断采用电平触发,全嵌套工作方式,普通EOI结束。(1)画出硬件连接图。(2)编写初始化程序。答:SPP//ENCASS00CASS11CASS22CAS00CAS11CAS22CAS00CAS11CAS22CSA00D77~~D00IINTTARDWRIINTTA11D77~~D00IINTTARDWRIINTTRGNDGNDIIR44SPP//ENIIR44SSP//EENIIR55IIR33IIR22IINTTIINTT11##从88225599A22##从88225599A主88225599AVVCCCC硬件连接图(1)中断向量表形成MOVAX,2000HMOVDS,AX;DS中为段地址MOVDX,1800H;DX中为偏移地址MOVAL,83H;中断类型号为83HMOVAH,25HINT21H;设置类型号83H的中断向量MOVDX,2800HMOVAL,94HINT21H;设置类型号94H的中断向量MOVDX,3800HMOVAL,0A4HINT21H;设置类型号A4H的中断向量(2)主片8259A初始化编程:端口地址为F8H和FAH 课后答案网www.khdaw.comMOVAL,00011001B(19H);定义ICW1,主片级联,电平触发OUT0F8H,AL;发ICW1命令MOVAL,80H;IR0的中断类型号为80HOUT0FAH,AL;发ICW2命令MOVAL,00100100B(24H);定义ICW3,IR2和IR5接从片OUT0FAH,ALMOVAL,00000001B(01H);定义ICW4,完全嵌套,非缓冲OUT0FAH,AL;非自动EOI结束方式MOVAL,11010011B(0D3H);定义OCW1,允许IR2、IR3OUT0FAH,AL;IR5中断,其余中断请求屏蔽(3)1#从片8259A初始化编程:端口地址为FCH和FEHMOVAL,00011001B(19H);定义ICW1,片从级联,电平触发OUT0FCH,AL;发ICW1命令MOVAL,90H;IR0的中断类型号为90HOUT0FEH,AL;发ICW2命令MOVAL,00000010B(02H);定义ICW3,1#从片接主片的IR2OUT0FEH,ALMOVAL,00000001B(01H);定义ICW4,完全嵌套,非缓冲OUT0FEH,AL;非自动EOI结束方式MOVAL,11101111B(0EFH);定义OCW1,允许IR4中断,OUT0FEH,AL;其余中断请求屏蔽(4)2#从片8259A初始化编程:端口地址为FEECH和FEEEHMOVAL,00011001B(19H);定义ICW1,片从级联,电平触发MOVDX,0FEECHOUTDX,AL;发ICW1命令MOVAL,0A0H;IR0的中断类型号为A0HMOVDX,0FEEEHOUTDX,AL;发ICW2命令MOVAL,00000101B(05H);定义ICW3,2#从片接主片的IR5OUTDX,ALMOVAL,00000001B(01H);定义ICW4,完全嵌套,非缓冲OUTDX,AL;非自动EOI结束方式MOVAL,11101111B(0EFH);定义OCW1,允许IR4中断,OUTDX,AL;其余中断请求屏蔽 课后答案网www.khdaw.com第八章1.8253芯片有哪几个计数通道?每个计数通道可工作于哪几种工作方式?这些操作方式的主要特点是什么?答:8253内部包含3个完全相同的计数器/定时器通道,即0~2计数通道,对3个通道的操作完全是独立的。8253的每个通道都有6种不同的工作方式。方式0——计数结束中断方式:当对8253的任一个通道写入控制字,并选定工作于方式0时,该通道的输出端OUT立即变为低电平。要使8253能够进行计数,门控信号GATE必须为高电平。经过n十1个脉冲后,计数器减为0,这时OUT引脚由低电平变成高电平。OUT引脚上的高电平信号,一直保持到对该计数器装入新的计数值,或设置新的工作方式为止。在计数的过程中,如果GATE变为低电平,则暂停减1计数,计数器保持GATE有效时的值不变,OUT仍为低电平。待GATE回到高电平后,又继续往下计数。方式1——可编程单稳态输出方式:当CPU用控制字设定某计数器工作于方式1时,该计数器的输出OUT立即变为高电平。GATE出现一个上升沿后,在下一个时钟脉冲的下降沿,将n装入计数器的执行部件,同时,输出端OUT由高电平向低电平跳变。当计数器的值减为零时,输出端OUT产生由低到高的正跳变,在OUT引脚上得到一个n个时钟宽度的负单脉冲。在计数过程中,若GATE产生负跳变,不会影响计数过程的进行。但若在计数器回零前,GATE又产生从低到高的正跳变,则8253又将初值n装入计数器执行部件,重新开始计数,其结果会使输出的单脉冲宽度加宽。方式2——比率发生器:当对某一计数通道写入控制字,选定工作方式2时,OUT端输出高电平。如果GATE为高电平,则在写入计数值后的下一个时钟脉冲时,将计数值装入执行部件,此后,计数器随着时钟脉冲的输入而递减计数。当计数值减为1时,OUT端由高电乎变为低电平,待计数器的值减为0时,OUT引脚又回到高电平,即低电平的持续时间等于一个输入时钟周期。与此同时,还将计数初值重新装入计数器,开始一个新的计数过程,并由此循环计数。如果装入计数器的初值为n,那么在OUT引脚上,每隔n个时钟脉冲就产生一个负脉冲,其宽度与时钟脉冲的周期相同,频率为输入时钟脉冲频率的n分之一.在操作过程中,任何时候都可由CPU重新写入新的计数值,不影响当前计数过程的进行。当计数值减为0时,一个计数周期结束,8253将按新写入的计数值进行计数。在计数过程中,当GATE变为低电平时,使OUT变为高电平,禁止计数;当GATE从低电平变为高电平,GATE端产生上升沿,则在下一个时钟脉冲时,把预置的计数初值装入计数器,从初值开始递减计数,并循环进行。方式3——方波发生器:方式3和方式2的工作相类似,但从输出端得到的是对称的方波或基本对称的矩形波。如果写入计数器的初值为偶数,则当8253进行计数时,每输入一个时钟脉冲,均使计数值减2。计数值减为0时,OUT输出引脚由高电平变成低电平,同时自动重新装入计数初值,继续进行计数。当计数值减为0时,OUT引脚又回到高电平,同时再一次将计数初值装入计数器,开始下一轮循环计数;如果写入计数器的初值为奇数,则当输出端OUT为高电平时,第一个时钟脉冲使计数器减1,以后每来一个时钟脉冲,都使计数器减2,当计数值减为0时,输出端OUT由高电平变为低电平,同时自动重新装入计数初值继续进行计数。这时第一个时钟脉冲使计数器减3,以后每个时钟脉冲都使计数器减2,计数值减为0时,OUT端又回到高电平,并重新装入计数初值后,开始下一轮循环计数。方式4——软件触发选通:当对8253写入控制宇,进入工作方式4后,OUT端输出变为高电平,如果GATE为高电平,那么,写入计数初值后,在下一个时钟脉冲后沿将自动 课后答案网www.khdaw.com把计数初值装入执行部件,并开始计数。当计数值成为0时,OUT端输出变低,经过一个时钟周期后,又回到高电平,形成一个负脉冲。若在计数过程中写入一个新的计数值,则在现行计数周期内不受影响,但当计数值回0后,将按新的计数初值进行计数,同样也只计一次。如果在计数的过程中GATE变为低电平,则停止计数,当GATE变为高电平后,又重新将初值装入计数器,从初值开始计数,直至计数器的值减为0时,从OUT端输出一个负脉冲。方式5——硬件触发选通:编程进入工作方式5后,OUT端输出高电平。当装入计数值n后,GATE引脚上输入一个从低到高的正跳变信号时,才能在下一个时钟脉冲后沿把计数初值装入执行部件,并开始减1计数。当计数器的值减为0时,输出端OUT产生一个宽度为一个时钟周期的负脉冲,然后OUT又回到高电平。计数器回0后,8253又自动将计数值n装入执行部件,但并不开始计数,要等到GATE端输入正跳变后,才又开始减1计数。计数器在计数过程中,不受门控信号GATE电平的影响,但只要计数器未回0,GATE的上升沿却能多次触发计数器,使它重新从计数初值n开始计数,直到计数值减为0时,才输出一个负脉冲。如果在计数过程中写入新的计数值,但没有触发脉冲,则计数过程不受影响。当计数器的值减为0后,GATE端又输入正跳变触发脉冲时,将按新写入的初值进行计数。2.8253的最高工作频率是多少?8254与8253的主要区别是什么?答:8253的最高计数频率能达到2MHz。Intel8254是8253的增强型产品,它与8253的引脚兼容,功能几乎完全相同,不同之处在于以下两点:(1)8253的最大输入时钟频率为2MHz,而8254的最大输入时钟频率可高达5MHz。(2)8254有读回(Read-back)功能,可以同时锁存1~3个计数器的计数值及状态值,供CPU读__________取,而8253每次只能锁存和读取一个通道的计数器,且不能读取状态值。3.对8253进行初始化编程分哪几步进行?答:(1)写入控制字用输出指令向控制字寄存器写入一个控制字,以选定计数器通道,规定该计数器的工作方式和计数格式。写入控制字还起到复位作用,使输出端OUT变为规定的初始状态,并使计数器清0.(2)写入计数初值用输出指令向选中的计数器端口地址中写入一个计数初值,初值设置时要符合控制字中有关格式规定。4.设8253的通道0~2和控制端口地址分别为300H,302H,304H和306H,定义通道0工作在方式3,CLK0=2MHz。试编写初始化程序,并画出硬件连接图。要求通道0输出1.5KHz的方波,通道1用通道0的输出作计数脉冲,输出频率为300Hz的序列负脉冲,通道2每秒钟向CPU发50次中断请求。答:通道0工作在方式3,n0=2MHz/1.5KHz=1334通道1工作在方式2,n1=1.5KHz/300Hz=5通道2工作在方式0,当CLK2=2MHz时,n2=2MHz/50Hz-1=39999;当CLK2=OUT0=1.5KHz时,n2=1.5KHz/50Hz-1=29;当CLK2=OUT1=300Hz时,n2=300Hz/50Hz-1=5GATE0GATE1GATE2CLK0 课后答案网www.khdaw.comOUT0CLK1OUT1CLK2OUT2D7~D0D7~D0A0A1A1A2RDRDWRWRCCBBAG1G2AG2BY0A8A9A7AA65A4A3A0M/IOCS+5V2MHz1.5KHz300Hz50次/秒中断74LS1388253G2AG2B初始化程序如下:通道0初始化:MOVDX,306HMOVAL,00110111B(37H);方式3,先读/写低8位,;后读/写低8位,BCD计数OUTDX,ALMOVDX,300HMOVAL,34H;初值低8位OUTDX,ALMOVAL,13H;初值高8位OUTDX,AL通道1初始化: 课后答案网www.khdaw.comMOVDX,306HMOVAL,01010101B(55H);方式2,只读/写低8位,BCD计数OUTDX,ALMOVDX,302HMOVAL,05H;初值OUTDX,AL通道2初始化:MOVDX,306HMOVAL,10010001B(91H);方式0,只读/写低8位,BCD计数OUTDX,ALMOVDX,304HMOVAL,29H(或05H);初值OUTDX,AL5.某微机系统中,8253的端口地址为40H~43H。要求通道0输出方波,使计算机每秒钟产生18.2次中断;通道1每隔15μs向8237A提出一次DMA请求;通道2输出频率为2000Hz的方波。试编写8253的初始化程序,并画出有关的硬件连接图。答:此微机系统为IBMPC/XT系统,通道0作实时时钟,每秒钟产生18.2次中断。通道0工作于方式3,n0=1.19318MHz/18.2=65536即0初始化编程:MOVAL,00110110B;通道0,先写低字节,后写高字节,方式3,2进制计数OUT43H,AL;写入控制字MOVAX,0000H;预置计数值n=65536OUT40H,AL;先写低字节MOVAL,AHOUT40H,AL;后写高字节通道1工作于方式2,周期为15μs,频率为66.2878KHz,初值n1=1.19318MHz/66.2878KHz=18初始化编程:MOVAL,01010101B;控制字,计数1,只写低字节,方式2,BCD计数OUT43H,AL;写入控制字MOVAL,18H;计数初值BCD数18HOUT41H,AL;送初值通道2用于扬声器音调控制,要求输出频率2000Hz的方波,故工作于方式3,n2=1.19318MHz/2000Hz=596初始化编程:MOVAL,10110111B;控制字,计数器2,先写低字节,后写高字节,方式3,BCD计数OUT43H,ALMOVAX,596H;预置初值OUT42H,AL;先送低字节MOVAL,AHOUT42H,AL;后送高字节6.设某系统中8254芯片的基地址为F0H,在对3个计数通道进行初始化编程时,都设为先 课后答案网www.khdaw.com读写低8位,后读写高8位,试编程完成下列工作:(1)对通道0~2的计数值进行锁存并读出来。(2)对通道2的状态值进行锁存并读出来。答:(1)利用8254的读回功能锁存计数值MOVAL,11011110B;锁存3个计数通道计数值OUT0F3H,ALINAL,0F0H;读通道0低8位MOVAH,ALINAL,0F0H;读通道0高8位XCHGAH,AL;将计数值置入AXPUSHAX;入栈保存INAL,0F1H;读通道1低8位MOVAH,ALINAL,0F1H;读通道1高8位XCHGAH,ALPUSHAX;入栈INAL,0F2H;读通道2低8位MOVAH,ALINAL,0F2H;读通道2高8位XCHGAH,ALPUSHAX(2)利用8254的读回功能锁存状态MOVAL,11101000B;锁存通道2状态OUT0F3H,ALINAL,0F2H;读通道2状态 课后答案网www.khdaw.com第九章1.8255A的3个端口在功能上各有什么不同的特点?8255A内部的A组和B组控制部件各管理哪些端口?答:端口A包含一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器,因此A口作输入或输出时数据均能锁存。端口B包含一个8位的数据输入/输出锁存器/缓冲器,一个8位的数据输入缓冲器。端口C包含一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器,无输入锁存功能,当它被分成两个4位端口时,每个端口有一个4位的输出锁存器。端口A和端口C的上半部分(PC7~PC4)由A组控制逻辑管理。端口B和端口C的下半部分(PC3~PC0)由B组控制逻辑管理。2.8255A有哪几种工作方式?各用于什么场合?端口A、端口B和端口C各可以工作于哪几种工作方式?答:8255A具有3种基本的工作方式,在对8255A进行初始化编程时,应向控制字寄存器写入方式选择控制字,用来规定8255A各端口的工作方式。这3种基本工作方式是:方式0——基本输入输出方式:适用于不需要用应答信号的简单输入输出场合。这种方式A口和B口可作为8位的端口,C口的高4位和低4位可作为两个4位的端口。方式1——选通输入输出方式:A口和B口作为数据口,均可工作于输入或输出方式。端口C的6根线用来产生或接受联络信号。方式2——双向总线I/O方式:只有A口可以工作于这种方式。端口A工作于方式2时,端口C的5位(PC3~PC7)作A口的联络控制信号。3.8255A的方式选择字和置位复位字都写入什么端口?用什么方式区分它们?答:8255A的方式选择字和置位复位控制字都被写入控制字寄存器端口中,但通过控制字的D7位进行区分,方式控制字的D7=1,置位复位控制字的D7=0。4.若8255A的系统基地址为2F9H,且各端口都是奇地址,则8255A的3个端口和控制寄存器的地址各是多少?答:端口A地址:2F9H端口B地址:2FBH端口C地址:2FDH控制字地址:2FFHM/IOA9A8A7A6A5A4A3A0CBAG1 课后答案网www.khdaw.comG2AG2BA2A1IORIOWD15~D8A1A0RDWRD7~D0Y7CSCPU74LS1388255RESETRESETPAPBPC5.设8255A的A口、B口、C口和控制字寄存器的端口地址分别为80H、82H、84H和86H。要求A口工作在方式0输出,B口工作在方式0输入,C口高4位输入,低4位输出,试编写8255A的初始化程序。答:MOVAL,10001010B;方式控制字OUT86H,AL6.8255A的端口地址同第5题,要求PC4输出高电平,PC5输出低电平,PC6输出一个正脉冲,试写出完成这些功能的指令序列。答:MOVAL,00001001B;PC4输出高电平OUT86H,ALMOVAL,00001010B;PC5输出低电平OUT86H,ALMOVAL,000001100B;PC6先输出低电平OUT86H,ALMOVAL,00001101B;PC6再输出高电平OUT86H,ALMOVAL,00001100B;PC6再输出低电平,形成一个正脉冲OUT86H,AL7.8255A端口地址同第5题,若A口工作在方式0输入,B口工作在方式1输出,C口各位的作用是什么?控制字是什么?若B口工作在方式0输出,A口工作方式1输入,C口各位的作用是什么?控制字是什么?答:A口工作在方式0,不需要C口做应答信号,B口工作在方式1输入,需要C口做联络 课后答案网www.khdaw.com信号,PC1连接OBF,输出缓冲器满信号,PC2连接ACK,外设的应答信号信号,PC0连接INTR,向CPU发出的中断请求信号。控制字为1001X10XB。B口工作在方式0输出,A口工作方式1输入,需要C口做联络信号,PC4连接STB,由外设输入的选通信号,PC5连接IBF,输入缓冲器满信号,PC3连接INTR,向CPU发出的中断请求信号。控制字为1011X00XB。8.若A口工作在方式2,B口工作在方式1输入,C口各位作用是什么?若A口工作在方式2,B口工作在方式0输出,C口各位的作用是什么?答:若A口工作在方式2,B口工作在方式1输入,C口各位作用如下:PC0连接INTRB,PC1连接IBFB,PC2连接STBBPC3连接INTRA,PC4连接STBA,PC5连接IBFA,PC6连接ACKA,PC7连接OBFA若A口__________工作在方式2,B口工作在方式0输出,C口各位的作用如下:PC0,PC1和PC2可任意PC3连接INTRA,PC4连接STBA,PC5连接IBFA,PC6连接ACKA,PC7连接OBFA9.8255A的口地址为80H~83H,8253的口地址为84H~87H,(1)若A口接8个开关K7~K0,B口接8个指示灯LED7~LED0,当开关合上时相应的指示灯亮,断开时灯灭,要求每隔0.5s检测一次开关状态,并在开关上显示出来,试画出硬件连线图,编写实现这种功能的程序。(2)若把接在端口A上的开关去掉,要求接在端口B上的指示灯轮流熄灭,每只灯熄灭1秒钟,请编程实现这种功能。答:(1)8255A:A口输入,B口输出8253:2MHz/2Hz=1000000通道0工作于方式2,取N0=1000通道1工作于方式0,取N1=999,即得OUT1每0.5秒中断一次。本题用8253定时中断,中断处理时检测开关状态,并点亮相应得LED。假设8259A已初始化,主程序如下:MOVAX,SEGINTR;形成中断矢量表MOVDS,AXMOVDX,OFFSETINTRMOVAL,NMOVAH,25HINT21HMOVAL,10010000B;8255初始化OUT83H,ALMOVAL,00110101B;通道0方式2,BCD计数OUT87H,ALMOVAL,00H;置初值1000OUT84H,ALMOVAL,10HOUT84H,ALMOVAL,01110001B;通道1方式0,BCD计数OUT87H,ALMOVAL,99H;置初值999OUT85H,AL 课后答案网www.khdaw.comMOVAL,09HOUT85H,ALSTIAGAIN:HLTJMPAGAIN中断服务程序:INTR:PUSHAXSTIINAL,80H;检测开关,合上为0NOTAL;取反OUT81H,AL;点亮相应LED(合上)MOVAL,01110001B;通道1方式0,BCD计数OUT87H,ALMOVAL,99H;置初值999OUT85H,ALMOVAL,09HOUT85H,ALCLIMOVAL,20H;普通EOI命令OUT20H,ALPOPAXIRET(2)8255A:B口输出8253:通道0工作于方式2,取N0=2000通道1工作于方式3,取N1=1000,即得OUT1频率为1Hz(周期为1秒)的方波,接到8259A的IRi,用沿触发中断请求。主程序如下:MOVAX,SEGINTR;形成中断矢量表MOVDS,AXMOVDX,OFFSETINTRMOVAL,NMOVAH,25HINT21HMOVAL,10000000B;8255初始化OUT83H,ALMOVAL,00110101B;通道0方式2,BCD计数OUT87H,ALMOVAL,00H;置初值2000OUT84H,ALMOVAL,20HOUT84H,ALMOVAL,01110111B;通道1方式0,BCD计数OUT87H,AL 课后答案网www.khdaw.comMOVAL,00H;置初值1000OUT85H,ALMOVAL,10HOUT85H,ALMOVAL,0FEH;熄灭LED0OUT81H,ALSTIGOON:HLTJMP中断服务程序如下:INTR:PUSHAXSTIROLAL,1;AL左循环移位1位OUT81H,AL;点亮下一位LEDCLIMOVAL,20HOUT20H,AL;普通EOI结束命令POPAXIRET硬件连接图如下:⋯⋯K0K7LED0LED7+5VPA0PA7PB7PB0⋯⋯A7A1A0A1A0A1A0A1A0A6A5A4A3A2 课后答案网www.khdaw.comBACG1G2BG2AD7~D0D7~D0D7~D0D7~D0RESETRESETRDRDRDWRWRWRWRCSCSY1Y0M/IOGATE0GATE1CLK0CLK1OUT0OUT1+5V2MHz8259AIRii8255A825374LS138G2BG2ARDY1Y074LS13810.设8255A的口地址为300H~303H,A口接4个开关K3~K0,B口接一个七段LED显示器,用来显示4个开关所拨通的16进制数字0~F,开关都合上时,显示0,都断开时显示F,每隔2秒钟检测一次,试画出硬件连线图,并编写实现这种功能的程序。答:G1G2AG2BA9A8A7 课后答案网www.khdaw.comA6A5M/IOCBAA4A3A2D7~D0D7~D0RESETRESETRDRDWRWRA1A0A1A0Y0CSPA7PA6PA5PA4PA3⋯..⋯..PA0+5V⋯..⋯..PB7PB0⋯..⋯..CSY1A1A0A1A0RDRDWRWRD7~D0D7~D0GATE0 课后答案网www.khdaw.comGATE1+5VCLK02MHzOUT0CLK1OUT18259AIRiK0K374LS1388255A8253与上题思路相同8255A:A口方式0输入,B口方式0输出,端口地址300H~303H8253:用于2秒定时,端口地址为304H~307H2MHz/0.5Hz=4000000通道0工作于方式2,取N0=4000通道1工作于方式0,取N1=999,即得OUT1每2秒中断一次。本题用8253定时中断,中断处理时检测开关状态,并点亮相应得LED。共阴极LED七段显示码表十六进制数字七段显示码十六进制数字七段显示码03FH87FH106H96FH25BHA77H34FHb7CH466HC39H56DHd5EH67DHE79H707HF71H假设8259A已初始化,主程序如下:TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;七段码表格DB7FH,6FH,77H,7CH,39H,5EH,79H,71HMOVAX,SEGINTR;形成中断矢量表MOVDS,AXMOVDX,OFFSETINTRMOVAL,NMOVAH,25HINT21HMOVAL,10010000B;8255初始化MOVDX,303HOUTDX,ALMOVAL,00110101B;8253初始化,通道0方式2,BCD计数MOVDX,307HOUTDX,AL 课后答案网www.khdaw.comMOVAL,00H;置初值4000HMOVDX,304HOUTDX,ALMOVAL,40HOUTDX,ALMOVAL,01110001B;通道1方式0,BCD计数MOVDX,307HOUTDX,ALMOVAL,99H;置初值999MOVDX,305HOUTDX,ALMOVAL,09HOUTDX,ALSTIAGAIN:HLTJMPAGAIN中断服务程序:INTR:PUSHAXSTIMOVDX,300HINAL,DX;检测开关,合上为0ANDAL,0FH;只保留低4位PA3~PA0MOVBX,OFFSETTABLEXLATTABLEMOVDX,301HOUTDX,AL;点亮LED,显示数字MOVAL,01110001B;通道1方式0,BCD计数MOVDX,307HOUTDX,ALMOVAL,99H;置初值999MOVDX,305HOUTDX,ALMOVAL,09HOUTDX,ALCLIMOVAL,20H;普通EOI命令OUT20H,ALPOPAXIRET11.说明PC机中扬声器发声电路的工作原理,编写产生频率为1000Hz的发声程序。答:在PC机中,扬声器接口电路由8255A,8253,驱动器和低通滤波器构成,8253是音频信号源,8255作控制器,驱动器用来增大8253输出的TTL电平信号的驱动能力,低通滤波器将脉冲信号转换成接近正弦波的音频信号,去驱动扬声器发声。 课后答案网www.khdaw.com产生频率为1000Hz的发声程序:MOVDI,1000;频率1000HzMOVAL,10110110B;8253控制字,通道2,先写低字节,后写高字节,;方式3,二进制计数OUT43H,AL;写入控制字MOVDX,0012H;被除数高位MOVAX,34DEH;被除数低位DIVDI;求计数初值n,结果在AX中OUT42H,AL;送出低8位MOVAL,AHOUT42H,AL;送出高8位INAL,61H;读入8255A端口B的内容MOVAH,AL;保护B口的原状态ORAL,03H;使B口后两位置1,其余位保留OUT61H,AL;接通扬声器,发声12.试画出打印机驱动程序的流程图。答:主程序初始化,包括初始化8259A,8255A和打印机读入打印机状态正常待命状态?即不忙、联机、有纸和无错?N字符串起始地址装入指针存储单元,字符串长度装入字符计数器,使INTEB=1,允许8255A中断Y程序处于等待状态,等待打印机接口发出中断请求当8255A输出缓冲器空,打印机送来的ACKNLG信号为高电平时,8255A产生中断请求,CPU响应中断,转入中断服务程序中断服务程序负责将一个字符送到打印机接口把需要用到的寄存器入栈从字符缓冲区中读入一个待打印的ASCII字符,在PC4上形成一个低电平选通脉冲将字符打入打印机输入缓冲器使字符串地址指针加1,字符计数器减1 课后答案网www.khdaw.com字符计数器=0?字符未传送完,送中断结束命令EOI,寄存器内容出栈,等待下次中断。所有字符已传送完毕,向8255送置位/复位控制字清除PC2,禁止再次中断返回断点 课后答案网www.khdaw.com第十章1.串行通信与并行通信的主要区别是什么?各有什么优缺点?答:计算机与外部的信息交换称为通信,基本的通信方式有两种,并行通信和串行通信。并行通信:数据各位同时传送,此方式传输数据的速度快,但使用的通信线多,若要并行传送8位数据,需要用8根数据线,另外还需一些控制信号线。随着传输距离的增加,通信线成本的增加将成为突出的问题,而且传输的可靠性随着距离的增加而下降。因此,并行通信适用于近距离传送数据的场合。串行通信:将要传送的数据或信息按一定的格式编码,然后在单根线上按一位接一位的先后顺序进行传送。发送完一个字符后,再发送第二个。接收数据时,每次从单根线上一位接一位的接收信息,再把它们拼成一个字符,送给CPU作进一步处理。适用于远距离通信,需要的通信线少和传送距离远等优点。2.在串行通信中,什么叫单工、半双工、全双工工作方式?答:串行通信时,数据在两个站A与B之间传送,按传送方向分成单工、半双工和全双工三种方式。单工数据线仅能在一个方向上传输数据,两个站之间进行通信时,一边只能发送数据,另一边只能接收数据,也称为单向通信。在半双工方式中,数据可在两个设备之间向任一个方向传输,但两个设备之间只有一根传输线,故同一时间内只能在一个方向上传输数据,不能同时收发。全双工:对数据的两个传输方向采用不同的通路,可以同时发送和接收数据。3.什么叫同步工作方式?什么叫异步工作方式?哪种工作方式的效率更高?为什么?答:串行通信有两种基本工作方式:异步方式和同步方式异步方式:不发送数据时,数据信号线总是呈现高电平,称为MARK状态,也称空闲状态。当有数据要发送时,数据信号线变成低电平,并持续一位的时间,用于表示字符的开始,称为起始位。起始位后,在信号线上依次出现待发送的每一位字符数据,最低有效位D0最先送出,根据不同编码,有效数据位可由5位、6位、7位或8位构成,数据位后面有一个奇偶校验位,校验位后至少有一位高电平表示停止位,用于指示字符的结束。由此可见,异步方式发送一个7位的ASCII码时,实际需发送10位、10.5位或11位信息,故影响传输效率。同步方式:没有数据传送时,传输线处于MARK状态,为了表示数据传输的开始,发送方式发送一个或两个特殊字符,称为同步字符。当发送法和接收方达到同步后,就可以一个字符接一个字符发送一大块数据,不再需要用起始位和停止位了,这样就可以明显的提高数据的传输速率。同步方式传送数据时,在发送过程中,收发双发还必须用同一个时钟进行协调,用于确定串行传输中每一位的位置。接收数据时,接受方可利用同步字符将内部时钟与发送方保持同步,然后将同步字符后面的数据逐位移入,并转换成并行格式,供CPU读取,直至收到结束符为止。4.用图表示异步串行通信数据的位格式,标出起始位,停止位和奇偶校验位,在数字位上标出数字各位发送的顺序。答:5.什么叫波特率?什么叫波特率因子?常用的波特率有哪些?答:在串行通信中,波特率表示数据传送的速率,每秒钟内所传送数据的位数称为波特率,单位为波特bps(Bd)。在波特率指定后,输入移位寄存器/输出移位寄存器在接收时钟/发送时钟控制下,按指 课后答案网www.khdaw.com定的波特率速度进行移位。一般几个时钟脉冲移位一次。要求:接收时钟/发送时钟是波特率的16、32或64倍。波特率因子就是发送/接收1个数据(1个数据位)所需要的时钟脉冲个数,其单位是个/位。常用的波特率为110,300,600,1200,2400,4800,9600,19200,28800,36400,57600波特。6.若某一终端以2400波特的速率发送异步串行数据,发送1位需要多少时间?假设一个字符包含7个数据位、1个奇偶校验位、1个停止位,发送1个字符需要多少时间?答:1/2400=0.416ms,一个字符包含7个数据位、1个奇偶校验位、1个停止位,1个起始位,发送1个字符需要10/2400=4.16ms7.什么叫UART?什么叫USART?列举典型芯片的例子。答:仅用于异步通信的接口芯片,称为通用异步收发器UART(UniversalAsynchronousReceiver-Transmitter),典型芯片如INS8250。既可以工作于异步方式,又可工作于同步方式,称为通用同步异步收发器USART(UniversalSynchronous-AsynchronousReceiver-Transmitter),典型芯片如Intel8251A。8.什么叫MODEM?用标准电话线发送数字数据为什么要用MODEM?调制的形式主要有哪几种?答:能将数字信号转换成音频信号及将音频信号恢复成数字信号的器件称为调制解调器,即MODEM。标准电话线只能传送带宽为300Hz~3000Hz的音频信号,不能直接传送频带很宽的数字信号,为了解决此问题,在发送数据时,先把数字信号转换成音频信号后,称为调制,再利用电话线进行传输,接收数据时又将音频信号恢复成数字信号,称为解调。调制的形式主要有:幅度(Amplitude)调制或幅移键控ASK(Amplitude-ShiftKeying)简称“调幅”频率键移FSK(Frequency-ShiftKeying,简称“调频”)相位键移PSK(Phase-ShiftKeying,简称“调相”)多路载波(MultipleCarrier)9.若8251A以9600波特的速率发送数据,波特率因子为16,发送时钟TxC频率为多少?答:发送时钟TxC频率=9600*16=153600Hz10.8251A的SYNDET/BRKDET引脚有哪些功能?答:SYNDET/BRKDET(SynchronousDetect/BreakDetect)同步检测/断点检测,输出/输入,高电平有效。(1)8251A工作于同步方式该引脚表示SYNDET,内同步时该引脚为输出,有效状态(高电平)表示8251A已经检测到同步字符;外同步时该引脚为输入,由该引脚输入同步脉冲,上升沿启动8251A接收数据。(2)8251A工作于异步方式该引脚表示BRKDET,是输出信号,有效状态(高电平)表示接收端检测到间断点(编程规定长度的全“”字符);恢复正常数据接收时该引脚被复位。11.如果系统中无MODEM,8251A与CPU之间有哪些连接信号?答:8251A和CPU之间的连接信号可以分为四类:(1)片选信号CS:片选信号,它由CPU的地址信号通过译码后得到。(2)数据信号D0~D7:8位,三态,双向数据线,与系统的数据总线相连。传输CPU对8251A的编 课后答案网www.khdaw.com程命令字和8251A送往CPU的状态信息及数据。(3)读/写控制信号RD:读信号,低电平时,CPU当前正在从8251A读取数据或者状态信息。WR:写信号,低电乎时,CPU当前正在往8251A写入数据或者控制信息。C/D:控制/数据信号,用来区分当前读/写的是数据还是控制信息或状态信息。该信号也可看作是8251A数据口/控制口的选择信号。(4)收发联络信号TXRDY:发送器准备好信号,用来通知CPU,8251A已准备好发送一个字符。TXE:发送器空信号,TXE为高电平时有效,用来表示此时8251A发送器中并行到串行转换器空,说明一个发送动作已完成。RXRDY:接收器准备好信号,用来表示当前8251A已经从外部设备或调制解调器接收到一个字符,等待CPU来取走。因此,在中断方式时,RXRDY可用来作为中断请求信号;在查询方式时,RXRDY可用来作为查询信号。SYNDET:同步检测信号,只用于同步方式。12.在一个以8086为CPU的系统中,若8251A的数据端口地址为84H,控制口和状态口的地址为86H,试画出地址译码电路、数据总线和控制总线的连接图。答:D7~D0D7~D0A7A6A5A4M/IOG1G2AG2BCBAA3A2A0A1RESETRDWRC/DRESETRDWRY2CS74LS1388086CPU8251A 课后答案网www.khdaw.com13.设8251A的端口地址如题12,要求8251A工作于内同步方式,同步字符为2个,用偶校验,7个数据位,试对8251A进行初始化编程。答:MOVAL,0OUT86H,ALOUT86H,ALOUT86H,AL;向控制口写入三个0MOVAL,40HOUT86H,AL;写入复位字MOVAL,00111000BOUT86H,AL;写入方式字MOVAL,SYSN;同步字符OUT86H,ALOUT86H,AL;两个同步字符MOVAL,10010101BOUT86H,AL;送命令字14.若8251A的端口地址为FF0H,FF2H,要求8251A工作于异步工作方式,波特率因子为16,有7个数据位,1个奇校验位,1个停止位,试对8251A进行初始化编程。答:MOVAL,0MOVDX,0FF2HOUTDX,ALOUTDX,ALOUTDX,AL;向控制口写入三个0MOVAL,40HOUTDX,AL;写入复位字MOVAL,01011010BOUTDX,AL;写入方式字MOVAL,00010101BOUTDX,AL;写入命令字15.RS-232C的逻辑高电平与逻辑低电平的范围是多少?怎么与TTL电平的器件相连?规定用什么样的接插件?最少用哪几根信号线进行通信?答:逻辑高电平:有负载时为-3V~-15V,无负载时为-25V逻辑低电平:有负载时为+3V~+15V,无负载时为+25V通常用±12V作为RS-232C的电平。计算机及其接口芯片多采用TTL电平,即0~0.8V为逻辑0,+2.0V~+5V为逻辑1,与RS-232C电平不匹配,必须设计专门的电路进行电平转换,常用的电平转换电路为MAX232和MAX233。RS-232C使用25芯的D型插头插座和9芯的D型接插件。常用的信号线有:TxD发送数据,RxD接收数据,RTS请求发送,CTS清除发送,DSR数据装备准备好等信号。16.某微机系统用串行方式接收外设送来的数据,再把数据送到CRT去显示,若波特率为1200,波特率因子为16,用8253产生收发时钟,系统时钟频率为5MHz,收发数据个数为COUNT,数据存放到数据段中以BUFFER为始址的内存单元中。8253和8251A的基地址分别为300H和304H。 课后答案网www.khdaw.com(1)画出系统硬件连线图。(2)编写8253和8251A的初始化程序。(3)编写接收数据的程序。答:(1)8251的接收时钟RxC=1200*16=19200Hz,用8253产生收发时钟,使用通道0产生频率为19200Hz的方波,故计数初值为n0=5MHz/19200Hz≈260D7~D0D7~D0RDRDWRWRRESETRESETA0C/D地址译码A1A9M/IOCS...CLKCLKCSCLK0OUT0RxCGNDRxD数据CPU8251A8253(2)8253的初始化程序MOVDX,303HMOVAL,00110111BOUTDX,AL;8253控制字,通道0,方式3,BCD计数MOVDX,300HMOVAL,60H;初值低字节OUTDX,ALMOVAL,02H;初值高字节OUTDX,AL8251A的初始化程序MOVAL,0MOVDX,305HOUTDX,ALOUTDX,ALOUTDX,AL;向控制口写入3个0MOVAL,40H;复位字OUTDX,ALMOVAL,01111010B;方式字,异步,1停止位,偶校验,7位数据OUTDX,AL 课后答案网www.khdaw.comMOVAL,14HOUTDX,AL;输出命令字,清错误标志,允许接收(3)接收数据的程序采用查询方式,异步传送LEADI,BUFFER;接收数据缓冲区MOVCX,COUNT;接收数据个数MOVDX,305HNEXT:INAL,DX;读入状态字TESTAL,02H;RxRDY有效吗JZNEXT;否,循环等待TESTAL,38H;是,检查是否有错JNZERROR;有错,转出错处理程序MOVDX,303H;数据端口INAL,DX;无错,读入一个数据MOV[DI],AL;送缓冲区INCDIMOVDX,305HLOOPNEXT;数据没传完则继续⋯.;完成ERROR:⋯⋯;出错处理 课后答案网www.khdaw.com第十一章1.包含A/D和D/A的实时控制系统主要由哪几部分组成?什么情况下要用多路开关?什么时候要用采样保持器?答:控制对象计算机传感器放大滤波多路开关MUX采样保持器S/HA/D转换器I/O接口多路开关MUXD/A转换器I/O接口 课后答案网www.khdaw.com传感器放大滤波执行部件⋯对多个变化较为缓慢的模拟信号进行A/D转换时,利用多路开关将各路模拟信号轮流与A/D转换器接通,使一个A/D转换器能完成多个模拟信号的转换,节省硬件开销。一个模数转换器完成一次模数转换,要进行量化、编码等操作,每种操作均需化费一定的时间,这段时间称为模数转换时间tc。在转换时间tc内,输入模拟信号x(t)变化速率较高时,在转换过程中,输入模拟量有一个可观的△x,结果将会引入较大的误差。也就是说,在A/D转换过程中,加在转换器上的电平在波动,这样,就很难说输出的数字量表示tc期间输入信号上哪一点的电压值,在这种情况下就要用采样保持器来解决这个问题。2.什么叫采样、采样率、量化、量化单位?12位D/A转换器的分辨率是多少?答:采样就是按相等的时间间隔t从电压信号上截取一个个离散的电压瞬时值,t越小,采样率fs越高。对一个被采样的信号电压的幅度变化范围进行分层,确定某一个采样电压所在的层次,该分层的起始电平就是该采样的数字量,此过程称为量化,每个分层所包含的最大电压值与最小电压值之差,称为量化单位,用q表示,量化单位越小,精度越高。12位D/A转换器,2n=4096,其分辨率为1/4096*FSR=0.0244%FSR3.某一8位D/A转换器的端口地址为220H,已知延时20ms的子程序为DELAY_20MS,参考电压为+5V,输出信号(电压值)送到示波器显示,试编程产生如下波形:(1)下限为0V,上限为+5V的三角波(2)下限为1.2V,上限为4V的梯形波。答:(1)由于1LSB=5V/256=0.019V,所以下限电压对应的数据为0/0.019V=0上限电压对应的数据为5V/0.019V=256程序段如下:BEGIN:MOVAL,0;下限值MOVDX,220HUP:OUTDX,AL;D/A转换CALLDELAYINCAL;数值增1CMPAL,00H;超过上限了吗?JNZUP;没有,继续转换DECAL;超过了,数值减量DOWN:OUTDX,AL;D/A转换CALLDELAYDECAL;数值减1CMPAL,00H;低于下限了吗?JNZDOWN;没有JMPBEGIN;低于,转下一个周期(2)下限电压对应的数据为1.2V/0.019V=61=3DH 课后答案网www.khdaw.com上限电压对应的数据为4V/0.019V=205=0CDH产生梯形波的程序如下:BEGIN:MOVAL,3DH;下限值MOVDX,220HUP:OUTDX,AL;D/A转换CALLDELAYINCAL;数值增1CMPAL,0CDH;到达上限了吗?JNZUP;没有,继续转换OUTDX,ALCALLDELAY_20MS;到达上限延时输出方波DECALDOWN:OUTDX,AL;D/A转换CALLDELAYDECAL;数值减1CMPAL,3DH;到达下限了吗?JNZDOWN;没有,继续OUTDX,ALCALLDELAY_20MS;到达下限延时输出方波INCALJMPUP4.利用DAC0832产生锯齿波,试画出硬件连线图,并编写有关的程序。答:设下限为1.2V,上限为4V,端口地址为300H产生锯齿波的程序如下:BEGIN:MOVAL,3CHMOVDX,300HAGAIN:INCALOUTDX,AL;D/A转换CALLDELAYCMPAL,0CDHJNZAGAINJMPBEGIN5.(1)画出DAC1210与8位数据总线的微处理器的硬件连接图,若待转换的12位数字是存在BUFF开始的单元中,试编写完成一次D/A转换的程序。(2)将DAC1210与具有16位数据总线的8086相连,其余条件同(1),画出该硬件连线和编写D/A转换程序。答:(1)START:MOVDX,220H;指向220H端口MOVCL,4;移位次数MOVBX,BUFF;取要转换的数据SHLBX,CL;BX中数左移4次后向左对齐MOVAL,BH;取高8位 课后答案网www.khdaw.comOUTDX,AL;写入8位输入寄存器INCDX;口地址为221HMOVAL,BL;取低4位OUTDX,AL;写入4位输入寄存器INCDX;口地址为222HOUTDX,AL;启动D/A转换,AL中可为任意值(2)D11D10D9D8D7D6D5D4D3D2D1D0START:MOVDX,220H;指向220H端口MOVAX,BUFF;取要转换的数据OUTDX,AX;写入8位输入寄存器INCDXINCDX;口地址为222HOUTDX,AL;启动D/A转换,AL中可为任意值6.利用8255A和ADC0809等芯片设计PC机上的A/D转换卡,设8255A的口地址为3C0H~3C3H,要求对8个通道各采集1个数据,存放到数据段中以D_BUF为始址的缓冲器中,试完成以下工作:(1)画出硬件连接图。(2)编写完成上述功能的程序。答:(1)(2)AD_SUBPROCNEARMOVCX,8;CX作数据计数器MOVBL,00H;模拟通道号存在BL中LEADI,D_BUF;缓冲区NEXT_IN:MOVDX,3C2H;__________8255A端口C地址MOVAL,BLOUTDX,AL;输出通道号MOVDX,3C3H;指向控制口MOVAL,00000111B;PC3置1OUTDX,AL;送出开始启动信号NOP;延时NOP 课后答案网www.khdaw.comNOPMOVAL,00000110B;PC3复位OUTDX,AL;送出结束启动信号MOVDX,3C2H;C口NO_CONV:INAL,DX;读入C口内容TESTAL,80H;PC7,EOC信号JNZNO_CONV;PC7=1,未开始转换,等待NO_EOC:INAL,DX;PC7=0,已启动转换TESTAL,80H;再查PC7JZNO_EOC;PC7=0,转换未结束,等待MOVDX,3C0H;PC7=1,转换结束,DX指向A口INAL,DX;读入数据MOV[DI],AL;存入缓冲区INCDIINCBL;指向下个通道LOOPNEXT_INRETAD_SUBENDP7.试利用ADC0809,8253和8259A等芯片设计8通道A/D转换电路。系统中用8253作定时器,采用中断方式控制采样率,采样率为500Hz。设8253的通道0输入时钟脉冲为2MHz,输出端OUT0接8259A的IR2,8253的口地址为300H~303H,8259A的口地址为304H和305H,ADC0809的8个输入通道的口地址为308H~30FH,查询EOC信号和状态口地址为306H,ADC0809的输入时钟频率为640KHz,A/D转换的结果依次存入数据段中以BUFFER为始址的内存中,从通道0开始先存入各通道的第一个数据,再存放第二个数据,采集10秒钟后停止工作。要求:(1)画出硬件连线图,可以不画具体的译码电路。(2)编写8253,8259A(只需写入中断屏蔽字)的初始化程序及采集8路模拟信号的中断服务程序。答:(1)308H~30FH306H640KHz(2)因为8253的时钟输入频率为2MHz,而要求的采样频率f=500Hz,即用8253定时,每隔2ms中断一次,因此8253的分频次数(时间常数)N=2MHz/500Hz=4000。采集10秒钟,共采集10s/2ms=5000次,即8253中断次数为5000次。DATASEGMENTBUFFERDB8*5000DUP(?)DATAENDS;数据采集子程序8253初始化编程,通道0,方式2,先写低字节,后高字节,BCD计数,时间常数4000MOVDX,303HMOVAL,00110101BOUTDX,AL 课后答案网www.khdaw.comMOVDX,300H;通道0MOVAX,4000H;时间常数OUTDX,ALMOVAL,AHOUTDX,AL;8259A设置屏蔽字,仅允许8259A的IR2和键盘中断,其余禁止MOVAL,11111001B;屏蔽字MOVDX,305HOUTDX,AL;向屏蔽寄存器输出屏蔽字;设置数据缓冲区始址到SI中,计数初值到BX中,等待中断,每通道采完5000次后结束中断MOVSI,OFFSETBUFFER;SI指向数据缓冲区MOVBX,5000STI;开中断AGAIN:CMPBX,0JNZAGAINMOVAL,11111101B;采集完,禁止IR2中断MOVDX,305HOUTDX,ALMOVAH,4CH;退出中断INT21H;中断服务程序,对每个通道均采集一个数据,存入BUFFERADINTPROCNEARMOVCX,0008H;设置通道计数器初值MOVDX,308H;DX指向ADC通道0NEXT:OUTDX,AL;启动一次转换PUSHDX;保存通道号MOVDX,306H;DX指向状态口POLL:INAL,DX;读入EOC状态TESTAL,80H;EOC(D7)=0?即开始转换了JNZPOLL;非0,循环等待NO_END:INAL,DX;EOC=0,开始转换TESTAL,80H;再查EOC是否为1JZNO_END;EOC=0,等待转换结束POPDX;EOC=1,恢复通道地址INAL,DX;读取结果MOV[SI],AL;存储到缓冲区INCDX;DX指向下一个通道INCSI;地址指针指向下一个缓冲单元LOOPNEXT;通道计数器减1,结果非0则循环DECBX;为0,缓冲数据计数器减1MOVAL,20HMOVDX,304H 课后答案网www.khdaw.comOUTDX,ALSTI;开中断IRETADINTENDP8.利用8255A和AD574A设计数据采集系统,输入模拟电压为0~+10V,若每秒采集100个数据,转换后的数据字存放在W_BUF开始的缓冲器中,低字节在前,高字节在后,采满16K字节的数据后停止工作,要求:(1)画出硬件连线图。(2)编写启动AD574A工作和读取转换结果的子程序。答:(1)(2)16K字节的数据共需要8K=8192次采集;8255A的端口地址PORT_AEQU0F0H;A口地址PORT_BEQU0F1H;B口地址PORT_CEQU0F2H;C口地址PORT_CTLEQU0F3H;控制口地址;8255A控制字:A口和B口工作于方式0,A口、B口和C口的上半部分为输入,C口的下半部分为输出LEADI,W_BUFMOVCX,8192AD_CONT:MOVAL,10011010B;方式字OUTPORT_CTL,AL;输出方式字;启动A/D转换MOVAL,00HOUTPORT_C,AL;使CS,CE,R/C均为低NOP;延时NOPMOVAL,04HOUTPORT_C,AL;使CE=1,启动A/D转换NOPNOPMOVAL,03HOUTPORT_C,AL;使CE=0,CS=R/C=1,结束启动状态READ_STS:INAL,PORT_C;读STS状态TESTAL,80H;转换(STS=0)完了吗?JNZREAD_STS;否,则循环等待;转换完成,启动读操作MOVAL,01HOUTPORT_C,AL;使CS=0,CE=0,R/C=1NOPMOVAL,05H;使CE=1,CS=0,R/C=1OUTPORT_C,AL;读取数据,存入BX中 课后答案网www.khdaw.comINAL,PORT_A;读入高4位数据ANDAL,0FHMOVBH,AL;存入BHINAL,PORT_B;读入低8位MOVBL,AL;存入BLMOV[DI],BX;存入缓冲区INCDIINCDI;结束读操作MOVAL,03H;使CE=0,CS=1OUTPORT_C,AL;结束读操作CALLDELAY_10MS;延时10个毫秒LOOPAD_CONT 课后答案网www.khdaw.com第十二章1.一般DMA控制器应具有哪些基本功能?答:(1)能向CPU提出DMA请求,请求信号加到CPU的HOLD引脚上。(2)CPU响应DMA请求后,DMA控制器从CPU那儿获得对总线的控制权。在整个DMA操作期间,由DMA控制器管理系统总线,控制数据传送,CPU暂停工作。(3)能提供读/写存储器或I/O设备的各种控制命令。(4)确定数据传输的起始地址和数据的长度,每传送一个数据,能自动修改地址,使地址增1或减1,数据长度减1.(5)数据传送完毕,能发出结束DMA传送的信号。2.什么是8237DMA控制器的主态工作方式?什么是从态工作方式?在这两种工作方式下,各控制信号的功能是什么?答:(1)在DMA控制器未取得总线控制权时,必须由CPU对DMA控制器进行编程,以确定通道的选择、数据传送的方式和类型、内存单元起始地址、地址是递增还是递减以及要传送的总字节数,CPU也可以读取DMA控制器的状态。此时,CPU处于主控状态,而DMA控制器就和一般的I/O芯片一样,是系统总线的从属设备,DMA控制器的这种工作方式称为从态方式。(2)当DMA控制器取得总线控制权以后,系统就完全在它的控制之下,使I/O设备和存储器之间或者存储器与存储器之间进行直接的数据传送,DMA控制器的这种工作方式称为主态方式。(3)CS:从态方式下片选信号A3~A0:从态时,输入地址信号,寻址DMA控制器的内部寄存器,主态时,输出要访问内存的最低4位地址。A7~A4:主态时,输出4位地址信息DB7~DB0:从态时,用于8237DMA编程,主态时,输出高8位地址和用来传送数据IOR:从态时作为输入控制信号,读取内部寄存器,主态时作为输出控制信号,与MEMW配合,控制数据由外设传送到存储器中IOW:从态时输入控制信号,对8237A进行初始化编程,主态时,输出控制信号,与MEMR配合,把数据从存储器传送到外设MEMR:主态时,与IOW配合把数据从存储器读出送外设,也用于控制内存间数据传送,使数据从源地址单元读出。从态时该信号无效。MEMW:主态时,可与IOR配合把数据从外设写入存储器,也用于内存间数据传送,控制把数据写入目的单元。从态时该信号无效。DREQ3~DREQ0:通道3~0的DMA请求信号。HRQ:保持请求信号HLDA:保持响应信号DACK3~DACK0:通道3~0的DMA响应信号。EOP:传输过程结束信号。3.8237ADMA控制器的当前地址寄存器、当前字节寄存器、基地址寄存器和基字节寄存器各保存什么值?答:当前地址寄存器用于存放DMA传送的存储器地址值,每传送一个数据,地址值自动增1或减1,以指向下一个存储单元。当前字节寄存器也称为当前字计数寄存器,其初值比实际传送的字节数少1,该值在编 课后答案网www.khdaw.com程时由CPU写入的,用于保存本次DMA传送的字节数。基地址寄存器:用于存放对应通道当前地址寄存器的初值。基字节寄存器:也称基字计数寄存器,用于存放对应通道当前字计数器的初值,主要用于自动预置操作时使当前字计数器恢复初值。4.8237A具有几个DMA通道?每个通道有哪几种传送方式?各用于什么场合?什么叫自动预置方式?答:8237A具有4个DMA通道,每个通道有4种传送方式:(1)单字节传送方式,此种方式下,每进行一次DMA操作,只传送一个字节的数据。此方式能保证在两次DMA传送之间,CPU可执行一次完整的总线操作。(2)数据块传输方式,此方式可使DMA操作连续传输数据,一直到一批数据传送完毕,8237A才释放总线。(3)请求传送方式,此方式与数据块传送方式类似,可连续传送数据,但与其不同之处在于,每传送一个字节后,8237A要对DREQ端进行测试,一旦检测到DREQ信号无效,则立即停止传送,当DREQ有效后,可使DMA传输从断点处继续进行。(4)级联传送方式,此方式可将多个8237A连在一起,以便扩充系统的DMA通道。当DMA处于自动预置方式时,每当产生有效的EOP信号后,该通道将自动把基地址寄存器和基字计数器的内容分别重新置入当前地址寄存器和当前字计数器中,达到重新初始化的目的,这样既不需要CPU的干预,又能自动执行下一次DMA操作。5.8237A可执行哪几条软件命令?答:8237A设置了3条软件命令,只要对特定的端口地址进行一次写操作,命令就会生效。(1)清除先/后触发器8237内部设有一个先/后触发器,用于控制读/写次序,当触发器清0时,读写低8位数据,随后先/后触发器自动置成1,读写高8位数据,随后触发器清0,如此循环。为了按正确的顺序访问寄存器中的高8位字节和低8位字节,CPU应使用清除先/后触发器指令,将触发器清0。(2)主清命令也称复位命令,与RESET功能相同,可使命令寄存器、状态寄存器、请求寄存器、暂存寄存器和内部先/后触发器均清0,将屏蔽寄存器置1.(3)清除屏蔽寄存器该命令能清除4个通道的全部屏蔽位,允许各通道接收DMA请求。6.根据图12.12,表12.3和表12.4,说明如何产生DMA传送的20位存储器地址。答:在DMA服务期间,直接从8237A的A7~A4和A3~A0输出低8位地址,在整个DMA传输周期中这些地址信号都是稳定的。在S1和S2状态,从数据线DB7~DB0输出高8位地址A15~A8,要用三态地址锁存器锁存。8237A只能提供16位地址,最大寻址64KB内存空间,为了实现对全部内存空间的寻91址,在PC/XT中设置了一个页面寄存器74LS670,用来产生存储器的高4为地址A19~A16,8237A管理低16位地址A15~A0.通过对页面寄存器的编程,既可以在1M内存范围内寻址,但在DMA传输过程中,页面寄存器的值是固定的,即总是指向内存中某个64KB的地址范围。7.若8237A的端口基地址为000H,要求通道0和通道1工作在单字节读传输,地址减1变换,无自动预置功能。通道2和通道3工作在数据块传输方式,地址加1变化,有自动预 课后答案网www.khdaw.com置功能。8237A的DACK为高电平有效,DREQ为低电平有效,用固定优先级方式启动8237A工作,试编写8237A的初始化程序。答:初始化程序如下:DMAEQU000H;8237A的基地址为00H;输出主清除命令OUTDMA+0DH,AL;发总清命令;写入方式字:单字节读传输,地址减1变化,无自动预置功能,选择通道0MOVAL,01101000B;方式字OUTDMA+0BH,AL;写入方式字;写入方式字:单字节读传输,地址减1变化,无自动预置功能,选择通道1MOVAL,01101001B;方式字OUTDMA+0BH,AL;写入方式字;写入方式字:数据块传输方式,地址加1变化,有自动预置功能,选择通道2MOVAL,10010010B;方式字OUTDMA+0BH,AL;写入方式字;写入方式字:数据块传输方式,地址加1变化,有自动预置功能,选择通道3MOVAL,10010010B;方式字OUTDMA+0BH,AL;写入方式字;写入命令字:DACK为高电平有效,DREQ为低电平有效,用固定优先级方式MOVAL,11000000B;命令字OUTDMA+08H,AL;写入8237A(完)__'