第1章 (1.6 习 题)
1.简述名词的概念:微处理器、微型计算机、微型计算机系统。 答:
(1)微处理器:微处理器(Microprocessor)简称µP或MP,或CPU。CPU是采用大规模和超大规模集成电路技术将算术逻辑部件ALU(Arithmetic Logic Unit)、控制部件CU(Control Unit)和寄存器组R(Registers)等三个基本部分以及内部总线集成在一块半导体芯片上构成的电子器件。
(2)微型计算机:微型计算机(Microcomputer)是指以微处理器为核心,配上由大规模集成电路制作的存储器、输入/输出接口电路及系统总线等所组成的计算机,简称微机。
(3)微型计算机系统:微型计算机系统由硬件与软件两大部分组成,分别称为硬件(Hardware)系统与软件(Software)系统。其中,硬件(Hardware)系统由CPU、内存储器、各类I/O接口、相应的I/O设备以及连接各部件的地址总线、数据总线、控制总线等组成。
软件(Software)系统:计算机软件(Software)是指为运行、维护、管理、应用计算机所编制的程序及程序运行所需要的数据文档资料的总和。一般把软件划分为系统软件和应用软件。其中系统软件为计算机使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据用户和所服务的领域提供不同的功能。
2.简述名词的概念:指令寄存器、地址寄存器、标志寄存器。 答:
(1)指令寄存器:指令寄存器(Instruction Register,IR)用来保存计算机当前正在执行或即将执行的指令。当一条指令被执行时,首先,CPU从内存取出指令的操作码,并存入IR中,以便指令译码器进行译码分析。
(2)地址寄存器:地址寄存器(Address Register,AR)被动地接受IP传送给它的地址值(二进制地址),AR的作用是保持IP送来的地址,并且以并行方式连接输出到CPU的地址引脚上,以便CPU访问指定的内存单元。
(3)标志寄存器:标志寄存器(Flags,F)是CPU中不可缺少的程序状态寄存器,因此,也称程序状态字寄存器(PSW),所谓状态是指算术或逻辑运算后,结果的状态以二进制的0或1在标志寄存器中标识出来,例如,运算结果有进位,则进位标志位CF=1,否则为0。
3.何谓IA-32处理器? 答:
Intel公司推出了32位结构的80386微处理器后,确定了80386芯片的指令集结构(Instruction Set Architecture)为以后开发80X86系列处理器的标准,称其为Intel 32位结构(Intel Architecture-32,IA-32),后来的80486、Pentium等微处理器统称为IA-32处理器,或称32位80X86处理器。
4.什么叫总线?总线包括哪三种? 答:
所谓总线,它将多个功能部件连接起来,并提供传送信息的公共通道,能为多个功能
1页
如有你有帮助,请购买下载,谢谢!
部件分时共享,CPU通过总线连接存储器和I/O接口等,构成了微型计算机。
这里指的总线(BUS)包括地址总线、数据总线和控制总线三种。 5.地址总线的作用是什么? 答:
地址总线(Address Bus,AB),通常是CPU用来发出地址信息的,用于对存储器和I/O接口进行寻址。
6.什么叫溢出?判断溢出的方法是什么? 答:
(1)溢出通常指计算机运算的结果超出了计算机所能允许的范围。本章所讲的溢出是指用补码实现加/减运算后,若参与操作的两数在定义域内,但运算结果超出了字长范围内补码所能允许表示的值,所计算出的结果产生了错误,称之为溢出。
(2)加/减运算判断溢出的方法:
如果把加/减法运算都变成补码相加,则两个正数相加可能产生正的溢出,两个负数相加可能会产生负的溢出,正负两数相加不会产生溢出。
具体实现的方法是:两个操作数运算后,用最高位和次高位产生的进位位异或,异或结果为1,则表示有溢出,结果为0,表示无溢出。例如:两个8位数运算后,溢出标志
OF=C6⊕C7
7.假设四种CPU主存地址分别为16根、20根、24根以及32根,试问每种CPU可寻址内存多少字节?
解:每种CPU可寻址内存分别是:216=64KB、220=1MB、224=16MB、232=4GB。 8.在一般指令格式中,由哪两部分组成? 答:
由操作码和操作数组成。
9.设字长为16位,将下列十进制数转换成二进制数、十六进制数以及BCD数。 ① 65 ② 129 ③ 257 ④ 513 解:
① 65=01000000B=41H=(0110 0101)BCD ② 129=B=81H=(0001 0010 1001)BCD ③ 257=1B=101H=(0010 0101 0111)BCD ④ 513=01B=201H=(0101 0001 0011)BCD
10.设字长为8位,写出x、y的原码、反码和补码,并且用补码计算x+y,问是否有溢出?
① x=-78 y=35 ② x=-64 y=-66 解:
① x=-78 y=35
[X]原=, [X]反=, [X]补=
[Y]原=00100011, [Y]反=00100011, [Y]补=00100011 [X]补+[Y]补=+00100011=, 无溢出。 ② x=-64 y=-66
2页
如有你有帮助,请购买下载,谢谢!
[X]原=, [X]反=, [X]补= [Y]原=, [Y]反=, [Y]补=
[X]补+[Y]补=+=01111110, 有溢出。
11.试用8位二进制写出以下数、字母以及控制命令的ASCⅡ码,还要写出它们各自的奇校验、偶校验、标记校验及空格校验的ASCⅡ码。
① B ② 8 ③ CR ④ NUL
解:各自对应的奇校验、偶校验、标记校验及空格校验的ASCⅡ码如表1所示。
表1 数、字母以及控制命令的ASCⅡ码
数、字母以及控制命令 B 8 CR NUL 奇校验 00111000 00001101 1 000000000 偶校验 01000010 标记校验 空格校验 01000010 00111000 00001101 00000000 12.设两个BCD数X=1000 1001,Y=0111 0101,试用列竖式的方法计算X+Y,注意要做加6修正运算。
解: 1000 1001 0111 0101
1111 1110 结果不正确 110 个位加6修正 1 0000 0100 结果还不正确 + 110 十位加6修正 1 0110 0100 结果正确
13.若规格化32位浮点数N的二进制存储格式为H,求其对应的十进制数值。 解:
H=0 00000000B
N=(-1)S×(1.M)×2E-127=(-1)0×(1.011011)×2130-127
=1.011011×23=1011.011=11.375D 14.微机中的存储器是如何编址的? 答:
在微机中,存储器均按字节(一字节由8位二进制信息组成)编址,即每个字节有一个二进制的地址编码。给每个存储单元分配的一个固定地址,称为单元地址。
15.微型计算机的硬件系统由那些部件组成? 答:
微型计算机的硬件系统主要由运算器、控制器、存储器、输入设备及输出设备五大部分组成。
16.计算机的主要性能指标有哪些?
3页
如有你有帮助,请购买下载,谢谢!
答:字长、CPU的主频、主存储器的容量及外存储器的容量等。
第2章 (2.5 习 题)
1.微型计算机可以工作在哪三种工作模式下? 答:
微处理器可以工作在:实地址模式、保护模式及虚拟8086模式共三种。 2.如何从实模式转变到保护模式? 答:
通过对CPU中的控制寄存器CR0中的b0位置1,即保护允许位PE置1,于是系统进入保护模式。这是由操作系统程序来实现的。
3.实模式有哪些特征? 答:
实地址模式(Real-Address Mode)也称实模式,简单地说,是指80286以上的微处理器所采用的8086的工作模式。在实模式下,采用类似8086 CPU的体系结构,其寻址机制,尤其是存储器寻址,以及中断处理机制均和8086相同。在实模式下,关键是CPU寻址空间只有1MB(00000H~FFFFFH),也是采用分段管理存储器的方式,将存储器分成四种类型的段,每段存储空间最大为64KB。将1MB的存储空间保留两个区域:一个是中断向量表区(00000~003FFH),这是1KB的存储空间,用于存放256个中断服务程序的入口地址(中断向量),每个中断向量占4字节。
4.16位微处理器有哪些通用寄存器? 答:
AX、BX、CX、DX、SI、DI、SP和BP。
5.16位微处理器有哪4个段寄存器?每个段寄存器的作用是什么? 答:
4个段寄存器分别是代码段寄存器CS、数据段寄存器DS、附加段寄存器ES及堆栈段寄存器SS。
(1)代码段寄存器CS是一个随机存取存储区,用来保存微处理器使用的程序代码。在8086系统中,代码段寄存器CS定义了代码段的起始地址。代码段的最大存储空间为64KB。
(2)数据段寄存器DS也是一个随机存取存储区,用来保存程序执行过程中所使用的数据及存放程序运行后的结果。数据段寄存器DS定义了数据段的起始地址,其最大存储空间也是64KB。
(3)附加段寄存器ES是为某些串操作指令存放操作数而附加的一个数据段。与数据段类似,附加段寄存器ES定义了附加段的起始地址,其最大存储空间也为64KB。
(4)堆栈段寄存器SS是一个特殊的随机存取存储区,用来临时保存程序执行过程中有关寄存器的内容、程序的地址信息及传递参数等。堆栈段寄存器SS与堆栈指针SP共同确定堆栈段内的存取地址。其最大存储空间为64KB。
6.如何理解32位微处理器的通用寄存器与16位的通用寄存器兼容? 答:
4页
如有你有帮助,请购买下载,谢谢!
虽然32位微处理器将8086原来的8个16位通用寄存器AX、BX、CX、DX、SI、DI、BP、SP均扩展成(Extended)32位的寄存器,即EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。但是,它保留了原来的8个16位寄存器和8个8位的寄存器,仍然可以使用它们编程,当然,所编写的程序仍然可以在32位机上运行。既可以用32位寄存器编程,还可以用16位及8位寄存器编程,这就实现了寄存器的兼容。
7.什么叫段基地址?什么叫偏移地址? 答:
编程人员在编程时,只能涉及到逻辑地址,而不能涉及到实际地址。逻辑地址在实模式下,它由段基地址与段内偏移地址组成,习惯上写为“段基地址:偏移地址”,实模式下,段基地址与段内偏移地址都是16位,段基地址是段起始地址的高16位,说明每个段在主存中的起始位置,段内偏移地址也称“偏移量”,是所要访问存储单元距离起始地址之间的字节距离。
在32位段的情况下,偏移量是32位。
8.段寄存器与32位偏移地址寄存器的固定搭配如何? 答:
固定搭配如表2所示。
表2 段寄存器与32位偏移地址寄存器的固定搭配
段寄存器 CS DS SS ES FS GS 偏移地址寄存器 EIP EAX、EBX、ECX、EDX、ESI、EDI、8位、16位或32位二进制数 ESP、EBP 只有串操作时默认EDI 无固定搭配寄存器 无固定搭配寄存器 物理地址的用途 指令地址 数据段内地址 堆栈段内地址 附加数据段内地址(目地址) 一般数据地址 一般数据地址 9.8086 CPU由哪两部分组成?它们的主要功能各是什么? 答:
8086 CPU内部结构从功能上看,它由两大部件组成,分为总线接口部件BIU(Bus Interface Unit)和执行部件EU(Execution Unit)。
(1)总线接口部件BIU的主要功能:它是8086 CPU与外部存储器和I/O端口的接口,提供了16位双向数据总线和20位地址总线,负责CPU与存储器及I/O端口之间的数据传送操作(包括物理地址的形成)。
(2)执行部件EU主要功能:从BIU中的指令队列获取指令,对指令进行译码分析并执行,执行指令所需要的操作数和运算结果的存储,是由EU向BIU传递偏移地址,BIU只要收到EU送来的偏移地址,于是将送来的偏移地址与相应的段地址组成20位的物理地址,根据现行的20位物理地址,通过执行存储器的读/写总线周期来完成读/写操作,或者是通过执行I/O端口的读/写总线周期来完成读/写I/O端口的操作。
10.8086 CPU中的标志寄存器FLAGS有哪些状态标志位?在什么情况下置位?
5页
如有你有帮助,请购买下载,谢谢!
答:
状态标志有6位:CF、PF、AF、ZF、SF和OF。
① CF(Carry Flag),进位标志位。本次运算中最高位有进位或借位时,CF=1。 ② PF(Parity Flag),奇偶校验标志位。本次运算结果的低8位中1的个数为偶数时,PF=1。
③ AF(Auxiliary Carry Flag),辅助进位标志位。本次运算结果低4位向高4位有进位或借位时,AF=1。
④ ZF(Zero Flag),零标志位。若运算结果为0时,ZF=1。
⑤ SF(Sign Flag),符号标志位。当运算结果的最高位为1,则SF=1。 ⑥ OF(Overflow Flag),溢出标志位。当运算结果有溢出时,OF=1。
11.什么是逻辑地址?什么是物理地址?如何将逻辑地址转换为物理地址?
答:从8088/8086开始,CPU内部就有了对存储器的分段机制,每个存储单元可以看成两种地址:逻辑地址与物理地址。
(1)逻辑地址
逻辑地址是编程时所使用的地址,在实模式下,它由段基地址与段内偏移地址组成,习惯上写为“段基地址:偏移地址”。
(2)物理地址
物理地址又称为实际地址,它是信息在内存中存放的实际地址,是CPU访问存储器时实际发出的地址信息。
(3)在实地址方式下,由CPU中的总线接口单元将段基地址左移4位后与16位的偏移地址相加,生成20位的物理地址。可以访问1MB的存储空间。
12.设X=35H,Y=76H,进行X+Y和X-Y运算后,标志寄存器FLAGS的状态标志位各是什么?
答:
(1)X+Y=35+76后,CF=0、AF=0、SF=0、OF=0、ZF=0、PF=1。 (2)X-Y=35-76后,CF=1、AF=1、SF=1、OF=0、ZF=0、PF=1。
13.什么叫存储器地址交叉?微机的存储器为什么要用存储器地址交叉技术? 答:
(1)在一个物理存储芯片内部所有存储单元的地址编号都不是连续的,而在相邻存储芯片之间的物理地址是相连接的,例如,16位的微处理器8086/80286把内存地址分为偶地址的字节数据、奇地址的字节数据,因此,分为偶字库和奇字库,即在一个物理存储芯片内所有存储单元的地址编号都是奇地址,另一物理存储芯片内所有存储单元的地址编号都是偶地址,这就称为地址交叉。
(2)偶地址存储体与数据总线的低8位(D7~D0)相连,奇地址存储体与数据总线高8位(D15~D8)相连,可以由偶地址有效选中偶字库(例A0=0),由奇地址有效选中奇字库(例(BHE=0)。原因是:便于CPU可以只访问偶地址一个字节,也可以只访问奇地址一个字节,还可以访问一个字(2字节)。
在CPU的外部数据总线为32位的情况下,CPU不仅可能只访问一个字节、一个字,还
6页
如有你有帮助,请购买下载,谢谢!
可能访问一个双字,因此,把内存分成4个存储体,实现存储器地址的4体交叉。
14.请将实模式下逻辑地址转变成物理地址。
(1)FFFFH:0000H (2)0045H:0018H (3)2000H:4600H (4)B821H:3456H 解:
(1)FFFFH:0000H,物理地址= FFFFH×16+0000H=FFFF0H (2)0045H:0018H,物理地址= 0045H×16+0018H=00468H (3)2000H:4600H,物理地址= 2000H×16+4600H=24600H (4)B821H:3456H,物理地址= B821H×16+3456H=BB666H
15.在8086系统中,CPU执行访问存储器指令时,BHE=0,说明当前CPU要访问哪一个存储体?
答:
当BHE=0时,CPU要访问奇地址的存储体。
第3章 (3.12 习 题)
3.1 按照16位微处理器的寻址方式看,分别指出下列指令中源操作数和目的操作数的寻址方式。
解:
(1) mov ax,0
;源操作数:立即寻址,目的操作数:寄存器寻址 ;源操作数:寄存器寻址,目的操作数:变址寻址 ;源操作数:寄存器寻址,目的操作数:相对变址寻址
(2) mov [si],ax (3) mov 2[di],bx
(4) mov 2[bx+si],dx ;源操作数:寄存器寻址,目的操作数:相对基址(加)变址寻址
(5) mov ax,[1000h] ;源操作数:直接寻址,目的操作数:寄存器寻址
(6) mov dx,[bx][si] ;源操作数:基址(加)变址寻址,目的操作数:寄存器寻址 (7) mov ax,[bx] (8) mov dx,[bp+8]
;源操作数:基址寻址,目的操作数:寄存器寻址 ;源操作数:相对基址寻址,目的操作数:寄存器寻址
3.2 按照32位微处理器的寻址方式看,分别指出下列指令中源操作数和目的操作数的寻址方式。
解:
(1) mov eax,01h (2) mov [esi],ax
;源操作数:立即寻址,目的操作数:寄存器寻址 ;源操作数:寄存器寻址,目的操作数:基址寻址
7页
如有你有帮助,请购买下载,谢谢!
(3) mov [esi*2],bx 寻址
(4) mov [ebx+esi],dx 例变址寻址
(5) mov eax,[1000h] (6) mov dx,[ebx+esi*8] 寄存器寻址
(7) mov edx,eax (8) mov dx,[ebp*2+8] 寄存器寻址
(9) mov dx,[ebx+8] 器寻址
;源操作数:寄存器寻址,目的操作数: 比例变址;源操作数:寄存器寻址,目的操作数: 基址加比;源操作数:直接寻址,目的操作数:寄存器寻址 ;源操作数: 基址加比例变址寻址,目的操作数:;源操作数:寄存器寻址,目的操作数:寄存器寻址 ;源操作数: 比例变址加位移寻址,目的操作数:;源操作数: 基址加位移寻址,目的操作数:寄存
(10) mov ax,[ebx+esi*2+78h] ;源操作数: 基址加比例变址加位移寻址,目的操作数:寄存器寻址
3.3 指出下列指令的错误原因 解:
(1) inc [si]
;目的操作数类型不明确
;源操作数和目的操作数类型不匹配 ;立即数不能作目的操作数
;源操作数和目的操作数不能同时为存储器操作数 ;基址变址寻址方式不能同时为基址寄存器
;基址变址寻址方式不能同时为变址寄存器 ;300超出了ah可以容纳的数据范围
;cs不能由程序员赋值,它由系统自动赋值 ;push要求操作数为16位或32位
;当移位次数超过1时,先将移位次数送cl,再移位 ;基址变址寻址方式缺少一对方扩号
;ip不能由程序员赋值,它由系统自动赋值 ;源操作数和目的操作数不能同时为段寄存器 ;入栈只能用push指令实现
(2) mov eax,bx (3) mov 2,ax
(4) mov [ebx],[edi] (5) mov ax,[bx+bp] (6) mov ax,[si+di] (7) mov ah,300 (8) mov cs,1000h (9) push al (10) shl ax,8 (11) mov ax,bx+di (12) mov ip,bx (13) mov es,ds (14) mov [sp],ax
3.4 比较下列两条指令,指出他们的区别。 解:
mov eax,[si] mov [si],eax
;从内存读数据送eax ;把eax的值写入到内存
3.5 假设(EAX)=H,写出下面每条指令单独执行后,(EAX)=?
8页
如有你有帮助,请购买下载,谢谢!
解:
(1) and eax,0000ffffh (2) test eax,1 (3) xor eax,eax
;(eax)=00005678h ;(eax)=h ;(eax)=0 ;(eax)=0 ;(eax)=h ;(eax)=h ;(eax)=h ;(eax)=h ;(eax)=h ;(eax)=h
(4) sub eax,eax (5) add eax,1 (6) or eax,1 (7) cmp eax,0000ffffh (8) inc eax (9) dec eax (10) sub eax,8
3.6 假定(AX)=1234H,(BX)=00FFH,回答每条指令单独执行后,(AX)=?(BX)=? 解:
(1) and ax,bx
;(ax)=0034h
(bx)=00ffh (bx)=00ffh (bx)=00ffh (bx)=1234h (bx)=00ffh (bx)=0eecbh (bx)=12ffh (bx)= 00ffh
(2) test ax,bx ;(ax)=1234h (3) xor ax,bx
;(ax)=12cbh
(4) xchg ax,bx ;(ax)=00ffh (5) add ax,bx (6) sub bx,ax (7) or bx,ax (8) cmp ax,bx
;(ax)=1333h ;(ax)=1234h ;(ax)=1234h ;(ax)=1234h
3.7 假设(EAX)=H,(EBX)=H,写出下面程序段每条指令执行后(EAX)=?(EBX)=? 解:
add eax,ebx
;(eax)=224488aaH,(ebx)=H
;(eax)=H,(ebx)=H
add eax,00000088h
sub eax,ebx
;(eax)=112233ccH,(ebx)=H ;(eax)=112233ccH,(ebx)=H
;(eax)=112233ccH,(ebx)=00005567H
inc ebx and ebx,0000ffffh
3.8 已知(DS)=1000H,(BX)=0100H,(SI)=0004H,存储单元[10100H]~[10107H]依次存放11H 22H 33H 44H 55H 66H 77H 88H,[10004H]~[10007H] 依次存放2AH 2BH 2CH 2DH,说明下列每条指令单独执行后AX中的内容。
解:
(1)MOV AX,[0100H] (2)MOV AX,[BX]
;(AX)=2211H ;(AX)=2211H
9页
如有你有帮助,请购买下载,谢谢!
(3)MOV AX,[0004H] (4)MOV AX,[0102H] (5)MOV AX,[SI] (6)MOV AX,[SI+2] (7)MOV AX,[BX+SI] (8)MOV AX,[BX+SI+2]
;(AX)=2B2AH ;(AX)=4433H ;(AX)=2B2AH ;(AX)=2D2CH ;(AX)=6655H ;(AX)=8877H
3.9 已知(DS)=1000H,(EBX)=0100H,(ESI)=0004H,存储单元[10100H]~[10107H]
依次存放11H 22H 33H 44H 88H 77H 66H 55H,[10004H]~[10007H] 依次存放8AH 8BH 8CH 8DH,说明下列每条指令执行后EAX中的内容。
解:
(1)MOV EAX,[0100H] (2)MOV EAX,[EBX] (3)MOV EAX,[EBX+4]
;(EAX)=H ;(EAX)=H ;(EAX)=H
(4)MOV EAX,[0004H] ;(EAX)=8D8C8B8AH
(5)MOV EAX,[ESI] ;(EAX)=8D8C8B8AH (6)MOV EAX,[EBX+ESI] ;(EAX)=H
3.10 什么是堆栈?它的工作原理是什么?它的基本操作有哪两个?
答:堆栈是在内存RAM中开辟的一段空间,利用“先进后出”或“后进先出”的原则存取数据。如果把数据压入堆栈,则堆栈指针的值是减少的,即所谓的向下生成堆栈。由SS:SP(16位)或SS:ESP(32位)指向栈底(栈空)或栈顶(栈不空)地址。它的基本操作有数据入栈指令PUSH和数据出栈指令POP。
3.11 设SS=1000H,SP=0100H,指出下列每条指令执行后,(AX)=?(BX)=?(SP)=?并且回答堆栈中的内容如何?
解:MOV AX,2233H PUSH AX
;(AX)=2233H,(BX)不确定,(SP)=0100H
;(AX)=2233H,(BX)不确定,(SP)=00FEH ;(AX)=2233H,(BX)=4455H,(SP)=00FEH ;(AX)=2233H,(BX)=4455H,(SP)=00FCH ;(AX)=4455H,(BX)=4455H,(SP)=00FEH ;(AX)=4455H,(BX)=2233H,(SP)=0100H
MOV BX,4455H PUSH BX
POP AX POP BX
这段指令执行后将AX和BX的值互换。 3.12 什么是16位段?它有何特点?
答:32位微机在上电或复位后,微处理器首先工作在实地址模式,它与8086/80186的工作方式具有相同的基本结构,也只能寻址1MB物理存储空间,分段最大只能是64KB,但是,在实地址模式下,32位X86 CPU可以使用16位寄存器和16位寻址方式,这与8086 CPU兼容,32位X86 CPU还可以使用32位寄存器和32位寻址方式,处理32位数据及执行
10页
如有你有帮助,请购买下载,谢谢!
32位的新增指令,但是,段基地址和偏移量都只用16位,6个段寄存器仍然当作16位的段寄存器使用,对于偏移地址来说,如果是32位,则高16位应该为0,只有低16位偏移地址有效,相当于可以进行32位数处理的快速8086,所以称之为“16位段”。
3.13 什么是32位段?它与16位段的主要区别如何?
答:32位X86 CPU由实地址模式可以进入保护工作模式,它是一个增强了80286保护模式功能的32位保护工作模式。在保护工作模式下,32位微处理器不仅具有段式存储器管理功能,而且还有页式存储器管理功能,支持虚拟存储器,段基地址和段内偏移量都是32位,称之为“32位段”,使用全部32条地址线,可以寻址的物理存储器达到4GB,只有在保护模式下,32位X86 CPU才能发挥全部功能。而32位段的程序只能在32位Windows环境中执行。
3.14 16位存储器寻址中,分为哪几种寻址方式?
答:(1)直接寻址(2)基址寻址(包括相对基址寻址)(3)变址寻址(包括相对变址寻址)4)基址(加)变址寻址(5)相对基址(加)变址寻址 3.15 32位存储器寻址中,分为哪几种寻址方式?
答:(1)直接寻址(2)基址寻址(3)基址加位移寻址(4)比例变址寻址(5)比例变址加位移寻址(6)基址加比例变址寻址(7)基址加比例变址加位移寻址 3.16 对于立即寻址的指令,有8位、16位及32位的立即寻址的指令,各列举2条指令(一条是传送指令,另一条是加法指令)。
解:
8位立即寻址指令 (1) MOV AH,2 (2) ADD AL,3 16位立即寻址指令 (1) MOV AX,1234H (2) ADD DX,3456H 32位立即寻址指令 (1) MOV EAX,H (2) ADD EDX,H
3.17 用移位指令将ESI中内容移入EDI中,如何实现? 解:
.model small
.386 .code .startup
mov esi,h
11页
如有你有帮助,请购买下载,谢谢!
.exit End
mov edi,h
shrd edi,esi,16 rol esi,16
shrd edi,esi,16
3.18 将EBX中存放的值清零,实现的方法有哪一些? 解:
(1) SUB EBX,EBX (2) AND EBX,0 (3) XOR EBX,EBX
第4章 (4.5 习 题)
1.该数据段在内存中的分配图如下。 变量 Buf→ num→ 2h point1→ 05h 012页
0 11内容 1 A 0 1 2 3 4 5 E2 3 34h 16 7 8 9 如有你有帮助,请购买下载,谢谢! 0h point2→ 0h d4 ata 5 str→ 2h 3h 38 131h 37 16 1108h 03 12 11 1 10ffh 9 02h 0 2 0ffh 1 02h 2 2 22.将下列程序段所定义字符串中的小写字母均改为大写字母,并放回原处,原大字母不变,最后,用DOS的9号功能显示这串大写字符,请完善下列程序。
.model small .data
x db ‘Hello EVEryBODY !’,’$’
.code .startup 解:
程序如下:
.model small .386
13页
如有你有帮助,请购买下载,谢谢!
.data
x db 'Hello EVEryBODY !','$' .code
.startup lea bx,x .repeat mov al,[bx] .if al >= 'a' && al <= 'z' sub al,20h mov [bx],al .endif inc bx .until al = = '$' lea dx,x mov ah,9 int 21h .exit end
3.设变量名VAL1、VAL2及SUM的数据类型属性都是双字属性,VAL1和VAL2中分别存放了一个32位的加数和被加数,SUM用于存放和数。
(1)选用简化段格式编程,实现两个32位数相加,结果存放到SUM变量所指的存储单元。
(2)选用完整段格式编程,实现上述相同的功能。提示:只能使用16数相加。 解:
程序一,简化段格式编程,实现两个32位数相加,结果存放到SUM变量所指的存储单元。
.model small .386 .data
val1 dd h val2 dd h sum dd ? .code
.startup
mov eax,val1 add eax,val2 mov sum,eax .exit end
14页
如有你有帮助,请购买下载,谢谢!
程序二,完整段格式编程,实现两个32位数相加,结果存放到SUM变量所指的存储单元。
data segment val1 dd h val2 dd h sum dd ? data ends code segment
assume cs:code,ds:data start:
mov ax,data mov ds,ax
mov ax,word ptr val1 add ax,word ptr val2 mov word ptr sum,ax mov ax,word ptr val1+2 add ax,word ptr val2+2 mov word ptr sum+2,ax mov ah,4ch int 21h code ends end start
4.将数据段内的一串字符传送到附加的数据段内,并将传送到附加数据段内的字符显示出来,要求用完整段和简化段两种格式分别编程实现。
解:
程序一,简化段格式编程,实现将数据段内的一串字符传送到附加的数据段内,并将传送到附加数据段内的字符显示出来。
.model small .386 .data
x db 'Hello World !','$' n equ $-x
y db 100 dup(?) .code
.startup mov ax,ds mov es,ax mov cx,n lea si,x
15页
如有你有帮助,请购买下载,谢谢!
lea di,y rep movsb mov ah,9 lea dx,y int 21h .exit end
注意:在简化段模式编程时,数据段和附加数据段是同一段,在使用字符串指令时,用指令mov ax,ds、mov es,ax将DS和ES保持一致。
程序二,完整段格式编程,实现将数据段内的一串字符传送到附加的数据段内,并将传送到附加数据段内的字符显示出来。
data segment
x db 'Hello World !','$' n equ $-x data ends edata segment
y db 100 dup(?) edata ends code segment
assume cs:code,ds:data,es:edata start:
mov ax,data mov ds,ax mov ax,edata mov es,ax lea si,x lea di,y mov cx,n rep movsb mov ah,9 lea dx,y int 21h mov ah,4ch int 21h code ends end start
5.设有一个数组存放了40名学生的成绩(0~100分),设数组位于变量名为SCORS的存储单元,编程统计0~59分、60~69分、70~79分、80~89分及90~100分的人数,并分别存放到SCOREE、SCORED、SCOREC、SCOREB、SCOREA存储单元中。
16页
如有你有帮助,请购买下载,谢谢!
解:
程序一,简化段格式编程
.model small .386 .data
score db 90,23,56,67,98,78,10,45,87,100 db 65,78,89,100,45,30,99,69,59,60 db 0,59,60,69,70,79,80,89,90,99 db 100,61,68,71,78,81,88,91,98,0 n=$-score scoree db 0 scored db 0 scorec db 0 scoreb db 0 scorea db 0 .code .startup lea si,score mov cx,n mov dl,10 .while cx != 0 mov ah,0 mov al,[si] div dl sub al,5 .if sbyte ptr al <= 0 inc byte ptr scoree .else mov ah,0 .if al == 5 mov al,4 .endif mov bx,ax inc byte ptr scoree[bx] .endif inc si dec cx .endw .exit
17页
如有你有帮助,请购买下载,谢谢!
end
程序二,完整段格式编程
data segment
score db 90,23,56,67,98,78,10,45,87,100 db 65,78,89,100,45,30,99,69,59,60 db 0,59,60,69,70,79,80,89,90,99 db 100,61,68,71,78,81,88,91,98,0 n=$-score scoree db 0 scored db 0 scorec db 0 scoreb db 0 scorea db 0 data ends
code segment 'code' assume cs:code,ds:data start: mov ax,data mov ds,ax lea si,score mov cx,n mov dl,10 class: mov ah,0 mov al,[si] div dl sub al,5 jg great inc byte ptr scoree jmp next great: mov ah,0 cmp al,5 jnz store mov al,4 store: mov bx,ax inc byte ptr scoree[bx] next: inc si loop class mov ah,4ch int 21h code ends
页
18如有你有帮助,请购买下载,谢谢!
end start
6.已知两个字的定义如下,比较这两个字的大小,将较大的数存放到Z单元,如果两数相等,则把其中任意一数存入Z单元。要求用简化段格式编程:
(1)按照无符号数比较与编程。 (2)按照有符号数比较与编程。
X DW 1234H Y DW 9678H Z DW ? 解:
(1)按照无符号数比较与编程。 .model small .386 .data
x dw 1234h y dw 9678h z dw ? .code
.startup mov ax,x mov bx,y .if ax > bx
mov z,ax .else mov z,bx .endif .exit end
(2)按照有符号数比较与编程。 .model small .386 .data
x dw 1234h y dw 9678h z dw ? .code
.startup mov ax,x mov bx,y
.if sword ptr ax > sword ptr bx
页
19如有你有帮助,请购买下载,谢谢!
mov z,ax .else mov z,bx .endif .exit end
7.已知两个字的定义如第6题,编程求X-Y,结果存入Z单元。要求用简化段格式编程,并回答存入Z单元的数是多少?
解: .model small .386 .data
x dw 1234h y dw 9678h z dw ? .code
.startup mov ax,x sub ax,y mov z,ax .exit end
存入Z单元的数是7bbch。把指令sub ax,y改为sub sword ptr ax,y结果不变。
8.用完整段格式编程,键盘每输入一个字符,用二进制形式(0/1)显示出该字符的ASCII码值。
解:
data segment
ascii db 7 dup(?),'$' data ends code segment
assume cs:code,ds:data start: mov ax,data mov ds,ax rp: mov ah,1 int 21h
cmp al,27 ;可重复输入,Esc键结束 jz fini mov bl,2 lea si,ascii+6
20页
如有你有帮助,请购买下载,谢谢!
lop1: mov ah,0 div bl
add ah,30h mov [si],ah dec si cmp al,0 jnz lop1 lea dx,ascii mov ah,9 int 21h mov ah,2 mov dl,0dh int 21h mov dl,0ah int 21h mov cl,7 lea si,ascii
ini: mov byte ptr[si],' ' inc si dec cl jnz ini jmp rp
fini: mov ah,4ch int 21h code ends end start
9.设10名评委在0~10的整数范围内给选手打分,10个分值已经存入X存储单元,计算选手的最终得分,计分方法是:10个得分中,去掉一个最高分(如有两个以上的相同最高分也只去掉一个),去掉一个最低分(如有两个以上的相同最低分也只去掉一个),剩下8个得分。
(1)用简化段编程求剩下8个得分之和。
(2)用简化段编程求平均值,精确到小数点后面1位。提示:用AX/BL(8),商在AL中,余数在AH中。将余数乘以10传送给AL,再除以8,所得商是小数点后的一位值。
解:
.model small .386 .stack .data
x db 7,8,9,8,10,10,9,8,7,10
21页
如有你有帮助,请购买下载,谢谢!
n=$-x .data?
sum db ?
average db 0,'.',0,'$' max db ? min db ? .code
.startup mov dl,x mov max,dl mov min,dl mov cx,n-1 mov bx,1 .while cx mov al,x[bx] add dl,al .if al > max mov max,al .endif .if al < min mov min,al .endif inc bx dec cx .endw
mov sum,dl sub dl,max sub dl,min mov ah,0 mov al,dl
mov bl,8 div bl add al,30h mov average,al mov al,ah mov ah,0 mov bl,10 mul bl mov bl,8
86 10 7 69,除以8为选手最后得分8.6
8
22页
;保存总分,对本题数据来说,总分;去掉一个最高分;去掉一个最低分;剩下的总分为;整数如有你有帮助,请购买下载,谢谢!
div bl add al,30h
mov average+2,al ;小数6 lea dx,average ;将8.6输出
mov ah,9 int 21h .exit end
10.将下列循环结构的程序段全部改用微处理器指令实现。 .model small .386 .data
buf dw 20(0) .code
.startup lea bx,buf mov cx,0 .while cx!=20 mov [bx],cx inc bx inc bx inc cx .endw .exit end 解:
.model small .386 .data
buf dw 20(0) .code
.startup lea bx,buf mov cx,0 rp: cmp cx,20 jg fini
mov [bx],cx inc bx inc bx
23页
如有你有帮助,请购买下载,谢谢!
inc cx jmp rp fini:
.exit end
11. 将下列循环结构的程序段全部改用微处理器指令实现。 .model small .386 .data
buf dw 20(0) .code
.startup lea si,buf mov ax,0 .repeat mov [si],ax inc si inc si inc ax .until ax==20 .exit end 解:
.model small .386 .data
buf dw 20(0) .code
.startup lea si,buf mov ax,0 rp: mov [si],ax inc si inc si inc ax cmp ax,20 jnz rp .exit end
24页
如有你有帮助,请购买下载,谢谢!
12.将下列程序段是求AX绝对值的单分支程序,全部改用微处理器指令实现。 .model small .386 .data
x dw 9876h result dw ? .code
.startup mov ax,x
.if sword ptr ax < 0 neg ax .endif
mov result,ax .exit end 解:
.model small .386 .data
x dw 9876h result dw ? .code
.startup mov ax,x
cmp sword ptr ax,0 jge store neg ax store:
mov result,ax .exit end
读者在测试本题时,应改变X的值,使之有大于0、等于0和小于0三种情况。 13.本程序的功能是求从score 开始的n个数的平均数,并将结果存入average。 14.将字节字符串string中的字符压缩到字字符串packed中。
15.设AX=9888H,用简化段编程,统计AX中1的个数,并存入X字节存储单元中。 解: .model small .386 .stack
25页
如有你有帮助,请购买下载,谢谢!
.data
x dw 9888h .data?
count db ? .code .startup mov ax,x mov bl,0 mov cx,16 .repeat test ax,1 .if !zero? inc bl .endif shr ax,1 .untilcxz mov count,bl .exit end
16.在例【4-18】中,
① 找出一条指令代替程序中的指令cmp al,0,使程序功能保持不变。 ② 找出两条指令代替程序中的指令neg al,使程序功能保持不变。 解:
在例【4-18】中,
① 用sub al,0代替程序中的指令cmp al,0,程序功能保持不变。 ② 用
not al inc al
两条指令代替程序中的指令neg al,程序功能保持不变。 17.设(AX)=1000H,(BX)=3000H。
① 用移位指令编程,使AX中的内容移入BX中。再将BX中的内容循环右移16次,最后用AX异或BX,其结果存入AX中。
② 试问:最后(AX)=?(BX)=? 解:
.model small .386 .stack .code .startup
26页
如有你有帮助,请购买下载,谢谢!
mov ax,1000h mov bx,3000h
shld bx,ax,16 ; bx=ax=1000H mov cl,16
ror bx,cl ;bx的值不变 xor ax,bx ;(ax)=0
.exit end
最后(ax)=0,(bx)=1000h
18..break .if条件表达式与.break的功能有什么区别? 答:
.break .if条件表达式 :当条件表达式为真时无条件退出当前循环。 .break :无条件退出当前循环。
19..continue与.continue.if条件表达式的功能有什么区别? 答:
.continue .if条件表达式 :当条件表达式为真时终止本次循环,开始下一次循环。 .continue:无条件终止本次循环,开始下一次循环。
20.include 文件名 和includelib 库文件名 二者之间主要有什么区别? 答:
include 文件名 和includelib 库文件名 二者之间主要区别是include加载的是头文件, 头文件里有函数定义、常量定义或源代码,编译器对include语句的处理仅仅是简单地把这一行用指定的文件内容替换掉而已;includelib加载的是库文件,库文件里包含API函数的定位和参数数目等信息,它可以让程序到指定的DLL中找到需要的API函数。和include语句的不同之处是,includelib不会把.lib文件插入到源程序中,它只是告诉链接器在链接的时候到指定的DLL库文件中去找而已。
第5章 (5.6 习 题)
1.Pentium 微处理器中的两个8KB的高速缓存是如何计算得出的?
解:两个Cache都采用组相联映射方式,每个Cache共有2路128组,即Cache分为128行,每行有2路,每行可存放32字节,每个Cache总容量:
N=128×2×32B=8KB。
2.Pentium 微处理器中每个16位的段寄存器对应一个64位的描述符,由哪三个数据字段组成?每段的内容是什么?
答:从图1中可以看出,分为三段:
(1)段基地址,共计32位,分布在段描述符的第2、3、4、7共4个字节,所构成32位的段基地址,可寻址实存空间为4GB。
(2)20位的段限值,占0、1及6字节的低4位,段限值使逻辑段的最大值可为1MB。 (3)段的属性,共计12位,占5字节及6字节的高4位。表示该段是否在物理内存,该
27页
如有你有帮助,请购买下载,谢谢!
段的DPL特权级等。
图1 Pentium段寄存器及段描述符高速缓存器
3.6个16位的段寄存器称之为段选择符,其中的低3位与高13位分别代表什么意义? 答:
6个16位的段寄存器称之为段选择符,如图2所示。
图2 段选择符
高13位是INDEX位,13位段描述符索引值,用来在全局描述符表GDT或局部描述符表LDT的多达213个表项中选择一个段描述符。因为每个描述符由8个字节组成,所以,13位的INDEX值乘以8,即段选择符的高13位(b15~b3)×8作为描述符表的索引值,就得到所要寻找描述符在描述符表中离起始地址的位移量,起始地址来自全局描述符表寄存器GDTR或局部描述符表LDTR,对GDTR来说,其内容是操作系统启动时设置的,而LDTR中的内容是任务启动运行时设置的,与此同时,在GDT中同步设置了一个对应于LDT的描述符。
从图2中可以看出,段选择符的b2位是描述符表的指示标志TI,若TI=0时,表示访问全局描述符表GDT,若TI=1时,表示访问局部描述符表LDT。
其中b1、b0位为请求特权级位(RPL),可以请求特权层的级别是0~3级,对应b1、b0
位为:00~11。00级最高,11级最低。这样可以防止特权级低的程序去访问特权级较高程序的数据,如果发生这类访问,就会产生异常,并阻止企图访问。操作系统通过这种特权级管理机制来保护系统程序所使用的数据不被破坏。
4.Pentium的超标量流水线共分几段,其中整数段有几段? 答:Pentium的超标量流水线共分5段,其中整数段就有5段。 5.下列各组指令中,哪些会产生数据相关?数据相关的类型是什么?哪些会产生资源相关?
解:(1)MOV AX,BX
ADD CX,SI ;既无数据相关,也无资源相关问题。 (2)MOV AX,DX
ADD BX,AX ;写后读数据相关 (3)MOV CX,BX
MOV BX,DI ;读后写数据相关 (4)DIV AX,SI
SUB AX,DI ;写后写数据相关,因为除法指令执行时间比减 ;法指令执行时间相对长一点 (5)MOV [1000H],CX
MOV [2000H],DI ;同时写内存,内存资源相关 6.Pentium 微处理器的总线周期主要分为哪几类? 答:(1)非流水线式单数据的读/写总线周期;
(2)三类突发式总线周期:分别称为代码读突发式线填充,数据读线填充以及突发式回写,每种突发式总线周期实现一种高速缓存的数据修改操作。
7.突发式读/写总线周期有哪几点技术特性?
28页
如有你有帮助,请购买下载,谢谢!
答:① 由于要对高速缓存进行填充(写)操作和读高速缓存(回写主存)操作,所以,在突发式读/写总线周期,CACHE信号一直处于逻辑0状态。
② 在突发式读总线周期,为了实现读高速缓存的操作,必须在传送第一个数据之前的一个T2状态,向CPU输入一个有效的允许读高速缓存的信号(KEN=0)。KEN对突发式写总线周期无效。
③ 突发式读/写总线周期都占5个时钟周期,每个突发式总线周期传输256位数据。前2个总线周期传输一个64位数据,后3个时钟周期分别传输一个64位的数据,共计传输256位数据,即4个4倍数据字。
④ 在进行4次数据传输的过程中,突发就绪信号BRDY一直处于有效状态。 ⑤ 在突发式读/写总线周期,W/R分别为逻辑0和逻辑1电平。 8.流水总线周期的主要原理是什么?
答:所谓流水线式总线周期是指当前总线周期完成数据输入/输出的同时,还完成了下一个总线周期的地址、总线周期指示码及有关控制信息的输出,实现地址传输与数据传输的并行操作,可以提高总线的利用率,相对先传输地址后才能传输该地址所寻址数据的非流水总线周期,则加快了数据的传输。
9.什么叫时钟周期?指令周期?总线周期?
答:(1)指令周期:执行一条指令所需要的时间称为指令周期(Instruction Cycle),它包括取指令、指令译码和执行等操作,不同指令的指令周期是不相同的。
(2)总线周期:微处理器通过总线实现一次访问存储器或I/O接口操作所经历的时间称为总线周期(Bus Cycle),总线周期可以分为读存储器、写存储器、读I/O接口、写I/O接口及取出指令等5种基本的总线周期。
(3)时钟周期:时钟周期(Clock Cycle,CLK)是指微处理器工作主频脉冲的周期,早期8086的主频5MHz,则时钟周期为200ns,现在微处理器的主频一般都可以达到1000MHz,时钟周期为1ns。 10.解释Pentium 微处理器的引脚信号CACHE和BRDY的定义。 答:(1)CACHE,Cache控制信号,输出,低电平有效。CPU在读操作时,此控制信号为低电平,表示CPU正在从主存中读取数据到CPU内部的Cache中;当CPU进行写操作时,此信号为低电平,表示CPU内部Cache中修改过的数据正在写回到主存中。 (2)BRDY,突发就绪信号。输入,低电平有效,当其有效,表示外设已处于准备好状态,可以进行数据传输。如果此信号在连续多个周期内有效,则为突发传输状态。 11.如果要把内存的256位代码读入CPU的高速缓存中,采用代码读,256位突发式数据线填充方式,控制信号M/IO、D/C、W/R、CACHE及KEN各处于什么状态? 答:各位所处的状态见表3所示。 表3 各位所处的状态表
M/IO D/C W/R 1 0 0 总线周期的操作 代码读,256位突发0 0 式数据线填充 传送次数 4 29页
如有你有帮助,请购买下载,谢谢!
12.Pentium 微处理器内部的主要功能部件有哪些? 答:
① 总线接口部件;
② U流水线和V流水线;
③ 指令高速缓冲存储器Cache; ④ 数据高速缓冲存储器Cache; ⑤ 指令预取部件; ⑥ 指令译码器;
⑦ 浮点处理部件FPU; ⑧ 分支目标缓冲器BTB;
⑨ 微程序控制器中的控制ROM; ⑩ 寄存器组。
13.Pentium 微处理器主要结构特点有哪四点? 答:
① 互相独立的指令Cache和数据Cache。 ② 超标量流水线。
③ 重新设计的浮点运算部件。 ④ 以BTB实现动态转换预测。
第6章 (6.3 习 题)
1.Pentium在实地址模式和V86模式下,可访问存储器空间的大小分别为多少字节? 答:
(1)在实地址模式下,可以访问64KB存储空间。 (2)在V86模式下,如果禁止分页,可以访问64KB存储空间;如果允许分页功能的话,可以通过分页机制,在4GB的物理地址范围内分配多个8086的1MB地址空间。
2.Pentium工作在只分段不分页、只分页不分段以及既分段又分页三种情况下,分别可访问虚拟存储空间的大小为多少字节?
答: (1)只分段不分页
分段不分页由16位的段选择符和一个32位的偏移地址组成,段选择符的低2位用于保护,高14位指示段,因此,一个进程可允许的最大虚拟空间为214+32=64TB。
(2)只分页不分段
Pentium在页管理部件PU的管理下,可以按4KB和4MB两种大小不同的页面分页。与程序的段选择符无关,仅将指令提供的32位虚地址看成是32位的线性地址,无论按4KB分页或是按4MB分页,均可形成32位物理地址,进程所拥有的最大虚存空间都是232=4GB。
(3)分段分页方式是先分段后分页
30页
如有你有帮助,请购买下载,谢谢!
在分段的基础上进行分页,分段所形成的32位线性地址不是最后的物理地址,而是提供给分页部件,作为页目录(号)、页表(号)以及页内偏移量,按4KB或4MB大小分页。一个进程的最大虚地址空间与只分段的虚地址模式相同,也是214+32=64TB。
3.页目录表和与页表分别占物理内存最大空间是多少字节? 答:Pentium 4KB分页方式前提下,页目录表和与页表分别占物理内存最大空间是4KB。 4.在虚拟8086模式下,若采用分页机制,在从虚地址转换到物理地址的过程中,可用到几个页目录项和几个页表项?
答:在虚拟86模式下,按照FFFFH×16+FFFFH=10FFEFH计算可知,32位线性地址的最大值为0010FFEFH,高11位恒为0,那么b31~b22这高10位一定全为0,线性地址的高10位作为页目录项的基地址,所以V86方式下,只访问页目录表中的第1个页目录项,本来可以有1024个页目录项。
线性地址的中间10位地址中,一般情况下高2位(b21、b20)均为0,所以只有低8位是有效位,那么可以访问256个页表项,考虑到FFFFH×16+FFFFH=10FFEFH的特殊情况,则相加后产生上溢出,使得b20上溢出为1,在b20=1的溢出情况下,而b19~b0只有000H~00FH共16种可能,所以可查找的页表项增加16个,变为256+16=272个。本来共计可查找1024个页表项,但是虚拟86模式下只可查找272个页表项
5.在段选择符中,TI=0和TI=1,分别在LDT还是GDT中访问描述符? 答:
TI=0,访问GDT中的描述符; TI=1,访问LDT中的描述符。 6.当前的段描述符存放在何处?
答:存放在CPU中的段描述符高速缓冲器中。 7.简述只分段不分页的地址转换过程。 请参考第6章
8.简述只分页不分段的地址转换过程。 请参考第6章
9.虚拟存储(Vivtual Storage)机制主要由那些部分组成? 答:
虚拟存储(Vivtual Storage)机制主要由CPU中的存储管理部件、计算机的主存、辅存及操作系统共同组成。
10.什么叫描述符表?描述符表分为哪两类? 答:
(1)描述符表分为局部描述符表LDT和全局描述符表GDT。
(2)(LDT和GDT)描述符表都是内存的RAM区,系统只设置了一个GDT,但LDT有多个。
(3)各任务公用的代码段、数据段的段描述符以及LDT描述符、门描述符、任务状态段TSS等系统段的描述符组成了全局描述符表GDT。
(4)每个任务都有各自的代码段CS、数据段DS、还可能有附加的数据段ES、FS、GS以及堆栈段等,每个段有一个64位的段描述符,各个任务组成了自己的局部描述符表LDT。
31页
如有你有帮助,请购买下载,谢谢!
11.什么叫页目录项?什么叫页表项? 答:
Pentium兼容386/486的4KB分页方式,该方式采用两级分页方式,第一级有一个4KB的页目录表,可存放1024个页目录项,称之为高级管理,第二级有一个4KB的页表,可以存放1024个页表项,称之为低级管理。页目录项与页表项均为32位(4字节)
页目录项与页表项的格式基本相同,其中,高20位分别是4KB页表的基地址以及最终被指令所要访问页面(4KB)的基地址,显然,页表的首地址和页面的首地址,其低12位都是0。
页目录项与页表项其他位为标志位或控制位。
12.存储器特权级保护的分析。设当前代码段的特权级CPL,段选择符请求的特权级RPL以及数据段描述符的特权级DPL如下表所示,回答4种组合中每一种组合能否将段选择符装入到数据段寄存器中,通过填写下表,回答哪几种能行?哪几种不行?并将理由填入表中。
答:
遵照公式:MAX(CPL当前代码段值,RPL数据段选择符值)≤DPL数据段描述符值时才能访问,填写如下表4。
表4 CPL、RPL、DPL之间的关系
当前代码段CPL 0 1 3 2 RPL 1 1 1 2 DPL 1 1 1 1 访问与否 可以 可以 否 否 原因 (CPL、RPL) ≤ DPL (CPL、RPL) = DPL CPL > DPL (CPL、RPL) > DPL 13.简述32位机既分段又分页的地址转换过程。 参考第6章
第7章 (7.5 习 题)
1.半导体存储器从存取方式上分,可分为哪两类,每类又分为哪一些? 答:
分为RAM与ROM两大类:
(1)RAM
RAM按其工艺结构分为双极型与金属氧化物半导体RAM两类。 ① 双极型RAM ② MOS型RAM
RAM按其工作方式分,有: ① SRAM(静态RAM)
32页
如有你有帮助,请购买下载,谢谢!
② DRAM(动态RAM)
(2)ROM
主要分为如下四种:掩膜式ROM、可编程只读存储器PROM(Programmble ROM)、紫外线擦除的可编程只读存储器EPROM(Ersable PROM)及电擦除可编程只读存储器EEPROM(Electrically EPROM)。
2.什么叫半导体存储器的存取周期? 答:
存取周期是指存储器从接收到地址,到实现一次完整的读出所经历的时间,通常取写操作周期与读操作周期相等,故称为存取时间。因此也可以理解为存储器进行连续读或写操作所允许的最短时间间隔。
3.半导体存储器芯片内的地址译码有哪两种方式?每种译码方式有何特点? 答:
单译码和双译码两种方式。
单译码方式是将n位地址输入到存储器内部译码器输入端,经译码后可以产生2n个输出选择信号,每个输出选择信号选中存储阵列中的一个字,所以单译码方式也称为字译码方式,缺点是译码输出线远多于双译码结构。
双译码结构需要2个译码电路,只有当两个译码器输出的选择线都有效时,交叉的存储单元被选中。采用双译码结构其译码输出选择线大大减少,所以,在存储芯片中一般采用双译码结构。
4.已知某RAM芯片的存储容量为16KB,ROM芯片的存储容量为4K×8位,问每种存储芯片的地址线和数据线分别为多少?
答:
16KB: 地址线14根,数据线8根。 4K×8位: 地址线12根,数据线8根。
5.分别用8KB和16K×8位的RAM芯片构成256KB的存储器,各需要多少片?需要地址线多少根?
答:
8KB: 32片,地址线18根。 16K×8位:16片,地址线18根。
6.阐述图7-16单管动态存储电路中刷新操作的原理。 参考第7章
7.微处理器与存储器相连接时应考虑哪几方面的问题? 答:
(1)CPU总线的负载能力。
(2)CPU的时序与存储器存取速度之间的配合。 (3)存储器结构的选定。
8.说明Flash 闪存进行块擦除的原理。
33页
如有你有帮助,请购买下载,谢谢!
参考第7章
9.选用1M×4位DRAM芯片构成32位机(设存储器数据总线为32位)的存储器,存储容量为16MB,试问:
(1)共计需要多少片?
(2)共计需要分几组?每组多少片? 答:
(1)32片。
(2)共计需要分4组,每组8片。 10.简述32位存储器系统的组成。 参考第7章
11.简述高速缓冲存储器Cache的主要工作原理。 参考第7章
12.设CPU执行一段程序时,访问Cache次数Nc=2000,访问主存次数Nm=100,又假设访问Cache存取周期为50ns,访问主存存取周期为250ns,试求命中率h、平均访问时间ta以及倍率r。
解:
ta=htc+(1-h)tm=0.952×50ns+(1-0.952)×250ns=59.6ns
13.写出组相联映射方式的函数关系式,并作简要说明。Pentium CPU采用的映射方式如何?
答:
组相联映射方式将Cache分成u组,每组有v行,主存块存放到哪一组是固定的,至于存放到哪一行是任意的,设Cache行的总数量为m,组号为q,主存块号为j,则有如下函数关系:
m = u×v q=j mod u
Pentium CPU内部Cache的结构采用组相联结构。
Cache采用2路组相联结构来分成128组,每组2行,每行32B,数据总容量是128×2×32B=8KB,每路4KB。
14.写一次法与回写法的区别如何? 答:
使用回写法,对于Cache中的行,只要不被替换就不会写入主存,也就是说,只有当某一行被替换时才被写回到主存中对应位置。
写一次法与回写法的写策略基本相同,写一次法只是在第一次写命中时要同时写入主存,然后CPU对Cache的写命中则按照回写法的策略对待,这可以节省CPU的总线周期,有利于超标量流水线的进程,有利于提高系统的运行速度。
二者与通写法相比较,都减少了CPU对总线的操作,提高了系统的运行速度。
15.32位存储器组织将内存分为4个存储体,地址总线32位,画出每个存储体的地址分配图。
解:
34页
如有你有帮助,请购买下载,谢谢!
在32位数据总线的微处理器中,直接输出A31~A230位地址,低2位A1、A0由内部编码产生4个字节选择信号BE3~BE0,以选择不同的字节。由4个字节选择信号把主存储器分为4个存储体,依次存放32位数据中的4个字节,每个体的8位数据依次并行连接到外部数据线D31~D0上,由BE3~BE0选中每个存储体,每个体的地址范围见图3所示。
图3 32位存储器组织图 第8章 (8.5 习 题)
1.什么叫接口电路?从CPU与外设之间交换信息的方式看,接口电路可分为哪四类? 答:
所谓接口(Interface)电路就是微处理器与外围设备(外设)之间的连接电路,它是两者之间进行信息交换时的必要通路,不同的外设有不同的输入/输出接口电路。
(1)程序控制I/O方式。
(2)查询式输入输出方式。
(3)中断控制I/O方式。
(4)直接存储器存取(DMA)方式。 2.接口电路的主要功能有哪些? 答:
(1)设备选择功能。 (2)数据缓冲功能。
(3)接收和执行CPU命令的功能。 (4)寄存外设状态的功能。 (5)信号的转换功能。 (6)数据宽度变换的功能。 (7)可编程功能。
3.CPU与外设之间交换的信息有哪些? 答:
① 数据信息,包括输入数据和输出数据。 ② 命令信息,输出信息。 ③ 状态信息,输入信息。
4.I/O端口的两种编址方式各有什么优缺点? 答:
统一编址方式的优点:不需要设立独立的I/O指令,用访问内存的指令就可以访问外设,因此,可以对端口进行算术运算,逻辑运算以及移位操作等。I/O端口空间不受限制。主要缺点是I/O端口占用了内存空间,减少了内存容量。
35页
如有你有帮助,请购买下载,谢谢!
独立的I/O编址方式的主要优点:不占用内存空间,使用专门I/O指令访问I/O端口,I/O速度快。缺点:CPU的引脚上必须具有能区分访问内存还是访问I/O端口的信号,将它作为I/O接口电路中端口译码电路以及存储器片选译码电路的输入信号。
5.根据图8-2,编写从端口0输出8位数据的简单程序。 解:
MOV DX,3E0H MOV AL,88H OUT DX,AL
6.根据图8-7,分析无条件输出接口电路的基本工作过程。 参考第8章 8.3.2
7.I/O接口电路与CPU一侧一般有哪几种连线?与外设一侧有哪几种连线? 答:
(1)I/O接口电路与CPU一侧的连线主要包括: ① 数据线。 ② 地址线。
③ CPU的读(RD)、写(WR)控制信号相应接到I/O接口电路中的读、写控制输入端。 ④ 在独立I/O编址方式的CPU引脚上必然有一根用于区别当前访问内存还是访问I/O设备的信号线,引脚为M/IO,当M/IO=0时,CPU访问I/O接口,因此,I/O接口电路还必须与CPU引脚M/IO相连接。
(2)与外设一侧相连的信号线有:
输入/输出数据线;控制线及外设送来的状态线。 8.什么叫端口?一般I/O接口电路中有哪几种端口?
答:端口(Port)是接口电路中能被CPU直接访问的寄存器。根据寄存器中所存放的信息,有数据信息、控制信息及状态信息,所以,分别被称为数据端口、控制端口及状态端口。
9.无条件I/O传送方式有何特点? 答:
这种方式是一种最简单的输入/输出控制方式,其I/O接口电路及软件比较简单,所有的操作均由执行程序来完成。采用这种方式,输入接口电路总是准备好了等待输入给CPU的数据,输出接口电路总是准备好了接受来自CPU的数据。CPU无须查询I/O设备是否准备就绪,直接用汇编语言或高级语言编程,实现输入或输出操作。
10.分别画出查询式输入与查询式输出的流程图。 解:
查询式输入与查询式输出的流程图分别如图4和图5所示。 图4 查询式输入程序的流程图 图5 查询式输出程序的
流程图
11.多个外设均工作在查询式输入/输出方式主要存在什么问题? 答:
36页
如有你有帮助,请购买下载,谢谢!
CPU必须顺序查询每一个外设,当某一个外设不需要服务时,CPU也得按顺序查询一次。外设总是处于被动状态,CPU无法快速响应外设要求及时服务的请求。CPU为了服务外设,其他程序会停止执行,所以,查询式I/O方式不可能是微型计算机外设工作的最佳选择,不适用于实时监控系统。
12.DMAC中有哪几个基本寄存器?
答:有4个基地址寄存器和4个基本字计数寄存器,其大小都是16位长度,即4个DMA通道的每一个通道都有一个基地址寄存器和一个基本字计数寄存器。
13.简述中断传输方式的特点。
答:在中断控制方式下,所有的I/O设备都可以工作在主动请求CPU为该外设服务的状态下,一旦一个或多个外设申请中断服务,则CPU根据各I/O设备预先被设置的中断优先级别,逐个予以响应,并进行中断处理、中断返回,实现中断处理的全过程。
采用中断技术后,CPU能与所有的外设并行工作,能及时服务外设,并处理系统异常情况,从而可以提高微机的整体性能,提高计算机的运行速度。
14.82C37A芯片是一种什么类型的芯片?试说明82C37A芯片结构。 答:参考第8章8.4.1
15.简要说明82C37A两种屏蔽寄存器的用法。 答:参考第8章 8.4.3
16.简要说明82C37A四种传送类型的特点。 答:
方式寄存器中的最高2位(即D7和D6),被用来为该通道从4种可能的DMA操作方式中选择出其中的一种:请求方式,单次方式,块方式和级联方式。
这4种方式允许每次传送1个数据字节或1个字节块。
(1)在请求传送方式中,一旦启动了DMA周期,只要HRQ信号保持有效且还未达到终止计数值(TC),则将仍然连续不断地进行数据字节的传送。所谓达到终止计数值,是指当前字计数寄存器中的值,在每次数据传送之后会自动减1,最终从0000H变为FFFFH。
(2)块传送方式类似于请求传送方式,即一旦启动了DMA周期,则将连续地进行数据传送操作,直至达到了终止计数值。它们之间的不同之处是,在请求传送方式下,DREQ返回到它的无效状态并将暂停数据传送过程,但在块传送方式下,当DMA周期开始后可在任何时刻释放DREQ信号,而块传送仍将继续进行,直至整个数据块传送完毕。
(3)在单次传送方式下,通道被设置为每次只能进行一个数据的传送。当该传送操作完成时,将当前字计数值减1。而将当前地址加l或减1(可选)。
(4)级联传输方式是多片82C37A级联,分成一个主片和多个从片,把从片的HRQ端和主片的DREQ端相连,从片的HLDA端和主片的DACK端相连接,主片的HRQ端和HLDA端连接到系统总线上。这样,最多可以由5个82C37A级联,构成二级DMA传输系统,可得到最多16个DMA通道。在写方式寄存器时,主片一定要设置成级联传输方式,从片按需要设置成其他的某种方式。
17.82C37A中用户可访问的寄存器是哪些? 答:
37页
如有你有帮助,请购买下载,谢谢!
除了暂时地址寄存器和暂时字计数寄存器两个寄存器用于暂时存放当前地址和当前字节数,CPU不能直接访问这两个寄存器之外,其他的都可以访问。
18.82C37A通常初始化编程的步骤是哪些? 答:
① 输出主清除命令; ② 设置页面寄存器;
③ 写入基地址和当前地址寄存器;
④ 写入基本字计数寄存器和当前字计数寄存器;
⑤ 写入方式寄存器; ⑥ 写入命令寄存器; ⑦ 写入屏蔽寄存器;
⑧ 请求寄存器(块传送)。
19.82C37A如何实现硬件DMA请求和软件DMA请求? 答:参见第8章 8.4.3 20.利用82C37A快速清除视频显示缓冲区。设需要填充存储器的起始地址为8000H:0,填充的字节数是2000,82C37A的基地址是00H,通道1页面寄存器的端口地址为83H。通道0的源地址保持不变,则82C37A会将同一存储单元的内容复制到由通道1寻址的整个存储区。试编写存储器填充的程序段。
解:
编程如下: .stack .code
.startup mov al,0
0ut 0dh,al ;主清零命令 mov al,08h
out 83h,al ;置通道1页面寄存器 mov al,0
out 02h,al ;写地址低8位 mov al,0
out 02h,al ;写地址高8位 mov ax,2000
out 03h,al ;先写低8位 mov al,ah
out 03h,al ;后写高8位 mov al,88h
out 0bh,al ;写通道0模式字 mov al,85h
38页
如有你有帮助,请购买下载,谢谢!
out 0bh,al ;写通道1模式字 mov al,83h
out 08h,al ;写命令字,允许通道0地址保持 mov al,0eh
out 0fh,al ;解除通道0的屏蔽 mov al,04h
out 09h,al ;通道0使用软件请求,启动DMA传输
.exit 0 ;返回DOS
end
第9章 (9.5 习 题)
1.什么叫中断?
答:所谓“中断”是指在CPU正常运行程序时,由于内、外部事件引起CPU暂时中止正在运行的程序,转而去执行请求CPU暂时中止的内、外部事件的服务程序,待该服务程序处理完毕后又返回到被中止的程序。
2.什么是中断向量?实模式下中断向量表位于存储器中的什么位置? 答:中断向量是指中断服务程序的入口地址。
中断向量表是存放中断服务程序入口地址(即“中断向量”)的表格。它存放在存储器的最低端(0000H:0000H~0000H:03FFH)共1024个字节的存储器中。
3.说明80X86实模式下中断源的优先级。 答:中断源的优先级如表5所示。
表5 中断优先级
中断 除法出错、 INT n、 INTO NMI INTR 单步 优先级 最高 … … 最低 4.80X86 CPU有哪几种中断?简要说明8086中断的特点? 答: 1.外部中断
8086有两条中断申请输入信号线——可屏蔽中断INTR和非屏蔽中断NMI,可供外设向CPU发中断请求信号。
主要特点:可屏蔽中断INTR由82C59A中断控制器提供中断类型号,非屏蔽中断NMI有固定的中断类型号,由中断类型号乘以4,获得中断向量的指针,找到中断服务程序的首地址。中断过程中,能自动保存F、CS及IP值。
39页
如有你有帮助,请购买下载,谢谢!
2.内部中断
内部中断是通过软件调用的不可屏蔽中断,包括溢出中断、除法出错中断、单步中断、INT n指令中断以及断点中断等。
软中断由软中断指令提供中断类型号,其他与外部中断相类似。 5.简述80X86可屏蔽中断的响应过程。 参看第9章
6.什么是中断类型号?什么是中断响应周期 答:
(1)在具有向量中断的微机系统中,每个外设都预先指定一个中断类型号,又称为中断类型码、中断向量号及向量类型等,当CPU识别出某个外设请求中断并予以响应时,控制逻辑就将该外设的中断类型号送入CPU,以自动地提供相应的中断服务程序的入口地址(称为中断向量),转入中断服务。所以中断类型号是用来确定中断源及相应中断服务程序的编号。
(2)参考第9章 图9-4 中断响应周期
7.82C59A芯片初始化的流程如何? 参看第9章 图9-17。
8.简要说明82C59A中断控制器中的IRR、ISR和IMR三个寄存器的功能。 参看第9章 9.3.1 82C59A内部结构
9.简要说明82C59A几种中断优先权管理方式的特点。 参看第9章 9.3.3 82C59A的工作方式
10.简要说明82C59A两种中断结束方式的特点。 答:
(1)自动中断结束方式
在中断服务程序中,中断返回之前,不需要发出中断结束命令就会自动清除该中断源所对应的ISR位,实际上,在CPU发出第2个INTA信号时,82C59A即自动清除ISR中的对应位。该方式用于多个中断源不会产生嵌套的系统中。
(2)非自动中断结束方式 在中断服务程序返回之前,必须发出中断结束命令才能使ISR中的当前服务位清除。此时的中断源结束命令有两种形式:
① 不指定中断源结束命令,即设置操作命令字OCW2=00100000B。
② 指定中断结束命令,即设置OCW2=00100L2 L1 L0,其中,最低3位L2 L1 L0的编码表示被指定要结束的中断。 11.解释82C59A中的优先权循环 参看第9章
12.某一8086CPU系统中,采用一片82C59A进行中断管理。设定82C59A工作在普通全嵌套方式,发送EOI命令结束中断,采用边沿触发方式请求中断,IR0对应的中断向量码为90H。另外,82C59A在系统中的I/O地址是300H(A0=0)和301H(A0=1)。请编写82C59A
40页
如有你有帮助,请购买下载,谢谢!
的初始化程序段。
解:
对82C59A的初始化程序如下:
MOV AL,00010011B ;设置ICW1初始化命令字
MOV DX, 300H
OUT DX,AL MOV AL,90H
;将ICW1输出到偶地址端口
;ICW2中断类型号基值
INC DX
OUT DX,AL ;将ICW2送入奇地址端口 MOV AL,00000011B ;ICW4 OUT DX,AL ;将ICW4送入奇地址瑞口 13.下段程序用于读出82C59A中哪一个寄存器的内容? mov al,0bh out 20h,al nop in al,20h 解:
OBH 即 00001011B 写入 20H 偶地址端口, 并且 D4D3=01 是 OCW3的标志位,D1Do=11即RR、RIS=11时,表示CPU的下一条IN指令要读取ISR寄存器的内容。
14.画出82C59A初始化编程的流程图。 解:
参考第9章 图9-17 82C59A的初始化流程图
15.如果选用8片82C59A构成主-从式级联结构,最多可以实现多少级的中断管理? 解:
一片主片连接7片从片,共计可以实现56+1=57级中断管理。
16.实模式与保护模式下,中断服务程序的入口地址分别是多少位? 答:
实模式与保护模式下,中断服务程序的入口地址分别是20位和32位。 17.在保护模式下,如何找到中断服务程序的入口地址? 答:
保护模式下,由中断类型号在中断描述符表IDT中找到一个描述符,再根据该中断描述符中段选择符TI位是0或是1,从GDT或LDT中找到一个段描述符,并自动加载到CS的描述符高速缓存器中。这时,由CS的描述符高速缓存器的基地址字段(32位)确定中断处理程序所在内存的基地址,由IDT中找到的门描述符中的偏移地址(32位)确定中断服务程序的入口地址。中断服务程序的基地址+偏移地址=32位的中断服务程序的首地址。
18.在LDT、GDT和IDT三种表中,哪一种表中的描述符具有代码段选择符? 答:只有IDT表中的描述符具有代码段选择符。
第10章 (10.4 习 题)
1.8255A的端口A和端口B分别可以工作在哪几种方式?
41页
如有你有帮助,请购买下载,谢谢!
答:
端口A:可以工作在方式0、方式1及方式2共计三种方式。 端口B:可以工作在方式0、方式1共计两种方式。
2.设8255A的4个端口地址分别为300H、301H、302H和303H,要求用按位置位/复位控制字使PC5输出方波信号,试编程实现。
解:
MOV DX,303H L1:MOV AL,0AH OUT DX,AL
NOP NOP MOV OUT NOP NOP JMP
AL,0BH DX,AL
L1
3.设8255A接到系统中,端口A、B、C及控制口地址分别为304H、305H、306H及307H,工作在方式0,试编程将端口B的数据输入后,从端口C输出,同时,将其取反后从端口A输出。
解:
MOV DX,307H MOV AL,B OUT DX,AL ;送控制字 MOV DX,305H IN AL,DX ;读端口B MOV DX,306H OUT DX,AL ;从端口C输出 XOR AL,0FFH ;AL取反 MOV DX,304H ;从端口A输出 OUT DX,AL
4.对8255A的控制口写入B0H,其端口C的PC5引脚是什么作用的信号线?试分析8255A各端口的工作状态。
解:
当控制字为B0H时,即B
即8255A的端口A工作在方式1,作输入,端口C的上半部作输出,B端口工作在方式0,作输出,端口C的低4位作输出。
根据上述分析可得知,当8255A的端口A工作在方式1下作输入时,PC5的引脚作状态信
42页
如有你有帮助,请购买下载,谢谢!
号IBFA,即输入缓冲器满信号。
5.并行通信和串行通信各有什么特点? 解:
(1)并行通信就是把一个字符的各数位用几条线同时进行传输。
并行接口最基本的特点是在多根数据线上以数据字节为单位与I/O设备或被控对象传送信息。
在并行接口中,除了少数场合之外,一般都要求在接口与外设之间设置并行数据线的同时,至少还要设置两根联络信号,以便互锁异步握手方式的通信。
在并行接口中,每次以8位或16位为单位进行同时传送。因此,当采用并行接口与外设交换数据时,即使是只用到其中的一位,也要一次输入/输出8位或16位。
并行传送的信息,不要求固定的格式。 并行接口的优点是传输速率高,但由于需要多根数据线,因此不适合远距离数据传输,一般用于近距离传送的场合。
(2)串行通信就是指通信的发送方和接收方之间的数据在单根通信线上逐位顺序传送。
计算机和外设之间只使用一根信号线传输信息,数据在一根数据信号线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。
串行通信在一根线上既要传送数据,还要传送联络信号,因此,串行通信有一定的数据格式的约定,分为异步和同步数据格式。
串行传输的速率需要控制,通信双方要约定相同的波特率实现通信。由于受波特率上限的约束,串行通信速度慢。
信号的逻辑定义与TTL电平不相同。
6.“由于按位置位/复位命令是对C口进行操作,所以可以写到C口”,这句话对吗?为什么?
答:
不对。这是因为按位置位/复位是一个命令,它要按命令的定义格式来处理每一位,如果把它写入端口C,就会按端口C的数据格式来处理。这两种完全不同的格式是不能互换的,所以,它只能写到命令端口中,按命令定义来处理。
7.如果要检测打印机接口LPT1中控制端口通道的好坏,可以通过对D3~D0位首先写入4个0,通过读回后比较判断是否能写成功;然后写入4个1,按同样的方法进行检测,试编写自检的程序段。
解:
mov al,00h ;00h送给al
mov dx,37ah ;控制端口的地址送给dx out dx,al ;写入控制端口 in al,dx ;读控制端口 and al,0fh
cmp al,00H ;比较
jne erroe1 ;如果不相等,转出错处理
43页
如有你有帮助,请购买下载,谢谢!
mov al,0fh ;0fh送给al
mov dx,37Ah ;控制端口的地址送给dx out dx,al ;写入控制端口 in al,dx ;读控制端口 and al,0fh cmp al,0fh
jne erroe2 ;如果不相等,转出错处理 . . . ;控制端口是好的
erroe1: ;控制端口通路写全0失败 . . .
erroe2: ;控制端口通路写全1失败
8.利用软中断INT 17H,发送字符B到1号打印机打印,用汇编语言编程实现。 解: mov ah,0 mov dx,1 mov al,’b’ int 17h
9.如果8255A的端口A工作在方式1输入,端口A、B、C及控制口地址分别为304H、305H、306H及307H,编写初始化程序段,要求置位INTEA。
解:
MOV DX,307H MOV AL,B
OUT DX,AL ;方式控制字 MOV DX,307H
MOV AL,00001001B ;PC4置1,即INTEA置1 OUT DX,AL
10.如果8255A的端口B工作在方式1输出,端口A、B、C及控制口地址分别为314H、315H、316H及317H,编写初始化程序段,要求置位INTEB。
解:
MOV DX,317H MOV AL,B
OUT DX,AL ;方式控制字 MOV DX,317H
MOV AL,00000101B ;PC2置1,即INTEB置1 OUT DX,AL
11.如果通过PC机读入打印机的状态字,读入的最高位D7位=0,说明打印机是否忙? 答:
打印机忙。
44页
如有你有帮助,请购买下载,谢谢!
第11章 (11.6 习 题)
1.串行通信有什么特点? 答:
它是在一根线上以数据位(bit)为单位与I/O设备或通信设备之间传送信息,在这根传输线上既传输数据信息,又传输联络控制信息,数据都占据一个固定的时间长度,通信双方要约定相同的波特率才能实现通信,由于受波特率上限的约束,串行通信的速度是有限度的。串行通信具有通信电路简单,成本低,适用于远距离通信。
2.什么叫异步通信方式?异步通信字符传送的帧格式如何? 答:
异步通信以一个字符为传输单位,用起始位表示字符的开始,用停止位表示字符结束。 异步通信方式的“异步”主要体现在字符与字符之间传送没有严格的定时要求,一旦字符传送开始,收/发双方则以预先约定的传输速率,在时钟脉冲的作用下,传送该字符的每一位,即要求位与位之间有严格而精确的定时,也就是说,异步通信在传送同一个字符的每一位时是同步的。
异步通信字符传输帧格式,请参考第11章图11-2所示。
3.什么叫波特率因子?什么叫波特率?设波特率因子为64,波特率为1200,那么时钟频率为多少?
解:发送时钟与接收时钟的频率与位传输率的比称为波特率因子,而位传输率称为波特率。
发送/接收时钟频率=n×发送/接收波特率 =64×1200 =76800Hz =76.8KHz ∴时钟频率为76.8KHz 4.设异步传输时,一帧信息包括1位起始位、7位信息位、1位奇偶校验位和1位停止位,如果波特率为9600bps,则每秒能传输多少个字符?
解:即9600/(1+7+1+1)
=9600/10 =960个
∴每秒能传输960个字符
5.两台PC机采用异步串行通信方式传送数据。设8250接在系统中,其8个端口地址为2F8H~2FFH,若8250以2400bps波特率进行异步通信,每字符7位,1位停止位,采用奇校验,禁止所有中断,选用查询方式通信。试编写发送和接收的初始化程序段。
解:
MOV DX,2FBH MOV AL,80H OUT DX,AL ;通信线路控制字,DLAB=1 MOV DX,2F8H
45页
如有你有帮助,请购买下载,谢谢!
MOV OUT
AL,30H
DX,AL ;送波特率低8位
INC DX MOV AL,AL,00H OUT DX,AL ;送波特率高8位 MOV DX,2FBH MOV AL,0AH OUT DX,AL ;送最终的通信线路控制字 MOV DX,2FCH MOV AL,03H OUT DX,AL ;送MODEN控制字 MOV DX,2F9H MOV AL,00H OUT DX,AL ;禁止所有中断 6.16550内部有哪4个中断优先级?其中,优先级的顺序如何?每个中断优先级包括哪些中断源?
答:
16550内部有4个中断优先级:
优先级1:接收数据出错(最高优先级)。 优先级2:接收数据满或接收FIFO字符超时。 优先级3:发送保持寄存器空。
优先级4:MODEM的状态改变(最低优先级)。
优先级的顺序及每个中断优先级所包括的中断源参见第11章,表11-6 中断类型编码及其中断优先级表。
7.16550的FIFO控制寄存器(FCR)各位的定义如何? 参见第11章 图11-17 FIFO控制寄存器的格式。
8.设16550工作在FIFO方式,波特率9600bps,7位数据位,1位停止位,1位偶校验,中断触发值是4字节,使用中断方式传输,分配给寄存器的地址范围是3F8H~3FFH,编写初始化程序。
解:
MOV DX,3FBH MOV AL,80H OUT DX,AL ;通信线路控制字,DLAB=1 MOV DX,3F8H MOV AL,0CH OUT DX,AL ;送波特率低8位
INC MOV OUT
DX
AL,AL,00H
DX,AL ;送波特率高8位
46页
如有你有帮助,请购买下载,谢谢!
MOV DX,3FBH MOV AL,00011010B OUT DX,AL ;送最终的通信线路控制字 MOV DX,3FAH ;FIFO控制字地址 MOV AL,01000111B
OUT DX,AL ;允许FIFO,清除FIFO,中断触发值=4 MOV DX,3FCH MOV AL,0BH ;OUT2#、DTR#、RTS#信号有效
OUT DX,AL ;送MODEN控制字 MOV DX,3F9H MOV AL,0FH OUT DX,AL ;允许所有中断 9.16550波特率的设置有什么特点? 答:
与8250波特率除数锁存器的内容相同。
当基准时钟频率为1.8432MHz时,8250工作的波特率是50~9600bps。而16550的波特率是50~115.2Kbps,提高了传输的速率,部分扩充的波特率与除数对应的关系见表11-5所示,主要特点是波特率除数锁存器的值可以是1。
10.在RS-232C串行通信中,哪一种设备是数据终端设备(DTE)?哪一种设备是数据通信设备(DCE)?
答:
具有RS-232C串行通信接口的计算机是数据终端设备,MODEM或具有MODEM功能的其他通信设备是数据通信设备(DCE)。
11.在RS-232C串行通信中,零MODEM调制的连接电路如何? 答:
零MODEM调制的连接电路:直接将收、发双方的发送端与接收端交叉相连接,而两者的地线连接在一起。
12.RS-232标准规定逻辑1和逻辑0的电压范围分别是多少? 答:
逻辑1的电压:-3V~-15V 逻辑0的电压:+3V~+15V
13.在RS-232C串行通信接口中,为什么要实现RS-232C电平与TTL电平之间的转换? 答:
串行通信接口芯片工作与产生的信号都是TTL电平信号,而国际上规定RS-232C串行通信接口以RS-232C电平工作,这是因为,RS-232C电平抗干扰容限大得多,适应于计算机外部数据的传输,传输距离一般可以达15米左右。为了解决两者电平匹配的问题,所以要实现RS-232C电平与TTL电平之间的转换。
14.USB主要有哪些性能特点? 答:
47页
如有你有帮助,请购买下载,谢谢!
1)支持即插即用。
2)扩充外设能力强,可支持多达127个外部设备。 3)传输速度快,而且支持多种操作速度。 4)连接简单快捷。
5)通用连接器,USB用一种通用的连接器可以连接多种类型的外设。 6)无须外接电源。
15.USB总线支持哪几种传输速度? 答:
USB支持低速1.5Mb/s、全速12Mb/s、高达480Mb/s,以及USB 2.0以上版本的更高速度。 16.一个USB主控机最多可以连接多少个外部设备? 答:
一个USB主控机可以连接多达127个外设。 17.USB有哪4种基本的传输类型? 答:
(1)批传输 (2)中断传输 (3)等时传输 (4)控制传输
18.USB有哪几种类型的包? 答:
分为四种类型的包:标记包(Token)、数据包(Data)、握手包(Handshake)及特殊包(Special)。
19.在USB协议中,根据不同类型的设备设置了相应的描述符,主要包括哪几种描述符?
答:
在USB协议中,根据不同类型的设备设置了相应的描述符,包括三类描述符: ① USB标准设备的描述符。 ② USB集线器的描述符。
③ HID(Humen Interface Devices)设备的描述符,即人机接口设备描述符。 20.标记包的格式如何?
参见第11章 图11-30 标记包格式。 21.数据包的格式如何?
参见第11章 图11-31 数据包格式。 22.USB系统的拓扑结构如何?
参见第11章 图11-28 USB系统拓扑结构示意图。
第12章 (12.5 习 题)
1.说明82C54方式2与方式3的工作特点。
48页
如有你有帮助,请购买下载,谢谢!
答:
方式2与方式3都能自动产生连续不断的脉冲信号输出,不过,方式2产生的是脉冲波,方式3产生的是对称的方波输出。
方式2对应外来脉冲每次减1,方式3对应外来脉冲一般是减2操作,或减3操作。共同点是减计数器减至0时,初值寄存器重新将初值装入减计数器中。
2.说明82C54方式1与方式5的工作特点。 答:
方式1与方式5都是由GATE信号触发后才开始作减计数,但两者有区别。
(1)写入方式控制字后,OUT输出为高电平。写入计数初值之后,计数器并不立即开始计数,而要等到GATE上升沿后的下一个CLK输入脉冲的下降沿,OUT输出变低,计数才开始。结束时,OUT输出变高,从而产生一个宽度为3个CLK周期的负脉冲。
(2)写入控制字后,输出OUT即为高电平。写入计数初值后,计数器并不立即开始计数,而是由门控脉冲的上升沿触发。计数结束(计数器减到0),输出一个持续时间为一个CLK时钟周期的负脉冲,然后输出恢复为高电平。直到GATE信号再次触发。
3.82C54在写入计数初值后,二进制计数和十进制计数有无区别? 若有,有何区别? 答: 有区别。
写入计数初值后,按照二进制做减计数,不够减时,向高位借1个总是当作2个,而做十进制减计数时,把计数初值当作BCD数,如果个位不够减时,向十位借一个,相当10个数,同样,十位向百位借一个数,也当作10个数处理。
4.82C54初始化编程包含哪两项内容? 答:
送控制字,送计数初值。
5.82C54每个计数通道与外设接口有哪些信号线?每个信号的作用是什么? 答:
(1)CLK,时钟脉冲输入端,3个计数器分别有一个时钟脉冲输入端,分别为CLK0、CLK1、CLK2。用于输入定时脉冲或计数脉冲信号。
(2)GATE,门控输入端,3个计数器每一个都有一个门控输入端,分别为GATE0、GATE 1、GATE 2。门控输入端用于外部控制计数器的启动计数和停止计数的操作。
(3)OUT,计数输出端。3个计数器每一个都有一个计数到输出端,分别为OUT0、OUT1、OUT2。
6.试按如下要求分别编写82C54的初始化程序:己知82C54的计数器0、1、2和控制字I/O地址依次为304H、305H、306H和307H。
(1)使计数器1工作在方式0,仅用低8位作二进制计数,计数初值为128; (2)使计数器0工作在方式1,按BCD码计数,计数值为3000; (3)使计数器2工作在方式2,按二进制计数,计数值为02F0H。 解:
(1)编程如下:
MOV DX,307H
49页
如有你有帮助,请购买下载,谢谢!
MOV AL,01010000B OUT DX,AL MOV DX,305H MOV AL,128 OUT DX,AL
(2)编程如下: MOV DX,307H
MOV AL,00110011B OUT DX,AL MOV AX,3000H MOV DX,304H OUT DX,AL MOV AL,AH OUT DX,AL
(3)编程如下:
MOV DX,307H MOV AL,B OUT DX,AL MOV AX,02F0H MOV DX,306H OUT DX,AL MOV AL,AH OUT DX,AL
7.设82C54的计数器0、1、2和控制字I/O地址依次为300H、301H、302H和303H。设计数器0使用低8位计数,初值为15,选用方式3,二进制计数,编写初始化程序,并要求:用82C54的锁存命令,锁存计数器0的计数值及状态信息,并读回8位的计数值及状态信息。
解:
MOV DX,303H ;初始化编程
MOV AL,00010110B OUT DX,AL MOV DX,300H MOV AL,15 OUT DX,AL
;------------------------
MOV DX,303H
MOV AL,B ;仅锁存0号计数器 ;------------------------
MOV DX,300H
IN AL,DX ;先读取状态信息
50页
如有你有帮助,请购买下载,谢谢!
MOV AH,AL ;保存状态信息
IN AL,DX ;后读取8位的计数值。
8.设82C54计数器0、1、2和控制字的I/O地址依次为F8H、F9H、FAH、FBH,说明如下程序的作用。
MOV AL,33H OUT 0FBH,AL MOV AL,80H OUT 0F8H,AL MOV AL,50H 0UT 0F8H,AL
解: 33H 即00110011B送入控制地址 FBH,表示计数器0采用16位计数,工作方式1,数据格式为 BCD,计数初值为:5080H。
9.82371AB内部由哪16个功能部件组成? 答:
82371AB内部由16个功能部件组成: PCI总线接口; ISA总线接口; 初级IDE接口; 二级ID接口; 中断控制接口; 定时器/计数器; 实时时钟RTC; DMA控制器;
通用串行总线USB; 系统电源管理接口; X-Bus支持逻辑; I/O APIC支持逻辑; 系统管理总线SMBus; 系统复位电路;
通用目的输入和输出接口; 测试接口。
10.82371AB内部IDE接口可以外接几个IDE设备? 答:
可以提供4个IDE设备接口。
11.82371AB内部兼容了几个82C54定时器/计数器?其中每个计数器的作用如何? 答:
只兼容了一个定时器/计数器82C54,也称为可编程的时间间隔定时器82C54。它包含3个独立的16位计数器,每个计数器的输出所提供的系统功能:
计数器0:计数器0的计数输出端连接到主82C59的IRQ0,作为系统定时中断。为日历
51页
如有你有帮助,请购买下载,谢谢!
时间、软盘暂停等提供系统定时间隔。
计数器1:计数器1定时产生动态存储器的刷新请求信号。
计数器2:通过对计数器2的编程,定时产生对喇叭音调的控制。 12.82371AB内部兼容了几个82C59?可以连接几个外部中断源? 答:
两个中断控制器82C59提供15级中断。
第13章 (13.4 习 题)
1.简述总线标准和接口标准的一般特点,二者有何不同? 参考第13章 13.1.1
2.目前微机中常用的典型总线有哪几种?它们各有什么特点? 参考第13章 13.2
3.评价总线的性能一般有哪几种指标? 答:
(1)总线宽度 (2)总线频率 (3)传输速率
4.设某总线频率为66MHz,分别计算总线宽度为32位和64位时总线的传输速率。 解:
传输速率=总线宽度/8×总线频率 (1)总线频率为66MHz,总线宽度32位,则: 传输速率=32b/8×66 MHz =264MB/s。
(2)总线频率为66MHz,总线宽度64位,则: 传输速率=64b/8×66 MHz =528MB/s。
5.PCI局部总线处于总线层次的什么位置,请画出总线结构图。 参考第13章 图13-1 PⅡ微机系统的总线层次结构 6.试比较PCI总线和AGP总线的特点。 参考第13章
7.AGP有几种工作模式,每种工作模式下的工作频率是多少? 答:
表13-3 AGP的工作模式 版本 1.0,2.0 1.0,2.0 2.0,3.0 3.0 8.解释多核技术。 参考第13章 13.3节
52页
模式 1× 2× 4× 8× 工作频率 66.6MHz 133MHz 266MHz 533MHz 数据传输速率 266MB/s 533MB/s 1066MB/s 2133MB/s 如有你有帮助,请购买下载,谢谢!
9.Intel Core微结构和Net Burst微结构在高速缓存方面有什么不同? 参考第13章 13.3节
10.Intel X58和Intel X48芯片组之间有哪些差异? 参考第13章 13.3节
第14章 (14.6 习 题)
14.1 模/数转换通道由哪几部分组成?
参考第14章 图14-1 含有A/D与D/A转换的监控系统。 14.2 简述模拟多路转换开关CD4051的工作原理。 参考第14章 14.2.1 模/数转换通道的组成。 14.3 采样保持器的作用是什么? 答:
采样保持器的作用是:在A/D转换器进行采样期间,保持被转换输入信号的幅度不变。 由于A/D转换器完成一次转换是需要时间的。不同A/D转换芯片,其转换时间各异,对于连续变化较快的模拟信号如果不采取采样保持措施,将会引起转换误差。
14.4 解释分辨率与精度的区别。
参考第14章 14.3.1 模/数转换器的主要技术指标。
14.5 设10位A/D转换器输入模拟电压的范围是0~5V,试问分辨率是多少?能分辨模拟电压的值是多少?若采用12位A/D转换器,能分辨模拟电压的值又是多少?
解:
分辨率分别是10位和12位。
(1)10位A/D转换器能分辨模拟电压的值:5000m V/1023= 4.88m V. (2)12位A/D转换器能分辨模拟电压的值:5000m V/4095=1.22 m V.
14.6 AD574接成单极性模拟输入时,从10Vin和20Vin输入模拟电压的最小分辨电压分别是多少?
解:
(1)从10Vin输入模拟电压的最小分辨电压值:10000m V/4095= 2.44m V. (2)从20Vin输入模拟电压的最小分辨电压值:20000m V/4095=4.88 m V.
14.7 假设图14-8中译码器输出Yn的地址范围为300H~301H,根据此图用汇编语言编写PC机实现A/D转换的程序段。
解:
采集程序如下:
mov dx,300H ;偶地址
out dx,al ;假输出,启动作12位A/D转换
call delay ;调用延时100μs(>35μs)的子程序(忽略) mov dx,300H ;偶地址 in al,dx ;读高8位
53页
如有你有帮助,请购买下载,谢谢!
mov ah,al
mov dx,301H ;奇地址
in al,dx ;从数据总线D7~D4位读入低4位
14.8 DAC0832内部采用2级寄存器锁存,对转换的二进制数有何特殊用途? 答:
可以使用多个DAC0832同步实现数/模转换。
14.9 用图14-12所示的D/A转换电路产生锯齿波,试编写一段程序。 解:编程如下:
MOV DX,200H;设
y0端口地址为200H
MOV AL、00H OUT DX、AL
ABC:CALL DELAY;调用延时子程序 INC AL OUT DX、AL JMP ABC
14.10 如果模/数转换芯片转换结果的输出端不带三态输出结构,该芯片的输出端与CPU的数据线连接时应该如何处置?
答:
在芯片的输出端与CPU的数据线之间增加一个三态缓冲器,且用该芯片的端口读信号去控制三态缓冲器的输出允许端。
54页
因篇幅问题不能全部显示,请点此查看更多更全内容