微机第三版教材习题参考答案马维华

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章作业
2-2简述微处理器的工作方式、各工作方式的含义和区别是什么?它们之间是如何切换的?
答:
1.五种工作方式:实地址方式、保护虚地址方式、虚拟86方式、系统管理方式以及IA-32E方式。

2.含义:
(1)实地址方式是指处理器工作在8086/8088编程环境下的工作方式,其最大地址空间为1MB。

(2)保护地址方式,又称保护虚地址方式,简称保护方式,是真正发挥处理器潜能的一种工作方式。

所谓保护是指在执行多任务操作时,对不同任务使用的不同存储空间进行完全隔离,保护每个任务顺利执行,能够寻址的地址空间为实际的物理地址空间即2m(m为处理器外部地址线的引脚条数)。

(3)虚拟86方式是指一个多任务的环境,即模拟多个8086的工作方式。

在这个方式之下,处理器被模拟成多个8086微处理器同时工作。

(4) 系统管理方式(SMM)是为实现特定功能及系统安全提供的一种工作方式,SMM的功能主要包括电源管理以及为操作系统和正在运行的程序提供安全性。

SMM最显著的应用就是电源管理。

以上四种方式是IA-32所有处理器所具有的工作方式。

(5)从后期的P4到以Core为核心的处理器开始支持64位扩展技术,引入了IA-32E工作方式。

在这种方式下,处理器支持两种模式即兼容的工作方式(兼容IA-32处理器的方式)和64位工作方式。

在兼容模式下,允许在64位操作系统下运行原来的16位和32位应用程序,可使用前缘REX访问64位数据,最大支持的32位地址空间,而在64位方式下,采用EM64T技术,支持64位操作,同时支持36位的地址(从Pentium Pro开始处理器的外部地址线就提供36条),支持64位线性地址,默认的地址空间为64位,默认的数据宽度为32位,指令允许32/64地址和32/64数据的混合使用,因此又把Core为核心的处理器称为32/64处理器,与真正64位处理器有区别,可称之为具有64位功能的32位处理器。

3.工作方式的相互转换如下图所示。

以上工作方式中,系统管理方式需要用硬件切换即有/SMI引脚中断方可以从原来的工作方式进入系统管理方式,其它工作方式的切换均可用软件控制来切换工作方式。

2-3 IA-32E方式兼容模式和64位模式下,Cure X系列处理器能够寻址的物理地址空间分别有多大?
答:具有IA-32E工作方式处理器在兼容模式下,最大支持的32位地址空间即4GB,而在64位方式下,采用EM64T技术,支持64位操作,同时支持36位的物理地址即64GB,支持64位线性地址,默认的地址空间为64位。

2-10 Pentium处理器的U和V两条指令流水线的功能是什么?主频为100MHz的Pentium处理器,最快执行两条指令的时间为多少ns?
答:(1)U流水线主要用于执行复杂指令,而V流水线只能执行简单指令。

(2)最快执行两条指令的时间是一个时钟周期,100MHz主频其一个时钟周期为1/100 (us)=10ns。

2-11简述Pentium处理器的BTB的功能。

答:BTB(分支目标缓冲器)可对分支指令进行预测,目的是提高流水线执行效率。

在Pentium 微处理器中,使用了BTB预测分支指令,这样可在分支指令进入指令流水线之前预先安排指令的顺序,而不致使指令流水线的执行产生停滞或混乱。

2-18 总结一下8086/8088到Core i7处理器外部地址线、数据线条数、通用寄存器的位数以及所处的工作方式。

各自的位长以及所能寻址的物理地址空间有多大?
2-26 已经从内存1FF00000开始存放12H, 34H, 56H, 78H, 90H, ABH, CDH, EFH, 11H, 22H, 33H, 44H, 55H, 66H, 77H, 88H,99H,00H,AAH,BBH,CCH,DDH,EEH,FFH,试说明从1FF00000H开始取一个双四字的值,从1FF00008H开始取双字的值,以及从1F00010H开始取四字和一个字的值。

解:按照数据低字节存放在低地址的原则,在Intel处理器中,为了保持兼容性,仍然定义一个字为16位(尽管字长已经是32位或64位)
从1FF00000H开始的双四字的值=8877665544332211EFCDAB9078563412H
从1FF00008H开始的双字的值=44332211H
从1FF00010H开始的四字的值=FFEEDDCCBBAA0099H
从1FF00010H开始的一个字的值=0099H
2-32 对于IA-32或Intel 64处理器采用16位运算(用16位寄存器),求以下运算结果及相应各标志位:
(1) 5439H+4567H (2) 2345H+5219H (3) 54E3H-27A0H (4) 1A9FH+E561H
解:(1)
5439H+4567H=99A0H
0101 0100 0011 1001
+ 0100 0101 0110 0111
1001 1001 1010 0000
AF=1,PF=1,ZF=0,CF=0,OF=1,SF=1
(2)
2345H+5219H=755EH
0010 0011 0100 0101
+ 0101 0010 0001 1001
0111 0101 0101 1110
AF=0,PF=0,ZF=0,CF=0,OF=0,SF=0
(3)法1直接相减
54E3H-27A0H=2D43H
0101 0100 1110 0011
- 0010 0111 1010 0000
0010 1101 0100 0011
AF=0,PF=0,ZF=0,CF=0,OF=0,SF=0
法2变减为加
54E3H-27A0H=54E3+D860H=2D43H
0101 0100 1110 0011
+ 1101 1000 0110 0000
1 0010 1101 0100 0011
AF=0,PF=0,ZF=0,CF=1,OF=0,SF=0
说明:可见这两种方法算出的结果是一样的,但进借位标志完全不同。

(4)
1A9FH+E561=0000H
0001 1010 1001 1111
+ 1110 0101 0110 0001
1 0000 0000 0000 0000
AF=1,PF=1,ZF=1,CF=1,OF=0,SF=0
2-37 内存数据如表2.26所示,指出实地址方式下,执行下列程序段后AX中的值。

MOV AX,1100H
MOV DS,AX
MOV BX,200H
MOV AX,[BX+62H]
解:从程序段知DS=1100H,有效地址(偏移地址)=200H+62H=262H,因此物理地址=11000H +262H=11262H,11262H开始的一个字为7539H,所以AX=7539H
2-38 IA-32处理器描述符中所含有的基地址为089C0000H,段界限为0003FH,求(1)G=0时该描述符所寻址段的地址范围,该段如果要存汉字,能容纳多少个?(2)G=1时,对于4K页,描述的段的地址范围。

解:(1)G=0,段以字节为单位,段大小=段界+1=3FH+1=40H=64,末地址=段基址+段大小-1=段基址+段界=089C0000H+3FH=089C0000H~0x89C0003F,可容纳汉字64/2=32个;
(2)G=1时,段大小以页为单位(4K页),段大小=(段界+1)×4K=(3FH+1)×1000H =40000H=262144,末地址=段基址+段大小-1=089C0000H+40000-1=089C0000H+3FFFFH=089FFFFFH,可容纳汉字262144/2=131072个。

2-39 试定义IA-32处理器的两个段描述符来描述一个存储器段,均为一个可写、向上增长的用户访问的在物理存储器中、未访问过的数据段,(1)地址范围为03000000H~03001FFFH,(2)01000000H~027FFFFFH。

解:(1)定义段描述符就是确定段基址、段界和相关属性
段基址=03000000H,段界=末地址-首地址=1FFFH,段界<FFFF,因此,属性G=0,另外根据IA-32处理器,默认D=1(32位数据),AVL=0,
访问权字节, P=1,DPL=11,S=1, TYPE=001,A=0,对照描述符格式
4
0 所以段描述符为:03 40 F2 000000 1FFFH
(2) 段基址=01000000H,段大小=027FFFFFH-01000000H+1=017FFFFFH=01800000H>FFFFFH +1因此,G=1,由于段大小=(段界+1)×4K,因此段界=段大小/4K-1=01800000H/4K-1=1800H-1=17FFH,其它属性同上,则段描述符=01C1F200000017FFH 2-41 已知从00100000H开始存放FFH,01H,00H,04H,10H,F2H,0AH,06H,FFH,03H,00H,00H,10H,F2H,40H,02H,从02100000H开始存放35H,36H,31H,30H,30H,32H,39H,38H,3AH,DS=000BH,EBX=0000002H,GDTR=001000001FFFH,CR0=60000011H,CR3=00034000H,对于IA-32处理器,执行指令MOV EAX,[EBX]时:
(1)求源操作数对应的描述符表可存放描述符个数
(2)求源操作数对应段描述符的值以及该描述符描述段的地址范围
(3)求源操作数所对应的物理地址
(4)求指令执行后EAX中的内容。

(5)从已知条件中还能得到什么信息?
解:DS=000BH=0000 0000 0000 1011B,对照选择子的格式可知TI=0,选中GDT表,RPL=11为普通用户使用,索引×8=08H
(1)GDT表可存放的描述符的个数由GDTR中的界决定,GDT表的界=1FFFH,因此可存放的
段描述符的个数=(1FFFF+1)/8=400H=1K个

(2)先找出描述符存放的首地址=GDT表首址(GDTR高32位)+索引×8=00100000H+08H =00100008H,以段描述符为0240F210000003FFH,段描述符描述的段的大小取决于段界和G,对照段描述符的格式可知G=0,段界=003FFH,段基址=02100000H,因此段地址范围为02100000H~0210003FFH;
(3)CR0=600000011H,因此PE=1,PG=0,是分段而不分页的保护方式,因此CR3多余,段内偏移地址=EBX的值=00000002H,因此物理地址=段基址+段内偏移地址=02100000H+00000002H=02100002H;
(4)021000002H开始的4个字节就是EAX的值=32303031H;
(5)由段描述符可知,G=0,D=1为32位数据,此外决定其它属性的主要是访问权字节,访问权字节中为F2H=11110010B,即P=1表示数据在物理存储器中,DPL=11表示一般用户程序访问的数据,S=1表示段描述符,A=0表示该段还没有被访问过,TYPE=001表示该段是向上增长的可写的数据段。

2-42已知内存中的数据如表 2.26所示,对于IA-32处理器,已知内部相应寄存器的值为:ESI=00001230H,DS=SS=ES=FS=GS=1003H。

GDT表和LDT表的首地址均为0,CR4=0。

CR3=000011FFH,内存数据如下所示。

(1)当CR0=70000010H时指令MOV EAX,[ESI]对应源操作数的物理地址及指令执行后EAX中的值。

(2)当CR0=70000011H时求指令MOV EAX,[ESI]对应源操作数的物理地址及指令执行后EAX 中的值。

该段的最多能容纳多少字节数据?根据访问权字节说明该段是什么样的段,是否存在存储器中?
解:CR4=0表示没有页的扩展,默认4KB页大小
(1)由CR0=70000010H可知,PE=0,处于实地址方式,因此物理地址=段地址×16+偏移地址=10030H+00001230H=00011260H,由表可知执行完MOV EAX,[ESI]之后,EAX的值=75392A00H;
(2)由CR0=70000011H知PE=1且PG=0为仅分段的保护方式,由DS=1003H=0001000000000011B,可知,TI=0选择的是GDT表,RPL=11表示一般用户访问,索引×8=1000H 段描述符存放的首地址=GDT表首址+索引×8=00001000H,所以通过上表可知,
段描述符=0040F30100001FFFH,段基址=00010000H,段界=01FFFH,G=0,段内偏移量=ESI =00001230H,因此物理地址=段基址+偏移地址=00010000H+00001230H=00011230H,由表可得执行MOV EAX,[ESI]后,EAX的值就是从00011230H开始的4个字节,即EAX=32303136H;
由于G=0时段大小=段界+1=01FFFH+1=2000H=8192字节,即可容纳8192字节的数据访问权字节=F3H=11110011B,A=1该已经被访问过,同P=1在物理存储器中,是向上增长的可写的数据段。

(3)由CR0=E0000011H知PE=1且PG=10为分段且页的保护方式,
由(2)得线性地址=00011230H,由于CR4=0页大小为4KB(不扩展)
00011230H=0000 0000 0000 0001 0001 0010 0011 0000B,偏移地址=230H
CR3=000011FFH,因此页目录基地址=00001000H,页目录索引*4=0,因此目录项地址=00001000H,从表中找出页目录项为00001FFFH,因此页表基址=00001000H,页表索引*4=11H*4=44H 因此页表项地址=00001044H,页表项=00011E13H,页基地址=00011000H,物理地址=页基地址+页内偏移量=00011000H+230H=00011230H,EAX的值就是从00011230H开始的4个字节,即EAX =32303136H;
2-43 已知内存中的据如表2.26所示,IA-32处理器复位后,立即执行以下指令,求出指令执行完EAX中的值并说明处理器的工作状态。

(注意自复位后处理器的状态,参见2.3.1中图2.22)。

MOV EAX,CR0
OR EAX,1
MOV CR0,EAX
MOV EAX,00011000H
MOV CR3,EAX
MOV EAX,CR0
OR EAX,80000000H
MOV CR0,EAX
MOV EAX, [23401000H]
00011000H,由第6,7,8条指令可知,CR0.31(PG)=1,即处理器工作在分段和分页的保护方式由于复位后除代码段外,其它段基地址=0因此段描述符所描述的段基地址也为0,因此线性地址=段内偏移地址=23401000H=0010001101 0000000001 0000 0000 0000B
页目录索引×4=001000110100B×4=234H,页表索引×4=0000000001H×4=00000004H
页目录项基地址=00011000H,因此页目录项的地址为页目录基地址+页目录索引值×4=00011000H+234H=00011234H,因此页目录项=00001147H,页表基地址=00001000H,因此页表项地址为页表基地址+页表索引×4=00001000H+00000004H=00001004H,页表项=00001147H,页基地址=00001000H,物理地址=页基地址+页内偏移地址=00001000H+0=00011000H,因此EAX=00001FFFH
第五章作业
5-2简述半导体存储器的分类及主要性能指标。

答:(1)分类传统半导体存储器
RAM
ROM
SRAM-静态随机存取存储器,主要用于Cache
DRAM-动态随机存取存储器,主要用于内存模块
MROM-掩膜型只读存储器
PROM-一次可编程只读存储器
EPROM-紫外线可擦除可编程只读存储器,早期ROM BIOS
E2PROM-电可擦除可编程只读存储器
Flash-闪速存储器,现代ROM BIOS
新型存储器
FRAM-铁电存储器,非易失性RAM
MRAM-磁阻式存储器,非易失性RAM
(2)主要性能指标:存储容量、存取速度和带宽(带宽=存储器总线频率×数据宽度/8 (单位:字节/S))
5-3 说明SRAM、DRAM、MROM、PROM、EPROM及FRAM的特点及简单工作原理。

答:SRAM靠双稳态触发器的两个稳定状态存储信息的;DRAM靠极间电容的充放电来存储信息的;MROM靠光刻技术确定是否保留MOS管决定信息的,跨接MOS管,信息为0,没有跨接MOS管,信息为1;PROM是靠熔丝的通断决定信息的,没有熔断,则信息为1,熔断信息为1;EPROM是靠雪崩注入式场效应管(FAMOS管)的浮置栅是否积累足够的电荷来存储信息的,有足够的电荷积累,则记录信息0,没有足够的电荷积累信息记录;FRAM是靠铁电电容来存储信息的。

5-4 已知一个SRAM芯片的容量为4M×8,该芯片有一个片选信号引脚和一个读/写控制引脚,问该芯片至少有多少个引脚?
解:SRAM的引脚的确定从地址线、数据线、控制线及电源线四方面考虑,地址线m决定字数,2m=4M,因此m=22,容量4M×8,所以n=8,片选一条,读写控制一个,电源和地各一条,芯片共有引脚=22+8+1+1+2=34条。

如果算出来为奇数,则加1变偶数,以便于对称,便于制作。

5-6 50ns的512M×8的DRAM芯片,其外部数据线和地址线为多少条?1秒钟至少可存取多少次?如果系统接内存的总线周期40ns的微机系统,在访问存储器时要不要插入等待周期?如果处理器是Pentium,则需要插入多少ns的等待时间?
解:(1)寻址的地址线=log2(单元数)=log2(512M)=log2(229)=29条,由于DRAM的外部地址线是内部的一半,因此DRAM的外部地址线为15条,数据线8条,1s/50ns=109/50=20000000次,即每秒可存取2千万次,总线周期为40ns,因此比50ns快,因此需要插入等待周期,才能正常访问50ns的存储器。

如果是Pentium处理器,,是由于一个总线周期含2个状态,因此一个状态为20ns,因此等待一个状态20ns后,访问时间为40ns+20ns=60ns超过50ns即可访问。

因此要插入20ns的等待时间。

5-9 试计算外频(内存模块的核心频率)为200MHz时DDR、DDR2、DDR3、双通道DDR4的带宽。

解:由于DDR、DDR2、DDR3、DDR4数据宽度为64位,200MHz下的速度如下:
(1) DDR:200MHz×2×64/8=1600MB/s
(2) DDR2:200MHz×4×64/8=3200MB/s
(3) DDR3:200MHz×8×64/8=6400MB/s
(4)DDR4:双通道200MHz×8×2×64/8=25600MB/S
5-10已知RAM的容量为
(1) 16K×8 (2) 64K×8 (3) 128K×8 (4) 256K×8
如果RAM的起始地址为3450H,则各RAM对应的末地址为多少?
解:(1)16K×8,单元数16K=24×210=3FFFH+1,所以末地址=首地址+大小-1=3450H+3FFFH=744FH (2)64K=216=FFFFH+1,末地址=3450H+FFFFH=1344FH
(3)128K=217=1FFFFH+1,末地址=3450H+1FFFFH=2344FH
(4)256K=218=3FFFFH+1,末地址=3450H+3FFFFH=4344FH
5-11如果一个应用系统中ROM为8KB,最后一个单元地址为57FFH,RAM紧接着ROM后面编址,RAM为16KB,求该系统中存储器的第一个地址和最后一个单元地址。

解:ROM最后一个单元为57FFH,8K=213=1FFFH+1,因此首地址=末地址-(大小-1)=57FFH-1FFFH=3800H,由于RAM紧跟ROM后面编址,因此RAM的首地址=57FFH+1=5800H,RAM大小16K=214=3FFFH+1,所以RAM的最后地址就是系统存储器的末地址(最后一个单元的地址)=5800H+3FFFH=97FFH 5-14用4K×8的SRAM芯片构成16K×16的存储器,要求起始地址为08000H,画出联接图,选用8086。

解:需要的芯片数:16K×16/(4K×8)=4×2=8片。

起始地址=08000H,容量16K×16=32K×8=32KB(微机是按字节编址的),因此32K=215=7FFFH+1,末地址=08000H+7FFFH=0FFFFH,需要增加的地址线3条,08000H~0FFFFH可变的地址为A14~A0,其中A14、A13为增加的地址线,分别接2-4译码器输入端B和A,A11~A0是芯片本身的地址线接系统地址总线的A12~A1,不变的地址A19~A16均为0,A15=1,A0与RD逻辑或后接存储器的偶地址(低字节)存储模块的读信号,A0与WR或后接存储器的偶地址(低字节)存储模块的写信号,BHE与RD 逻辑或后接存储器的奇地址(高字节)存储模块的读信号,BHE与WR或后接存储器的奇地址(高字节)存储模块的写信号,即当读或写偶地址存储体时,A0=0,能对如1#,3#,5#,7#进行读写操作,当读或写奇地址存储体时,BHE=0,能对2#,4#,6#,8#进行读操作,以保证对奇偶存储体的访问,当A0=0并且BHE=0时,可对一个字(16位)进行访问,连接示意如图所示。

(b)由3-8译码器使能端有效即E3=1,E2=E1=0知:A9=1,A8=0,A7=0,A6=1,A5=0,A4=1,A3=0
Y0:A2A1A0=000,因此Y0的地址=1001010000B=250H
Y1:A2A1A0=001,因此Y1的地址=1001010001B=251H
Y2:A2A1A0=010,因此Y2的地址=1001010010B=252H
Y3:A2A1A0=011,因此Y3的地址=1001010011B=253H
Y4:A2A1A0=100,因此Y4的地址=1001010100B=254H
Y5:A2A1A0=101,因此Y5的地址=1001010101B=255H
Y6:A2A1A0=110,因此Y6的地址=1001010110B=256H
Y7:A2A1A0=111,因此Y7的地址=1001010111B=257H
5-17 简述8088、8086、80386、Pentium、Pentium II、Pentium III、Pentium4以及Core 2系统存储器的组成形式。

解: 8088为8位存储器组织,共一个8位存储体,总容量最大1MB;
8086和80286为16位存储器组织,共2个8位存储体,1个偶地址存储体和1个奇地址存储体,其中8086的每个存储体最大512KB,共1MB,而80286每个8MB,共16MB;
80386为32位存储器组成,共4个8位存储体,每个最大1MB,共4GB;
Pentium~CureX均为64位存储器组织,共8个8位存储体,Pentium每个存储体最大512MB,共4GB,PentiumII~CoreX每个最大8GB,共64GB。

5-19 对于80386/80486设计一个32位存储器模块,使用EPROM芯片,地址范围FFFF0000H~FFFFFFFFH。

解:80386/80486地址线32条,数据线32条,EPROM容量为FFFFFFFFH-FFFF0000H+1=10000H即64KB,64KB=64K×8=(16×4)×8=16K×32,即可用4片16KB的EPROM 27128通过位扩展构成这一存储器模块。

由地址关系知:不变的地址:A31~A16=全1,变化的就是64KB大小的存储体,存储器的组成如图所示。

5-20 采用SRAM 62512构建的一个64位存储器模块如图5.38所示。

(1)试写出本存储器模块的地址范围。

(2)试编写一段程序,将1号62512的64KB的数据复制到7号62512中
M/IO
A31A30A28A27A26A25A29A24
A23A22A20A19A21
图5.38 SRAM 构成的64位存储器模块
答:
(1)A31~A19=0000000000001,A18~A0全0到全1变化,因此地址范围为:00080000H~000FFFFFH
(2)要注意一个62512中的64KB 数据的地址是相差8,不是连续的,由64位存储器组成所决定的,因此在写程序时修改地址指针时要特别注意。

1号芯片的起始地址为:00080000H ,7号芯片起始地址:00080006H ,每增加一个数据单元,地址加8,程序片段如下:
MOV
CX ,0
;64K 个字节单元数据计数器
MOV AX ,8000H MOV
DS ,AX
;段地址为8000H
MOV SI ,0 ;源数据对应偏移地址0,物理地址80000H
MOV DI ,6
;目的数据偏移地址6,物理地址80006H
LP : MOV AL ,[SI] MOV
[DI],AL
ADD SI ,8 ADD DI ,8
LOOP
LP
或: 用32位偏移地址 MOV
CX ,0
;64K 个字节单元数据计数器
MOV ESI ,00008000H
MOV EDI ,00008006H
LP : MOV AL ,[ESI] MOV
[EDI],AL
ADD ESI ,8 ADD EDI ,8
LOOP
LP
5-22 CMOS 的功能是什么?如何对其操作?写出将年月日时分秒的值读出后存入1000H:2000H 开始的内存区域的程序片段。

解:CMOS 主要包括实时钟及CMOS RAM ,因此其主要功能有产生实时钟及保存设置和配置信息。

对CMOS 的操作分两个步骤:(1)向70H 写CMOS 地址;(2)对71H 读或写数据
第一种方法:由于年月日时分秒地址不连续或规律性不强,可以先在内存缓冲区中定义时间单元,然后就可以构建循环体。

.DATE
DateBuf DB 09H,08H,07H,04H,02H,00H ;定义CMOS年、月、日、时、分、秒地址
.CODE
MOV AX,1000H
MOV ES,AX
MOV DI,2000H
MOV AX,SEG DateBuf
MOV DS,AX
MOV SI OFFSET DateBuf
MOV CX,6
LP1:MOV AL,[SI] ;日期时期单元
OUT 70H,AL
IN AL,71H
MOV ES: [DI],AL
INC DI
INC SI
LOOP LP1
第二种方法一个一个写
MOV AX,1000H
MOV DS,AX
MOV DI,2000H
MOV AL,09H ;年单元
OUT 70H,AL
IN AL,71H
MOV [DI],AL
INC DI
MOV AL,08H ;月单元
OUT 70H,AL
IN AL,71H
MOV [DI],AL
INC DI
MOV AL,07H ;日单元
OUT 70H,AL
IN AL,71H
MOV [DI],AL
INC DI
MOV AL,4 ;时单元
OUT 70H,AL
IN AL,71H
MOV [DI],AL
INC DI
MOV AL,2 ;分单元
OUT 70H,AL
IN AL,71H
MOV [DI],AL
INC DI
MOV AL,0 ;秒单元
OUT 70H,AL
IN AL,71H
MOV [DI],AL
第六章作业
6-2简述微处理器与I/O设备之间的接口信息。

答:接口信息:微处理器与外设之间交换的信息概括起来有数据信息、状态信息和控制信息。

微机中的数据信息通常有数字量、模拟量和开关量三种基本形式。

状态信息是外部设备向微处理器提供外设当前工作状态的信息,微处理器接收到这些状态就可以了解外设的情况,适时准确地进行有效的数据传送。

常见的外设状态信息如输入设备准备好信号(READY)、输出设备是否忙(BUSY)等等。

控制信息是微处理器通过I/O接口向外部设备发送控制命令的信息。

控制命令主要用于I/O设备的工作方式设置等。

6-3简述I/O编址方式。

答:I/O端口地址的编址有两种基本方法:存储器映射编址(统一编址)和I/O映射编址(独立编址)。

存储器映射I/O编址就是I/O端口的地址与存储器的地址统一混合编址,即把一个I/O口地址看作是一个存储单元。

I/O映射编址是指I/O端口与存储器分开独立编址,即I/O端口和存储器都有自己的一套地址空间,而且互不相干。

这样,I/O端口不占用内存空间,但在这种编址方式下,必须采用专用的I/O指令(IN 或OUT指令)才能访问I/O设备。

从8086到Pentium,仅支持I/O映射的编址方法,而P6架构及之后的处理器既支持I/O映射编址又支持存储器映射编址,即除了用IN/OUT等专用I/O指令外,还可以用访问存储器的指令访问被映射的I/O端口。

6-4微机系统中的16位、32位以及64位I/O组织的特点是什么?各自由哪些信号线访问I/O端口?
答:16位采用2个8位I/O体,32位采用4个8位I/O体,64位采用8个8位I/O体构成完整的
I/O系统。

不管是哪一种形式,I/O端口地址范围0000H~FFFFH,处理器仅提供16条地址线来寻址I/O。

主要信号线有:
16位I/O组织的8086~80286:A15~A0以及IORC、IOWC和BHE;
32位的I/O组织80386~Pentium:A15~A2以及BE0~BE3、IORC和IOWC;
64位的I/O组织Pentium Pro~Core :A15~A3以及BE0~BE7、IORC和IOWC。

IN EAX,DX实际4个地址有效,OUT DX,RAX8个地址同时有效。

6-8试采用8位缓冲器和8位锁存器设计一个32位输入和输出接口,输入和输出接口的基地址均为8010H,画出原理图,并写出读该32位输入接口和写32位输出接口的程序片段,假设读入的32位数据存放在EBX中,待写的32位数据在ECX中。

答:参照教材中32位输入接口及32输出接口设计实例,满足本题要求的地址8010H的32位输入输出接口如图所示。

位I/O输出
32位输出接口
程序片段如下:
MOV DX,8010H
IN EAX,DX
MOV EBX,EAX
MOV EAX,ECX
OUT DX,EAX
6-11已经波特率为2400bps,字符格式为7位数据,1位校验位,1位停止位,UART发送端的波形如图6.61所示(下方为参考方波,说明该数据是多少(用十六进制表示),采用什么校验?
+4.8V
0V
f=2.4KHz参考方波)
图6.61 题6-11图
解:由UART字符格式知,传送数据是低位在前高位在后,据已经条件知,1位起始位,7位数据,1位校验位,1位停止位,共10位为一帧,从图中找出起始位(低电平)开始的连续10位,图从2.4KHz 的一个脉冲对应2400bps波特率的一个位,即从第3个脉冲开始10位恰是传送的一帧字符,去掉开始的起始位,从第4个脉冲开始取7位数据位,依次是D0=1,D1=1,D2=0,D3=1,D4=0,D5=1和D6=1,校验位=0,停止位=1,因此数据为D6D5D4D3D2D1D0=1101011B=6BH,由于校验为0,因此传送的字符中(含校验位)1的个数为5,奇数,因此为奇校验。

6-13如果通过RS-232C进行双机通信,波特率为11520bps,字符格式为1位停止位,没有校验,8位数据,通过示波器得到的波形如图6.62所示,上图是RS-232C的连接器DB9-2脚(RXD)的波形,下面是为了比较方便输入的频率为11.52Kz的参考方波。

指出波形对应的数据(用十六进制表示)。

f=11.52KHz(参考方波)
图6.62 题6-12图
解:分析方法同6-10,只是逻辑关系是相反的,+9.6V对应逻辑0,-9.6V对应逻辑1。

第3个参考脉冲对应起始位+9.6V(逻辑0),数据位从第4个脉冲开始的8位,依次为D0=1,D1=0,D2=0,D3=1,D4=0,D5=1,D6=0,D7=0,因此传送的数据为00101001B=29H
6-17假设8255的端口地址为60H-63H,试分别编写满足条件的初始化程序:
(1) 将A组和B组设置为方式0,端口A和B设成输入端口,C上半口为输入,下半口为输出。

(2) 将A口设为方式2,B口设为方式1输出。

(3) 将A口设为方式1输出,B口为方式1输出,PC4和PC5为输出。

解:(1)
MOV AL,10011010B
OUT 63H,AL
(2)
MOV AL,11000100B
OUT 63H,AL
(3)
MOV AL,10100100B
OUT 63H,AL
6-18如图6.63所示为以8086为核心采用8255扩展I/O接口,A口接一输入设备,B接输出设备,PC5作为检测输入设备的准备就绪信号READY,PC6作为输出设备忙BUSY检测端。

(1)写出8255的初始化程序片段
(2)写出读取输入设备数据并存入内存ES:DI指示单元的子程序(读时除了要判断RAEDY外,还要使能OE)
(3)写出从DS:SI指示的内存单元取出数据写到输出设备的子程序(写时除了要判断BUSY外,还要产生锁存脉冲CLK)
(4)已知8255的PC7接一上拉电阻,其对地连接一细长微型导线(A与B之间),PC3通过驱动接一蜂鸣器构成一简易防盗报警系统,如果微型导线被碰断,则蜂鸣器发出报警声(蜂鸣器得电而响)直到导线被保安人为接上,报警的同时向输出设备发送字符串“Grasp the burglar!”通知值班人员采取措施。

写出有关程序。

A15
A14
A13
A12
A11
A10
A9
A8
A7
A6
A5
A4
A3
A0
图6.63 题6-18图
解:地址定义
P8255Ctrl EQU 0FC56H
P8255A EQU 0FC50H
P8255B EQU 0FC52H
P8255C EQU 0FC54H
(1) MOV AL,10001010B ;A方式0输出,C上半口输入,B方式0输入,C下半口输出
MOV DX,P8255Ctrl ;控制口
OUT DX,AL
(2) MOV DX,P8255C ;C口
WAITL: IN AL,DX ;Ready
TEST AL,00100000B ;PC5
JZ WAITL ;未准备好等待
MOV DX,P8255Ctrl
MOV AL,00000000B
OUT DX,AL ;PC0=0(OE=0)
MOV DX,P8255B ;B口
IN AL,DX ;读输入设备数据
MOV ES:[DI],AL ;写入指定内存单元
(3)MOV DX,P8255C ;C口
WAITP:IN AL,DX
TEST AL,01000000B ;PC6(BUSY)
JNZ WAITP
MOV DX,P8255Ctrl
MOV AL,00000011B
OUT DX,AL ;PC1=1(CLK=1)
NOP
NOP
DEL AL
OUT DX,AL ;PC1=0(CLK=0)
MOV AL,DS[SI]
MOV DX,P8255A ;A口
OUT DX,AL ;数据输出
(4)MOV DX,P8255Ctrl ;控制口
MOV AL,00000010B ;PC1=CLK=0,锁存脉冲复位为0
OUT DX,AL
START: MOV DX,P8255C ;C口
IN AL,DX
TEST AL,80H ;判断PC7
JNZ BEEP
MOV DX,P8255Ctrl
MOV AL,00000110 ;PC3=0置复位命令字
OUT DX,AL ;取消报警
JMP START
BEEP:MOV DX,P8255Ctrl ;控制口
MOV AL,00000111 ;PC3=1
OUT DX,AL ;报警
MOV SI,OFFSET STRINGS
MOV CX,18 ;18个字符
WAITB:MOV DX,P8255C ;C口
IN AL,DX
TEST AL,01000000B ;BUSY=1?
JNZ WAITB
MOV DX,P8255A ;A口
MOV AL,[SI]
OUT DX,AL
MOV DX,P8255Ctrl ;控制口
MOV AL,00000011B ;PC1=CLK=1,锁存脉冲上升沿
OUT DX,AL
NOP
INC SI
DEC AL
OUT DX,AL ;PC1=CLK=0,锁存脉冲结束
LOOP WAITB
STRINGS DB ‘Grasp the burglar!’
6-19图6.64为用8255作为打印机接口的原理图,假设要打印的数据(组合BCD码,如45H)在以PDATA开始的存储区域,且数据长度为PNUM,写出打印这些数据的子程序。

A15
图6.64 题6-11图
解:P8255A EQU 3000H
P8255B EQU 3004H
P8255C EQU 3008H
P8255Ctrl EQU 300CH
MOV DX,P8255Ctrl
MOV AL,10001000B
OUT DX,AL ;方式选择控制字
MOV SI,OFFSET PDATA
MOV CX,PNUM
MOV AL,00000101B ;PC2=/STB=1置打印机选爱脉冲初始化为1
OUT DX,AL
REPEAT: MOV AL,[SI] ;取数据
MOV BL,AL ;暂存BL
AND AL,0F0H ;取高4位
PUSH CX
MOV CL,4
SHR AL,CL
ADD AL,30H ;转换成ASCII码
POP CX
CALL PSUB
MOV AL,BL ;取回原来的数据
AND AL,0FH ;取低4位
ADD AL,30H ;转换成ASCII码
CALL PSUB
INC SI ;指向下一个单元
LOOP REPEAT
.EXIT
;打印一个字符的子程序
PSUB PROC NEAR
MOV AH,AL ;等打印字符在AL中暂存AH中,后面用到AL
MOV DX,P8255C
WAITP: IN AL,DX ;判BUSY=PC6
TEST AL,01000000B ;BUSY=PC6
JNZ WAITP
MOV DX,P8255A ;A口地址
MOV AL,AH ;取回待打印字符(ASCII码)
OUT DX, AL ;送A口(打印机端口)
MOV DX,P8255Ctrl ;控制口
MOV AL,00000100B
OUT DX,AL ;PC2=0命令(/STB=0),产生/STB负脉冲开始
NOP
INC AL
OUT DX,AL ;PC2=1命令(/STB=1) ,产生/STB负脉冲结束
RET
SUBP ENDP
6-20已知8254的端口地址为3000H、3004H、3008H和300BH,外接时钟频率为2MHz,利用8254的OUT0通道产生周期为1ms的方波,OUT1产生最快的连续脉冲序列,周期为多少?OUT2产生最大的负脉冲(建议方式1),负脉冲的宽度为多少。

试编制满足上述要求的程序。

解:(1)满足要求的程序如下
P8254_0 EQU 3000H
P8254_1 EQU 3004H
P8254_2 EQU 3008H
P8254_C EQU 300CH
.MODEL SMALL
.CODE
.STARTUP
MOV DX,P8254_C ;8254控制口地址
MOV AL,00110110B ;CTC0命令字:方波信号发生器方式
OUT DX,AL
MOV DX,P8254_0 ;CTC0通道地址
MOV AX,2000 ;计数常数=2MHz*1000us=2000
OUT DX,AL ; 实际收入低8位初值
MOV AL,AH ;取高8位
OUT DX,AL ;写高8位初值
MOV DX,P8254_C ;8254控制口地址
MOV AL01010100B ;CTC1命令字:速率发生器方式
OUT DX,AL
MOV DX,P8254_1 ;CTC1通道地址
MOV AL,2
;计数常数=2(最快) OUT DX,AL
;写初值 MOV DX,P8254_C
;8254控制口地址
MOV AL10110010B ;CTC2命令字:负脉冲信号发生器方式
OUT DX,AL MOV DX,P8254_2
;CTC2通道地址
MOV AL,0
;计数常数=0000(最大值) OUT DX,AL
;写初值
OUT DX,AL .EXIT
END
(2)OUT1产生最快的连续脉冲序列,1个周期为2个计数时钟,因此周期=1/2MHz*2=1us;
OUT2产生最大的负脉冲,负脉冲的宽度为65536个计数脉冲周期=65536×
1/2MHz=32768us=32.768ms
6-21已知8254的CLK0接5MHz 时钟, 其端口地址为280H,282H,284H 和286H 系统采用16位的8086,画出8254与系统的连接图, 译码电路自行设计。

(1)要在OUT0引脚周期性地产生负脉冲宽度为2ms 的信号作为定时中断请求信号,写出初始化程序
(2)若利用8254产生1S 为周期的定时中断信号,说明实现方法,画出相应的连接图,并编写相应程序。

答: (1) 由地址:280H 、282H 、284H 和286H 知:(地址不重叠,即全译码,I/O 端口16条地址线全部要参与译码)
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0=0000 0010 1000 0xx0 B 电路如下:
2ms 周期的方波
OUT0产生2ms 定时中断信号(方波) P8254_0 EQU 280H
P8254_1 EQU 282H
P8254_2 EQU 284H
P8254_C EQU 286H
MOV DX,P8254_C
MOV AL,00110110B ;ctc0控制字
OUT DX,AL
MOV AX,20000 ;初值=5MHz*(2ms*2)=5000*4=20000
;注意:2ms仅为负脉冲宽度,因此一个周期=4ms
MOV DX,P8255_0 ;CTC0通道
OUT DX,AL ;写低字节初值
MOV AL,AH
OUT DX,AL ;写高字节初值
(2) 1S周期的时间常数1S*5MHz=1*5000000=5000000>65536因此一个定时通道不够,要两个通道级联,可以将CTC1的OUT1输出接CTC2输入CLK2,由OUT2产生1S方波,将5000000=1000*5000
即CTC1定时常数1000,CTC2定时常数为5000,系统连接如图所示。

MOV DX,P8254_C
MOV AL,01110110B ;CTC1控制字
OUT DX,AL
MOV DX,P8254_1 ;CTC1通道
MOV AX,1000 ;初值1000低8位
OUT DX,AL ;写初值
MOV AL,AH ;初值1000高8位
OUT DX,AL ;写初值,在OUT1上得到0.2ms为周期的方波
MOV DX,P8254_C
MOV AL,10110110B ;CTC2控制字
OUT DX,AL
MOV DX,P8254_2 ;CTC2通道
MOV AX,5000 ;初值5000低8位
OUT DX,AL ;写初值
MOV AL,AH ;初值5000高8位
OUT DX,AL ;写初值,在OUT2上得到1秒周期的方波第七章作业
7-6已知内存单元中有关单元存放的信息如表7.7所示,CR0=60000001H,IDTR=6500000007FFH,GDTR=001000007FFFH,求类型号为11H的中断服务程序入口地址。

相关文档
最新文档