首页资源分类嵌入式系统其他 > 系统结构题库

系统结构题库

已有 444994个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:题库

    分    享:

    文档简介

    题库,包含考试容易出的题目

    文档预览

     微机原理及应用试题库 第1章 微型计算机系统 1 1.1选择题 1 1.2判断题 2 1.3填空题 2 1.4简答题 3 第2章 处理器结构 4 2.1选择题 4 2.2名词解释题 5 2.3判断 5 2.4填空题 6 第三章 数据处理 8 3.4.填空 10 第四章 指令系统 12 4.1.选择 12 4.2.名词解释 13 4.3.判断 13 4.4.填空 13 4.5.简答题 14 第5章 汇编语言程序设计 16 5.1.选择 16 5.2.名词解释 17 5.3.判断 17 5.4.填空 17 5.5.简答题 18 5.6.应用题 20 第6章 微机总线 41 6.1.选择 41 6.2.名词解释 42 6.3.判断 42 6.4.填空 43 6.5.简答题 43 第7章 存储系统 45 7.1.选择 45 7.2.名词解释 46 7,3.判断 47 7.4.填空 47 7.5.简答题 48 第八章 无条件与查询传送方式 50 8.1.选择 50 8.2.名词解释 51 8.3.判断 52 8.4.填空 52 8.5.简答题 53 第9章 中断与DMA传送方式 55 9.1.选择 55 9.2.名词解释 56 9.3.判断 56 9.4.填空 56 9.5.简答题 57 第10章 常用接口技术 59 10.1.选择 59 10.2名词解释 60 10.3判断 60 10.4填空 60 10.5简答题 61 10.6应用题 62 组卷方案 题型 题数 满分 单出章节 合出章节 选择 10 10×1.5=15 1~10 判断 10 10×1=10 填空 10 10*2=20 简答题 5 5*4=20 1,2;3,4;6,7;8,9;5,10; 名词解释 2 5*2=10 2,6,7 3,4;8,9; 应用题 2 10+15=25 5,10 第1章  微型计算机系统 1.1选择题 1.计算机的发展阶段通常是按计算机所采用的( )来划分的。 A.内存容量 B.电子器件 C.程序设计 D.操作系统 2. 一个完整的计算机系统通常应包括( )。 A、系统软件和应用软件 B、计算机及其外部设备 C、硬件系统和软件系统 D、系统硬件和系统软件 3. PC机硬件系统从逻辑上看主要由CPU、内存储器、外存储器、输入设备、输出设备 以及( )组成。 A.运算器 B.键盘 C.显示器 D.总线 4. 以下叙述正确的是( )。 A. 微机的字长可以是8、16、24、32位 B. 微机的字长可以是8、16、32、64位 C. 微机的字长可以是8、16、24、32K D. 字长是指计算机处理数据的精度 5. BIOS是“基本输入输出系统”,在现代的微机系统中,BIOS中代码( )。 A.是不能升级的 B. 是可以升级的 C.更换BIOS芯片后才可以升级 D. 以上说法都不正确 6. 以下有关CPU的说法不正确的是( )。 A. CPU也称作运算控制单元 B. CPU也称作微处理器 C. CPU是微型机的核心部件。 D. CPU也称作运算处理单元 7. 冯•诺依曼计算机的基本思想主要是指( )。 A. 二进制编码和存储程序控制 B. 二进制数和存储器 C. CPU和存储器 D. 存储器和输入输出设备 8. 冯•诺依曼计算机的硬件由( )大基本部件组成。 A. 3 B. 4 C. 5 D. 6 9. 冯•诺依曼计算机的硬件由( )等大基本部件组成。 A. 运算器、控制器、存储器和输入输出设备 B. 寄存器、运算器、控制器、存储器 C. 寄存器、CPU和存储器 D. 存储器和输入输出设备 10. 在现代的微机系统中,描述CPU主频常用的单位是( )。 A. Hz B. KHz C. MHz D. GHz 11. 在现代的微机系统中,描述内存容量常用的单位是( )。 A. B B. KB C. MB D. GB 12. 微型计算机和各个外部设备之间用( )连接起来,再配上软件,就构成了微机系统。 A. 系统总线 B.通信总线 C.数据总线 D.片内总线 13. 所谓微机的字长是指( )。 A. CPU内部数据总线的位数。B. CPU外部数据总线的位数。 C. CPU地址总线的位数。 D. CPU中运算器一次能处理二进制数的最大位数。 14. ( )是以CPU为核心,加上存储器,I/O接口和系统总线构成的. A.微处理器 B.微型计算机 C.微型计算机系统 D.计算机. 15. 微型计算机是以超大规模集成电路为主要部件,以集成了控制器和( )的微处理器为 核心,所构造出的计算机 A.存贮器 B.寄存器 C.运算器    D.计数器 16. 存储器是计算机系统的记忆设备,它用来( ) A.存放数据   B.存放程序  C.存放数据和程序 D.存放微程序 17. 通常所说的32位计算机是指( )。 A.CPU字长为32位   B.通用寄存器数目为32个 C.可处理的数据长度为32位   D.地址总线的宽度为32位 1.2判断题 1. 软件与硬件的等价性原理说明软硬件在功能、性能和成本等方面是等价的。F 2. IA-64结构是IA-32结构的64位扩展,也就是Intel 64结构。F 3. 8086的数据总线为16位,也就是说8086的数据总线的个数、或说条数、位数是16。T 4. 微机主存只要使用RAM芯片就可以了。F 5. 处理器并不直接连接外设,而是通过I/O接口电路与外设连接。T 6. 处理器是微机的控制中心,内部只包括5大功能部件的控制器。F 7. Windows的模拟DOS环境与控制台环境是一样的。F 8. 16位IBM PC/AT机采用ISA系统总线。T 9. IA-32处理器吸取了RISC技术特长。RISC是指复杂指令集计算机。F精简指令集计算机 10. 处理器进行读操作,就是把数据从处理器内部读出传送给主存或外设。F 11. IA-32处理器上不能运行Linux。F 12. IA-32处理器地址总线是双向的。F 13. BIOS是“基本输入输出系统”,在现代的微机系统中,BIOS是不能升级的。F 14. 汇编语言就是机器语言的符号化。F 15. 汇编语言程序就是汇编程序。F 1.3填空题 1. .CPU是英文Central Processing Unit的缩写,中文译为中央处理单元。 2. Intel 8086支持1MB容量主存空间,80486支持4GB容量主存空间。 3. .二进制16位共有216个编码组合,如果一位对应处理器一个地址信号,16位地址信号共能寻址64K个存储单元容量主存空间。 4. DOS主要支持两种可执行文件,它们的扩展名分别是EXE和COM。 5. 关于总线的英文缩写ISA原文是 Industry Standard Architecture, PCI原文是Peripheral Component Interconnection。 6. Windows的文件夹对应的专业术语是 目录 ,英文是 file 。 7. Pentium系列处理器的多媒体指令有 MMX ,SSE,SSE2和 SSE3 类指令。 8.Pentium处理器采用 64 位数据总线, 32 位地址总线与主存相连。 9.最初由IBM公司采用Intel 8088处理器和DOS操作系统推出PC机。 10. 当前32位PC机主要采用 PCI 总线连接I/O接口电路卡,键盘、鼠标等则采用 PS/2 (USB) 总线连接。 11. 描述CPU的主要技术参数有_字长_ ,时钟频率,集成度等。 12. 系统总线一般可分为地址总线,数据总线 和控制总线。 13. 在计算机系统的层次结构中,汇编语言位于第 4 层,而高级语言位于第 5 层。 14. 在计算机系统的层次结构中,操作系统位于第 3 层,而机器语言位于第 2 层。 15. 在计算机系统的层次结构中,数字电路位于第 0 层,而用户位于第 6 层。 1.4简答题 1. 计算机字长指的是什么? 答: 处理器单位时间可以直接处理二进制数据的位数,是CPU性能主要指标之一。 2. 简述微型计算机系统的硬件组成及各部分作用。 答: CPU:CPU也称处理器,是微机的核心。它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)。处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。 存储器:存储器是存放程序和数据的部件。 外部设备:外部设备是指可与微机进行交互的输入(Input)设备和输出(Output)设备,也称I/O设备。I/O设备通过I/O接口与主机连接。 总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。 3. ROM-BIOS是什么? 答: 基本输入输出系统,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。 4. 什么是通用微处理器、单片机? 答:1、通用为处理器:适合较广的应用领域的微处理器,如装在PC机、笔记本电脑等的微处理器; 2、单片机:通常用于控制领域的微处理器芯片,期内部除CPU外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。 5. 什么是DSP芯片、嵌入式系统? 答:1、DSP:数字信号处理器,更适合于处理高速的数字信号,内部集成有高速乘法器,可进行快速乘法加法运算; 2、嵌入式系统:利用微处理器,数字信号处理器或通用微处理器,结合具体应用构成的控制系统。 6. 冯•诺依曼计算机的基本设计思想是什么? 答:采用二进制表达数据和指令,将数据和指令事先保存在存储器中;按顺序执行程序来控制计算机工作 7. 计算机系统通常划分为哪几个层次?普通计算机用户和软件开发人员对计算机系统的认 识一样吗? 答:1、最上层是用户层;第五层是高级语言层;第四层是汇编语言层;第三层是操作系统层;第二层是机器语言层;第一层是控制层;第零层是数字电路层; 2、不一样,普通计算机用户看到的计算机属于用户层,而软件人员看到的属于高级语言层或是汇编语言层。 8. 什么是系列机和兼容机? 答:系列机:同一厂家生产的具有相同计算机结构,但具有不同组成和实现的一系列不同档次不同型号的机器; 兼容机:不同厂家生产的具有相同计算机结构的计算机。 第2章  处理器结构 2.1选择题 1. 一条计算机指令中规定其执行动作的部分称为( )。 A. 源地址码 B. 操作码 C. 目标地址码 D. 数据码 2. 标志寄存器中的溢出标志OF=1时表示的含义,下列说法中正确的是( )。 A. 表示运算结果溢出 B. 表示最高位有进位 C. 两个符号位相同的操作数的运算结果的符号位与参与运算的操作数符号位相反 D. 以上说法都不对 3. VAR是数据段中定义的字变量,指令MOV VAR[EBX][EDI],AX中目的操作数的寻址方式是( )。 A.寄存器相对寻址 B.直接寻址 C.相对基址变址寻址 D.间接寻址 4. VAR是数据段中定义的字变量,指令MOV AX,VAR[EBX]中源的操作数的寻址方式是( )。 A.寄存器相对寻址 B.直接寻址 C.相对基址变址寻址 D.间接寻址 5. VAR是数据段中定义的字变量,指令MOV AX,VAR中源的操作数的寻址方式是( )。 A.寄存器相对寻址B.直接寻址C.相对基址变址寻址 D.寄存器间接寻址 6. 下列80X6CPU标志寄存器的标志位中,不属于状态标志位的是( ) A.OF B.IF C.AF D.PF 7. 下列80X6CPU标志寄存器的标志位中,不属于状态标志位的是( ) A.OF B.TF C.AF D.PF 8. 计算机能直接识别、理解和执行的程序是 ( )。 A汇编语言程序 B.机器语言程序 C.高级语言程序 D.数据库语言程序 9. 寄存器( )不能被分割为高字节和低字节。 A.AX B. DX C.BX D. CS 10. VAR是数据段中定义的字变量,指令MOV EBX,OFFSET VAR源操作数的寻址方式是( )。 A.直接寻址 B.寄存器间接寻址 C.立即数寻址 D.存贮器寻址 11. 当使用EBP寄存器作基址寻址时,默认在( )段内寻址。 A.代码 B.堆栈 C.数据 D.附加 12. 当使用EDI寄存器作基址寻址时,默认在( )段内寻址。 A.代码 B.堆栈 C.数据 D.附加 13. 运算器由很多部件组成,其核心部分是( )。 A.数据总线 B.算术逻辑单元 C.累加器 D.多路开关 14. IA-32处理器在保护模式下可以直接访问最大物理地址空间是( )。 A. 1MB B. 64KB C. 4GB D. 4TB 15. IA-32处理器在复位后自动进入( )方式。 A. 保护 B. 实地址 C. 系统管理 D. 虚拟8086 2.2名词解释题 1. ALU:Arithmetic Logic Unit 算术逻辑单元,是计算机的运算器,负责处理器所能进行的各种运算,主要是算术运算和逻辑运算。 2. Offset address 偏移地址以段基地址为起点,段内位置可以用距离该起点的位移量表示。 3. Addressing mode 寻址方式对理解处理器工作原理和指令功能,以及进行汇编语言程序设计都至关重要。 4. Bus Interface Unit BIU 总线接口单元负责处理器对存储器和外设进行访问。 5. Code Prefetch Unit 指令预取单元,利用总线的空闲时间通过总线接口单元按顺序与取指令,放在指令预取队列中。 6. Instruction Decode Unit 指令译码单元,从指令预取队列中取来指令,译码成微指令代码,经译码后的指令存放在指令队列中。 7. Protected mode保护方式,IA-32处理器在保护方式下能发挥其全部功能,充分利用其强大的段页式存储管理以及特权与保护能力 8. Real-address mode实地址方式通电复位后IA-32橱余实地址方式,实现了与8086相同的程序设计环境,但有所扩展。 9. System management mode 系统管理方式,为操作系统和核心程序提供节能管理和系统安全管理机制。 10. Virtual-8086 mode 虚拟8086方式并不是处理器的一种工作方式,只是提供了一种在保护方式下类似于实地址方式的运行环境。 11. General purpose registers 通用寄存器一般指处理器最长使用的证书通用寄存器,可用于保存整数数据、地址等。 12.Flat Memory Model 平展存储模式,平展存储模式下,对程序来说存储器是一个连续的地址空间 13. Indirect Addressing 间接寻址,有效地址存放在寄存器中,利用寄存器间接寻址,可以方便的对数组的元素或字符串的字符进行操作。 14. Accumulator 累加器,是专门存放算术或逻辑运算的一个操作数和运算结果的寄存器 15. Instruction pointer 指令指针,用于记录将要执行指令的主存地址,标志寄存器用于保存指令执行的辅助信息。等同于PC的功能。 2.3判断 1. 程序计数器PC或指令指针EIP寄存器属于通用寄存器。F 2. 处理器的指令译码是将指令代码翻译成它代表的功能的过程,与数字电路的译码器是不 同的概念。T 3. EAX也被称为累加器,因为它使用最频繁。T 4. 处理器的传送指令MOV属于汇编语言的执行性语句。T 5. 汇编语言的语句由明显的4部分组成,不需要分隔符区别。F 6. 80减90(80-90)需要借位,所以执行结束后,进位标志CF=1。T 7. MASM汇编语言的注释用分号开始,但不能用中文分号。T 8. IA-32处理器在实地址方式下,不能使用32位寄存器。F 9. 存储器寻址方式的操作数当然在主存了。T 10. 保护方式下,段基地址加偏移地址就是线性地址或物理地址。T 11. IA-32处理器中的8个32位通用寄存器 T 12. 寄存器变量的存取速度远高于内存变量。T 13. 指令中的目的操作数可以采用立即寻址方式。F 14. 指令中的源操作数与目的操作数的寻址方式不能同为内存寻址方式。T 15. 不能用EBX作为基址指针访问堆栈段中的数据。F 2.4填空题 1. 寄存器EDX是 32 位的,其中低16位的名称是 DX ,还可以分成两个8位的 通用 寄存器,其中D8~D15部分可以用名称 DH 表示。 2. IA-32处理器的段寄存器是 16 位的,指令指针EIP是 32 位的。 3. 逻辑地址由 段基地址 和 偏移地址 两部分组成。 4. 进行8位二进制数加法:10111010+01101100,8位结果是 [1]00100110 ,标志CF= 1 。 5. 在实地址工作方式下,逻辑地址“7380H∶400H”表示的物理地址是 77800H ,并且该段起始于 73800H 物理地址。 6. IA-32处理器有8个32位通用寄存器,其中EAX, EBX , ECX 和EDX,可以分成16位和8位操作。 7. IA-32处理器复位后,首先进入是 实地址 工作方式。该工作方式分段最大不超过 64KB 。 8. MASM要求汇编语言源程序文件的扩展名是 .ASM ,汇编产生扩展名为OBJ的文件被称为 目标模块文件 。 9. 除外设数据外的数据寻址方式有3类,分别被称为立即数寻址、 寄存器寻址 和 存储器寻址 。 10. 用EBX做基地址指针,默认采用 DS 段寄存器指向的数据段;如果采用EBP或ESP作为基地址指针,则默认使用 SS 段寄存器指向堆栈段。 11. 代码段中下一条要执行的指令由 CS 寄存器和___EIP__寄存器指示。 12. IA-32处理器有8个32位通用寄存器,其中ESI, EDI , EBP 和ESP,不可以分解成16位和8位操作。 13. IA-32处理器在保护模式MASM采用 平展或段式 存储模型,而在实地址模式下则采用 实地址 存储模型。 14. 除I/O指令外,具有双操作数的指令中,目的操作数只能采用 寄存器 寻址方式或 存储器 寻址方式。 15. 计算机存储信息的最小单位是 byte ,1个字节等于 8 个二进制位。 2.5简答题 1. 举例说明CF和OF标志的差异。 答:进位标志CF表示无符号数运算结果是否超出范围,超出范围后加上进位或借位,运算结果仍然正确;溢出标志OF表示有符号数运算结果是否超出范围,如果超出范围,运算结果已经不正确。 2. IA-32处理器有哪三类基本段,各是什么用途? 答:代码段:存放程序的指令代码。程序的指令代码必须安排在代码段,否则将无法正常执行。 数据段:存放当前运行程序所用的数据。程序中的数据默认是存放在数据段,也可以存放在其他逻辑段中。 堆栈段:主存中堆栈所在的区域。程序使用的堆栈一定在堆栈段。 3. 什么是实地址方式、保护方式和虚拟8086方式?它们分别使用什么存储模型? 答:实地址方式:与8086具有相同的基本结构,只能寻址1MB物理存储器空间,逻辑段最大不超过64KB;但可以使用32位寄存器、32位操作数和32位寻址方式;相当于可以进行32位处理的快速8086。实地址工作方式只能支持实地址存储模型。 保护方式:具有强大的段页式存储管理和特权与保护能力,使用全部32条地址总线,可寻址4GB物理存储器。保护方式通过描述符实现分段存储管理,每个逻辑段可达4GB。处理器工作在保护方式时,可以使用平展或段式存储模型。 虚拟8086方式:在保护方式下运行的类似实方式的运行环境,只能在1MB存储空间下使用“16位段”。 处理器工作在虚拟8086方式时,只能使用实地址存储模型。 4. 什么是平展存储模型、段式存储模型和实地址存储模型? 答:平展存储模型下,对程序来说存储器是一个连续的地址空间,称为线性地址空间。程序需要的代码、数据和堆栈都包含在这个地址空间中。 段式存储模型下,对程序来说存储器由一组独立的地址空间组成,独立的地址空间称为段。通常,代码、数据和堆栈位于分开的段中。 实地址存储模型是8086处理器的存储模型。它是段式存储模型的特例,其线性地址空间最大为1MB容量,由最大为64KB的多个段组成。 5. 汇编语句有哪两种,每个语句由哪4个部分组成? 答:汇编语句有两种:执行性语句(处理器指令)、说明性语句(伪指令)。 每个语句有:标号、指令助记符、操作数或参数、注释4个部分组成。 6. 给出IA-32处理器的32位寻址方式的组成公式,并说明各部分作用。 答:32位存储器寻址方式的组成公式 32位有效地址 = 基址寄存器+(变址寄存器×比例)+位移量 其中的4个组成部分是: ·基址寄存器任何8个32位通用寄存器之一; ·变址寄存器除ESP之外的任何32位通用寄存器之一; ·比例可以是1,2,4或8(因为操作数的长度可以是1,2,4或8字节); ·位移量可以是8或32位有符号值。 7. Pentium的片上Cache采用统一结构还是分离结构? 答:Pentium芯片中有两个8KB容量的Cache,一个用于高速缓冲指令的指令Cache,另一个用于高速缓冲数据的数据Cache,即分离的Cache结构。 8. 为什么将查找操作数的方法称为数据寻“址”方式? 答:主存和外设在汇编语言中被抽象为存储器的地址或I/O地址,而寄存器虽然以名称表达,但机器代码中同样用地址编码区别寄存器,所以指令的操作数需要通过地址指示。这样,通过地址才能查到数据本身,这就是数据寻址方式。 第三章 数据处理 3.1.选择 1. BUF DWORD 10h DUP( 3 DUP( 2,5 ) ,3 ,4 ,5)语句为变量BUF分配的内存空间的字节数是( )。 A. 50h B. 90h C. 240h D. 120h 2. BUF DW 10H DUP(3 DUP(2,?),1,2 DUP(?),100)为变量BUF分配的内存空间的字节数是( )。 A. 160 B. 22 C. 80 D. 320 3. 类型操作符PTR用于( )。 A. 定义内存变量的类型 B. 重新指定内存变量的类型 C. 定义寄存器变量的类 D. 重新指定寄存器变量的类型 4. 用来定义双字变量的伪指令是( )。 A. DB B. DW C. DD D. DQ 5. 用来定义字变量的伪指令是( )。 A. DB B. DW C. DD D. DQ 6. 用来定义字节变量的伪指令是( )。 A. BYTE B. WORD C. DWORD D. QWORD 7. 执行AND指令后,OF和CF标志位的值是( )。 A. OF=CF=0 B. OF=0,CF=1 C. OF=1,CF=0 D. OF=1,CF=1 8. 执行INC指令除对于SF、ZF有影响外,还要影响的标志位是( )。 A. AF,PF,CF B. OF,AF,CF C. OF,PF,CF D. OF,AF,PF 9. 执行DEC指令除对于SF、ZF有影响外,还要影响的标志位是( )。 A. AF,PF,CF B. OF,AF,CF C. OF,PF,CF D. OF,AF,PF 10. 执行指令 XOR EAX,EAX 后则 ( ) A.AL=1, ZF=1 B.AL=0, ZF=0 C.AL=1, ZF=0 D.AL=0, ZF=1 11. 下列指令执行后,不影响标志位的指令是( )。 A.ADD EAX,1 B.DEC DX C.XOR CX,AX D.LEA EDX,MSG 12. 能够表示指令存放地址的是( ) A 符号名 B 变量名 C 标号 D 常量名 13. 8位二进制无符号数所能表示的数值范围是( )。 A.0 ~ 255 B.0 ~ 256 C.0 ~ 128 D.0 ~ 127 14. 16位二进制补码所能表示的带符号数的数值范围是( )。 A.0 ~ 65535 B.0 ~ 65536 C.-32768 ~ +32767 D.-65536 ~ +66536 15. 8位二进制补码所能表示的带符号数的数值范围是( )。 A.0 ~ 255 B.0 ~ 256 C.-128 ~ +127 D.-128 ~ +128 3.2.名词解释 1. Two's Complement 二进制补码:对于正数补码等于原码,对于负数的补码等于对应的反码(除符号位其余按位取反加1). 2. Nested Procedure Calls 嵌套程序调用:在调用程序中继续调用其他程序,若调用的是本身则为递归调用。 3. Conditional Jump 条件转移:根据条件如标志位等决定转移,若条件成立则发生跳转。 4. Extended ASCII 扩充美国信息交换标准码 5. Integer constants 整数常量 6. Jumps Based on Signed Comparisons 无符号数条件转移比较 7. Little Endian Order 小端方式:存储方式按低字节存放在低地址端高字节存放在高地址端。 8. Intrinsic Data Types 内部数据类型 3.3.判断 1. 对一个正整数,它的原码、反码和补码都一样,也都与无符号数的编码一样。T 2. 常用的BCD码为8421 BCD码,其中的8表示D3位的权重。T 3. IA-32处理器采用小端方式存储多字节数据。T 4. 空操作NOP指令其实根本没有指令。F 5. 堆栈的操作原则是“先进后出”,所以堆栈段的数据除PUSH和POP指令外,不允许其他方法读写。F 6. 虽然ADD指令和SUB指令执行后会影响标志状态,但执行前的标志并不影响它们的执行结果。T 7. 指令“INC ECX”和“ADD ECX,1”的实现功能完全一样,可以互相替换。F 8. 无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数 值增加一倍。F 9. 逻辑运算没有进位或溢出问题,此时CF和OF没有作用,所以逻辑运算指令如AND、OR等将CF和OF设置为0。T 10. CMP指令是目的操作数减去源操作数,CMPS指令是源操作数减去目的操作数T 11. 指令“DEC ECX”和“SUB ECX,1”的实现功能完全一样,可以互相替换。F 12. 指令“TEST”和“AND”的实现功能完全一样,可以互相替换。F 13. 指令“CMP EAX, ECX”和“SUB EAX, ECX”的实现功能完全一样,可以互相替换。F 14. CPU在实施加减运算时不区分有符号数和无符号数。T 15. VAR是数据段中定义的字变量,指令MOV AL,VAR是正确的。T 3.4.填空 1. (1)定义字节变量的伪指令助记符是 BYTE ,获取变量名所具有的偏移地址的操作符是 OFFSET 。 2. (2)计算机中有一个“01100001”编码。如果把它认为是无符号数,它是10进制数 97 ;如果它是某个ASCII码,则代表字符_ a _。 3. C语言用“\n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:一个是回车,其ASCII码是 0DH ,它将光标移动到当前所在行的首位;另一个是换行,其ASCII码是 0AH ,它将光标移到下一行。 4. 数据段有语句“H8843 DWORD 99008843H”,代码段指令“MOV CX, WORD PTR H8843”执 行后,CX= 8843H ;代码段指令“MOV CL, BYTE PTR H8843”执行后,CX=_8843H _。 5. 数据段有语句“XYZ DWORD ?”,则XYZ的类型是 DWORD ,用“TYPE XYZ”会得到数值为 4 。 6. 数据段有语句“ABC BYTE 3 DUP (1,2,3)”,代码段指令“MOV CL, ABC+3”执行后,CL= 1 ; “MOV CL, ABC+8”执行后,CL= 3 。 7. 数据段有语句“ABC BYTE 3 DUP (1,2,3)”,代码段指令“MOV AX, WORD PTR ABC”执行后,AX= 0201H ; “MOV EAX, DWORD PTR ABC”执行后,EAX= 01030201H 。 8. 顺序执行指令“XOR EAX, EAX”和“SUB EAX, EAX”后,EAX= 0 ,OF= 0 。 9. 顺序执行指令“XOR EAX, EAX”和“DEC EAX”后,EAX= FFFFFFFFH ,CF= 0 。 10. 欲将EDX内的无符号数除以16,使用指令“SHR EDX, 4 ”; 欲将EAX内的有符号数除以16,使用指令“ IDIV 16 ”。 11. 已知:X补=10101100B,Y补=11000110B,则:[X+Y]补= [1]01110010 ,[X-Y]补= 00011000 。 12. 设字长为八位,有x= -1,y=124,则有:[x+y]补= 123 , [x-y] 补= 131 。 13. 已知:寄存器AX=7836H,指令:ADD AX,9A5EH执行后,AX= 1294H CF= 1 。 14. 已知:寄存器AX=7836H,指令:ADD AX,9A5EH执行后,OF= 0 ,SF= 0 。 15. "0"~"9"的ASCII码值是 30H~39H ,"A"~"Z"的ASCII码值是 41H~5AH 。 3.5.简答题 1. 使用二进制8位表达无符号整数,257有对应的编码吗? 答:没有。使用二进制8位表达无符号整数的范围为0~255,因此257没有对应的编码。 2. 字符“'F'”和数值46H作为MOV指令的源操作数有区别吗? 答:字符“'F'”的ASCII码就是数值46H,所以没有区别。 3. 为什么可以把指令“MOV AX, (34+67H)*3”中的数值表达式看成是常量? 答:汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。 4. 数值500,能够作为字节变量的初值吗? 答:不能。数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。 5. 为什么说“XCHG EDX,CX”是一条错误的指令? 答:源、目标寄存器位数不同,不能用该指令进行数据交换。 6. 都是获取偏移地址,为什么指令“LEA EBX, [ESI]”正确,而指令“MOV EBX, OFFSET[ESI]”就错误? 答:前者在指令执行时获得偏移地址,是正确的;但后者的OFFSET只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。 7. INC,DEC,NEG和NOT都是单操作数指令,这个操作数应该是源操作数还是目的操作数? 答:INC,DEC,NEG和NOT指令的操作数既是源操作数也是目的操作数。 8. 大小写字母转换的规律是什么?给出转换的公式。 答:大小写字母转换利用它们的ASCII码相差20H。假设用AX存放所要转换的字母: 大写转小写:ADD AX 20H; 小写转大写:SUB AX 20H 第四章 指令系统 4.1.选择 1. 计算机内的“溢出”是指其运算的结果 ( )。 A.无穷大或无穷小 B.超出了内存单元所能存储的数值范围 C.超出了寄存器能存储数值的范围 D.超出了该指令所指定的结果能存储的数值范围 2. 计算机内的“溢出”是指其运算的结果 ( )。 A.无穷大或无穷小 B.超出了内存单元所能存储的数值范围 C.超出了寄存器能存储数值的范围 D.超出了该指令所指定的结果能存储的数值范围 3. 16位二进制无符号数的数值范围是( )。 A.0 ~ 65535 B.0 ~ 65536 C.0~ 32767 D.0 ~ 32768 4. 最大的10位无符号二进制整数转换成十进制数是 。 A. 51 B. 512 C. 1023 D. 1024 A.ZF B. SF C.CF D. TF 6. INC 指令不能影响标志寄存器的( )位。 A.ZF B. SF C.CF D. DF 7. DEC 指令不能影响标志寄存器的( )位。 A.ZF B. SF C.CF D. IF 8. 在执行DIV或IDIV指令发生错误时会产生( )中断。 A.线路故障 B.内部 C.外部 D.单步 9. 在执行ADD或SUB指令发生溢出错误时( )。 A.不产生任何中断 B. 会产生内部中断 C. 会产生外部中断 D. 会产生单步中断 10. 完成同指令XCHG AX,BX相同功能的指令或指令序列是( )。 A. MOV AX,BX B. MOV BX,AX C. PUSH AX     D. MOV CX,AX POP BX    MOV AX,BX MOV BX,CX 11. 顺序执行PUSH EAX和POP EBX两条指令,其功能等同于( ) A.MOV EAX, EBX B.MOV EBX, EAX C.XCHG EAX, EBX D.XCHG EBX, EAX 12. 目前在微机中最普遍采用的字符的编码是( )。 A.BCD码 B.ASCII码 C.余三码 D.格雷码 13. 已知X、Y的补码分别为11101011B、00001010B,求X+Y的补码等于( )。 A. 10100001B B. 11011111B C. 11110101B D. 溢出 14. 计算机中( )不能直接表示有符号数。 A.原码 B.补码 C.反码 D.BCD码 15. 下列字母中,ASCII码值最小的是( ) 。 A. K B. Y C. a D. i 16. 当执行完下列指令序列后,标志位CF和SF的值为( )。 MOV AL,0C4H ADD AL,9DH A. 0,0 B. 0,1 C. 1,0 D. 1,1 4.2.名词解释 1. Program flow control instructions : 程序流程控制指令 2. OFFSET Operator: 在汇编阶段取得变量的偏移地址。 3. Loop Counter: 循环计数器,一般用ECX作计数器,在LOOP循环中每次减1。 4. Pseudo Code: 伪代码,又称虚拟代码,是高层次描述算法的一种。 5. Single Dimension Array:一位数组 6. Conditional Loop Instructions:条件循环指令利,用条件转移指令决定是否进行循环。 7. Arithmetic instructions:算数指令 8. Jumps Based on Unsigned Comparisons:无条件转移比较 4.3.判断 1. VAR是数据段中定义的字变量,指令MOV AX,VAR+2是正确的。T 2. VAR1和VAR2是数据段中定义的字变量,指令MOV AX, VAR1-VAR2是正确的。T 3. VAR1和VAR2是数据段中定义的字变量,指令MOV AX, VAR1+VAR2是正确的。F 4. 执行乘法指令IMUL src时,运算结果不会产生溢出。T 5. 执行乘法指令IMUL REG,src时,运算结果不会产生溢出。F 6. 定义符号常量时,使用“=”与“EQU”没有区别。F 7. 地址操作符OFFSET可以获取任何寻址方式的内存变量的有效地址。F 8. 指令“SHL”与“SAL”的功能是等价的。T 9. 指令“SHR”与“SAR”的功能是等价的。F 10. 指令“LOOP Lable ”与“DEC ECX JNZ Lable”的功能是等价的。F 11. 32位机不能完成64位整数加法运算。F 12. 只有补码才能表示有符号数。F 13. 指令“LEA”可以获取任何寻址方式的内存变量的有效地址。T 14. 指令“LEA”可以实现求两个寄存器与一个立即数三个数之和的功能。T 15. 堆栈内部中的数据是无法修改的。F 4.4.填空 1. 顺序执行指令“XOR EAX, EAX”和“SUB EAX, 1”后,EAX= FFFFFFFFH ,CF= 1 。 2. 数据段有语句“BUF DWORD 10h DUP( 3 DUP( 2,? ) ,3 ,4 ,5)”,则用“LENGTHOF BUF”会得到数值为 144 ,用“SIZEOF BUF”会得到数值为 576 _。 3. 已知AL=01100001B,执行指令“AND AL,5FH”后,AL= 41H ;如果AL的内容是某个ASCII码,则代表字符 A 。 4. 已知AL=01000001B,执行指令“OR AL,20H”后,AL= 61H _;如果AL的内容是某个ASCII码,则代表字符 a 。 5. 设字长为八位,-128补= 80 _H, -1补= FF H。 6. 已知:寄存器AX=7836H,指令:TEST AX,9A5EH执行后,OF= 0 ,SF= 0 。 7. 已知:寄存器AX=7836H,指令:CMP AX,9A5EH执行后,AX= 7836 H ,OF= 1_。 8. 要测试AX的第五位是否为1,使用指令 AND AX 0020 H ;若要将AL的第五位置为1,使用指令 OR AL 002O H 。(说明:最低位为第0位。) 9. 已知:寄存器AX=9A5EH,指令: NEG AX执行后,OF= 0 ,SF= 0 。 10. 已知:寄存器EAX=65536,EBX=32768,指令:DIV EBX执行后,EAX=2。则指令:DIV EBX执行前EDX的值应为 0 ,指令:DIV EBX执行后EDX=__0__。 11. 已知:寄存器AL=-1,指令:MOVSX BX,AL执行后,BX= __FFFF__H;指令:MOVZX CX,AL执行后,CX= __00FF__H。 12. 顺序执行指令序列“XOR EAX,EAX ,DEC EAX , ADC EAX,0”后,CF=_0_,ZF=_0_。 13. 顺序执行指令序列“XOR EAX,EAX ,SUB EAX,1 ,ADC EAX,0”后,CF=_1_,ZF=_1__。 14. 已知:寄存器AL=10,BL=-10,指令:MUL BL执行后,AX=__099C__H;而若将指令改为:IMUL BL 则执行后AX=__FF9C__H; 15. 若要将AX的第五位和第九位置为0,使用指令__AND AX ,FDDF H__;若要将AX的第五位和第九位置反,使用指令___XOR AX ,0220 H___。(说明:最低位为第0位。) 4.5.简答题 1. 乘除法运算针对无符号数和有符号数,有两种不同的指令。只有一种指令的加减法如何区别无符号数和有符号数运算? 答:加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的CF和是SF标志,可利用CF和SF进行区别。 2. 逻辑与运算为什么也称为逻辑乘? 答:逻辑与运算规则是:1^1=1,其他均为0,逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。 3. 简述逻辑运算指令怎么实现复位、置位和求反功能? 答:实现复位指令:AND AX 0 ;将AX里的数值为0 实现置位指令:OR AX FFFF ;给预置位置为1再与要比较的数作OR运算 实现求反指令:XOR AX FFFF ;将目的操作数与全1作异或运算。 4. 在处理一维数组时,通常可以采用哪些寻址方式?各自的特点是什么? 答:立即数寻址:指令需要的操作数紧跟在操作码之后作为机器指令代码的一部分并随着处理器的取指操作从主存进入指令寄存器。 特点:速度快不需要转换地址,但寻址范围小; 寄存器寻址:指令的操作数存放在处理器的寄存器中。 特点:寻址方式简单快捷,是最常使用的寻址方式; 存储器寻址:寻址主存中存储的操作数就称为存储器寻址。 特点:需要至少两次访存,寻址方式多,地址范围大。 5. 通常在什么情况下需要使用MOVSX、MOVZX指令? 答:对无符号数,在前面加零实现零位扩展。对应指令MOVZX;对有符号数进行符号扩展,即用一个操作数的符号位(最高位)形成另一个操作数,对应指令MOVSX。 6. 通常在什么情况下需要使用PTR类型操作符?举例说明。 答:如在指令“MOV EAX,DWORD PTR ARRAY”,EAX是双字,变量ARRAY被定义为字量,两者类型不同,MOV指令不允许不同类型的数据传送,利用PTR改变ARRAY的类型,将其传送给EAX. 7. ESP是通用寄存器,是否可以随意的修改ESP的值? 答:不可以,堆栈段的范围由堆栈执政寄存器ESP的初值确定,这个位置就是堆栈的底部(不再变化),因此不能随意改变ESP的值。修改可能会导致栈里内容丢失,引起异常。 8. 大小写字母转换的规律是什么?给出转换的公式。 答:大小写字母转换利用它们的ASCII码相差20H。 SUB BL 20H:实现小写字母转换为大写; ADD BL 20H:实现大写字母转换为小写。 9. ESP是通用寄存器,是否可以随意的修改ESP的值? 答:不可以,堆栈段的范围由堆栈执政寄存器ESP的初值确定,这个位置就是堆栈的底部(不再变化),因此不能随意改变ESP的值。修改可能会导致栈里内容丢失,引起异常。 第5章  汇编语言程序设计 5.1.选择 1. 循环指令LOOP终止循环的条件是( )。 A.ECX=0 B. ECX=0,且ZF=0 C ECX≠0,且ZF=0 D. ECX≠0,或ZF=1 2. 循环指令LOOPNZ终止循环的条件是( )。 A.ECX=0,或ZF=1 B. ECX=0,且ZF=0 C.ECX≠0,且ZF=0 D. ECX≠0,或ZF=1 3. LOOP指令执行时,隐含计数器是( )。 A. ESP B.EBX C. ECX D.EDI 4. 当A>B时转移的条件转移指令为(A、B为无符号数)( )。 A. JA B. JAE C. JG D. JGE 5. 当A>=B时转移的条件转移指令为(A、B为 有符号数)( )。 A. JA B. JAE C. JG D. JGE 6. 条件转移指令JC Label的测试条件是( )。 A. ZF = 1 B. SF = 1 C. OF = 1 D. CF = 1 7. 若主程序通过堆栈向子程序传递了3个参数,子程序返回主程序时,在子程序中清除堆栈中3个参数正确的RET指令是( )。 A. RET 3*1 B. RET 3*2 C. RET 3*3 D. RET 3*4 8. 主程序通过堆栈向子程序传递了3个参数,子程序调用结束后,在主程序中清除堆栈中3个参数正确的指令是( )。 A. ADD ESP, 3*2 B. ADD ESP, 3*4 C. ADD EBP, 3*2 D. ADD EBP, 3*4 9. 条件转移指令JZ Label的测试条件是( )。 A. ZF = 1 B. SF = 1 C. OF = 1 D. CF = 1 10. 利用堆栈传递子程序参数的方法是固定的,若主程序通过堆栈向子程序传递了3个参数,则在子程序中, 主程序中最后一个被压入栈中的参数可以用( )的形式来访问。 A. [EBP-4] B. [EBP-8] C. [EBP+4] D. [EBP+8] 11. 通过堆栈传递参数,在子程序中使用EBP间址取得参数的原因是( )。 A. EBP没有被占用 B. EBP间址速度较快 C. EBP间址默认的段是堆栈段 D. EBP是基址指针 12. 通过寄存器传递参数比通过堆栈传递参数的优点是( )。 A. 能传递更多得参数 B. 存取效率高 C. 能确保正确调用 D. 没有副作用 13. 利用堆栈传递子程序参数的方法是固定的,在子程序中, 修改参数( )可以改变子程序的返回地址。 A. [EBP-4] B. [EBP-8] C. [EBP+4] D. [EBP+8] 14. 在用LOOP Label 指令构成的循环中,若ECX的初值为-10,则循环体将被执行( )次。 A. 10 B. 0 C. 100 D. >100 15. 在用LOOP Label 指令构成的循环中,若ECX的初值为10,在LOOP Label 指令前有一条“SUB ECX,2” 指令,则循环体将被执行( )次。 A. 10 B. 5 C. 4 D. >10000 5.2.名词解释 5.3.判断 1. 指令指针或者还包括代码段寄存器值的改变将引起程序流程的改变。T 2. JMP指令对应高级语言的GOTO语句,所以不能使用。F 3. 因为条件转移指令Jcc要利用标志作为条件,所以也影响标志。F 4. JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。F 5. 控制循环是否结束只能在一次循环结束之后进行。F 6. 介绍LOOP指令时,常说它相当于DEC ECX和JNZ两条指令。但考虑对状态标志的影响, 它们有差别。LOOP指令不影响标志,而DEC指令却会影响除CF之外的其他状态标志。T 7. CALL指令用在调用程序中,如果被调用程序中也有CALL指令,说明出现了嵌套。T 8. 子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。F 9. 利用寄存器在主子程序间传递参数,其实质就是利用全局变量来传递参数。T 10. 子程序采用堆栈传递参数时,只能在主程序中修改ESP方可保持堆栈的平衡。F 11. 汇编语言中不允许递归调用子程序。F 12. 与高级语言中的自定义函数不同,汇编语言中的子程序不能将计算的结果返给主程序F 13. 汇编语言中,子程序嵌套调用就是递归调用。F 14. 在LOOP指令构成的循环结构中,允许修改ECX的值。T 15. 指令CALL或RET的执行,不改变程序执行的流程。F 16. 在软件中只使用一次的功能编写成子程序完全没有必要。F 17. 在执行CALL指令时,硬件自动将断点地址压入堆栈中。T 18. 在高级语言中,若多重循环出现"交叉”的错误,编译系统通常会给出提示来。若汇编 语言程序中也出现"交叉”错误时,汇编程序也会给出提示来。F 5.4.填空 1. JMP指令根据目标地址的寻址方式,可以分成三种类型:相对寻址、直接寻址 和间接寻址。 2. 假设在平展存储模型下,EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX” 后EIP= 1256H _,执行指令“JMP TABLE[EBX]”后EIP= 3280H。 3. “CMP EAX,3721H”指令之后是JZ指令,发生转移的条件是EAX=_3721H_,此时ZF=_1__。 4. JMP指令根据目标地址的寻址方式,可以分成三种类型:相对寻址、_间接寻址 和直接寻址,通常 相对寻址 方式使用的最多。 5. 循环结构程序一般有三个部分组成,它们是_循环初始_, 循环体 和 循环控制__部分。 6. 条件转移指令 JE Label的测试标志位是__ZF__,条件转移指令 JNO Label的测试标志位是_OF__。 //7. 过程定义开始是“TEST PROC”语句,则过程定义结束的语句是__TEST ENDP__。宏定义开始是“DISP MACRO”语句,则宏定义结束的语句是_ENDM_。 8. 利用堆栈传递子程序参数的方法是固定的,在子程序中通常是利用寄存器__EBP__来访问栈中的参数,采用的寻址方式是 间接寻址。 9. 调用程序和子程序之间的信息传送称为__参数__,而当传递的信息很大时通常通过 堆栈 来进行传递。 10. 在LOOP Label 指令构成的循环中,若ECX的初值为0,则循环体将被执行__232_次;若ECX的初值为—100,则循环体将被执行(232-100)__次。 11. 只要堆栈空间允许,子程序嵌套调用的层次无限制_,子程序也可调用本身,这称为递归调用_。 12. 通常在子程序的开始部分要保护_子程序中用到的__寄存器,但用做出口参数的通用寄存器则_ _不能保护和恢复 _。 13. 通常在子程序中的参数分为两种类型,分别称为__值参__和 形参 。 14. 通常在子程序中至少要有一条_返回__指令用于返回主程序,而汇编程序在汇编时并不检测__返回_指令是否存在。 15. 在主程序中,采用“JMP subName” 指令可以__转到_ 子程序subName, 但子程序结束后 返回地址不确定 。 5.5.简答题 1. 是什么特点决定了目标地址的相对寻址方式应用最多? 答:当同一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,目标地址采用相对寻址可方便操作系统的灵活调度。 2. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sign与sinteger均为双字变量。 3. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中ch1与caps均为字节变量。 4. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sum与i变量均为双字变量。 5. 在N分支结构中,至少要使用N—1条 JMP指令,它的作用是什么? 答:等同于switch语句中的break用来跳到分支出口。 6. 不使用CALL指令是否可以实现子程序的调用?若可以,举例说明。 答:可以实现,通过栈来实现。将子程序入口地址压栈通过EBP+4来修改PC值来返回原程序,也就实现子程序的调用。 7. 写出3条以上的可以改变程序执行流程的指令,并简述其用途。 答: JMP 无条件跳转 CALL 调用子程序 RET 返回到调用函数或操作系统 INT 中断指令 8. 在子程序中,可否改变子程序的返回地址?若可以,则举例说明。 答:可以改变,通过修改栈中的 EBP+4的内容。 9. 为什么特别强调为子程序加上必要的注释? 答:完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。 5.6.应用题 1. 能被4整除但不能被100整除,或者年被400整除的年份是闰年。编程写一个完整的程序,求出2012年~2099年中的所有闰年年份,并把它们存放在数组Lyear中。 ; Win32 Console Application ;能被4整除但不能被100整除,或者年被400整除的年份是闰年。 ;编程写一个完整的程序,求出2012年~2099年中的所有闰年年份, ;并把它们存放在数组Lyear中。 ; 目的:学习如何利用条件转移指令构造复杂逻辑运算结构。 ; 算法描述 ; esi=0闰年个数计数器;ecx=2012年份计数器; ; while (ecx<2100) ; { if (year mod 4=0 and year mod 100 <>0) or (year mod 400=0) then ; {Lyear[esi]=ecx;esi++;} ; ecx++; ; } ; Lcounter=esi; ; 采用div指令求余数来判断整除性,采用带比例因子的相对寻址处理数组。 include io32.inc .data Lyear dword 100 dup(?) Lcounter dword 0 .code main proc xor esi,esi ;esi闰年个数计数器,兼做Lyear下标。 mov ecx,2012 ;ecx年份计数器。 .while (ecx<2100) mov eax,ecx xor edx,edx mov ebx,400 div ebx cmp edx,0 jz leap ;if year mod 400=0 then goto leap mov eax,ecx xor edx,edx mov ebx,4 div ebx cmp edx,0 jnz next ;if year mod 4<>0 then goto next mov eax,ecx xor edx,edx mov ebx,100 div ebx cmp edx,0 jz next ;if year mod 100=0 then goto next leap: mov Lyear[esi*4],ecx inc esi mov eax,ecx call dispuid ;输出,用于验证。可以删掉 call dispcrlf ;输出,用于验证。可以删掉 next: inc ecx .endw mov Lcounter,esi mov eax,esi call dispuid ;输出,用于验证。可以删掉 call dispcrlf ;输出,用于验证。可以删掉 ret main endp ;end of main end main ;end of assembly 2. 编程写一个完整的程序,求出2~100之间的所有素数,并将它们存入Prime数组中,素数的个数存入变量Pcounter中。 ; Win32 Console Application ; 编程写一个完整的程序,求出2~100之间的所有素数, ;并将它们存入Prime数组中,素数的个数存入变量Pcounter中。 ; 目的:学习如何利用条件转移指令构造条件循环结构,多重循环的构造方法。 ; 算法描述 ; 0. Pcounter=0; ; 1. i=2 to 100 do ; 1.1 if i is prime number then Prime[Pcounter++]=i ; 细化 1.1 如下: ; 1.1 j=2 to i/2 do ; 1.1.1 if i mod j=0 then goto next i ; 1.1.2 Prime[Pcounter++]=i ; 合理分配寄存器,esi=0,esi素数个数计数器,兼做Prime下标; ; 采用带比例因子的相对寻址处理数组。 ; i=ebx,j=ecx,edxeax做被除数,ecx做除数。 include io32.inc .data Prime dword 100 dup(?) Pcounter dword ? .code main proc xor esi,esi ;esi素数个数计数器,兼做Prime下标。 mov ebx,2 iLoop: cmp ebx,100 ;i循环入口 ja done mov ecx,ebx shr ecx,1 ;j=i/2 jLoop: cmp ecx,2 ;j循环入口 jb prime mov eax,ebx cdq ;xor edx,edx div ecx ;被除数送edxeax,32位除法 or edx,edx ;cmp edx,0 jz nexti ;if i mod j=0 then goto next i dec ecx jmp jLoop prime: mov Prime[esi*4],ebx inc esi mov eax,ebx call dispuid ;输出,用于验证。可以删掉 call dispcrlf ;输出,用于验证。可以删掉 nexti: inc ebx ;i=i+1 jmp iLoop done: mov Pcounter,esi ret ;返回操作系统 main endp ;end of main end main ;end of assembly 3. 编程写一个完整的程序,将数组aray中的元素按逆序存放,要求程序中附加的变量最少。数据段的定义如下: .data aray dword 12,4, 168,122,-33,56,78,99,345, 66,-5 ; 逆置一个一维数组 ; 算法描述: ; left,right分别指向数组的第一个和最后一个元素,采用首尾交换。 ; 1. left=0,right=n-1 ; ; 2. while lefta[i] then min=a[i] ; 合理分配寄存器:采用loop循环,ecx=lengthof array -1 ; max=eax=a[0],min=ebx=a[0]; ; esi=1,做下标,采用带比例因子的相对寻址处理数组。 .686 .model flat,stdcall option casemap:none includelib msvcrt.lib printf PROTO C : dword,:vararg .data array dword 12,4,-168,122,33,56,78,99,345,-66,-5 max dword ? min dword ? fmtStr byte ' max=%d min=%d',13,10,0 ;格式描述串 .code main proc mov ecx,lengthof array -1 mov eax,array[0] ;eax:max mov ebx,eax ;ebx:min mov esi,1 ;数组下标 again: cmp eax,array[esi*4] jge small ;if max= small: cmp ebx,array[esi*4] jle next mov ebx,array[esi*4] next: inc esi loop again mov max,eax mov min,ebx invoke printf,offset fmtStr,eax,ebx ret ;return to Windows main endp ;end of main end main ;end of assembly 5. 编程写一个完整的程序统计msg中的空格的个数与小写字母的个数,并分别将它们存入space单元与char单元中。数据段的定义如下: .data msg byte 'I love XUT !',13,10,0 space dword ? lowercase dword ? ; Win32 Console Application ; 统计msg串中的空格的个数与小写字母的个数, ; 并分别将它们存入space单元与lowercase单元中。 ; 目的:学习简单的关于分支与数组处理的算法。 ; 学习 if ('a'<= a[i])&&(a[i]<='z') lowercase++;中 ; 逻辑与表达式在汇编语言中的实现。 ; 算法描述 ; 1. space=lowercase=0; ; 2. for i=0 to n-1 do ; 2.1 if a[i]==' ' then space++; ; 2.2 if 'a'<= a[i] <='z' then lowercase++; ; 合理分配寄存器:采用loop循环,ecx=lengthof msg-1 ; space=eax=0,lowercase=ebx=0,esi=offset msg,做指针 .686 .model flat,stdcall option casemap:none includelib msvcrt.lib printf PROTO C : dword,:vararg .data msg byte 'I love XUT !',13,10,0 space dword ? lowercase dword ? fmtStr byte ' space=%d lowercase=%d',13,10,0 ;格式描述串 .code main proc mov ecx,lengthof msg-1 xor eax,eax ;space=eax=0 mov ebx,eax ;lowercase=ebx=0 mov esi,offset msg ;指向msg首地址 again: mov dl,[esi] cmp dl,' ' jnz letter ;if a[i]==' ' then space++; inc eax ;注意:转换成汇编语言时,测试的是不是空格时则转去测试字母。 letter: cmp dl,'a' jb next ;注意:测试的是a[i]<'a'。 cmp dl,'z' ja next ;注意:测试的是a[i]>'z'。 inc ebx ;lowercase++ next: inc esi ;指向下一个字符 loop again mov space,eax mov lowercase,ebx invoke printf,offset fmtStr,eax,ebx ret ;return to Windows main endp ;end of main end main ;end of assembly 6. 编程写一个完整的程序,将字符串msg中所有的小写字母转换为大写字母。数据段的定义如下: .data msg byte 'I love XUT !',13,10,0 ; Win32 Console Application ; 将字符串msg中所有的小写字母转换为大写字母 ; 目的:学习简单的关于分支与数组处理的算法。 ; 学习 if ('a'<= a[i])&&(a[i]<='z') a[i]=a[i]-0x20;中 ; 逻辑与表达式在汇编语言中的实现。 ; 算法描述 ; 1. for i=0 to n-1 do ; if 'a'<= a[i] <='z' then a[i]=a[i]-20H; ; 小写字母与大写字母的ASCII码的差值为20H, 也可以用 ; a[i]=a[i]&0x5f ; 合理分配寄存器:采用loop循环,ecx=lengthof msg-1 ; esi=offset msg,做指针。 .686 .model flat,stdcall option casemap:none includelib msvcrt.lib printf PROTO C : dword,:vararg .data msg byte 'I love XUT !',13,10,0 fmtStr byte 'msg: %s',13,10,0 ;格式描述串 .code main proc mov ecx,lengthof msg-1 mov esi,offset msg ; 指向msg首地址 again: mov dl,[esi] cmp dl,'a' jb next ; 注意:测试的是a[i]<'a'。 cmp dl,'z' ja next ; 注意:测试的是a[i]>'z'。 sub dl,20h ; and dl,5fh mov [esi],dl next: inc esi ; 指向下一个字符 loop again invoke printf,offset fmtStr,offset msg ret ;return to Windows main endp ;end of main end main ;end of assembly 7. array是一无符号数数组,数据段的定义如下。要求:编程写一个完整的程序求出数组元素中偶数的和,并将它存入esum单元中。 .data array dword 12,34,123,78,43,234,79,86,98,20 esum dword ? ; Win32 Console Application ; 求数组中所有偶数元素的和。 ; 目的:学习简单的关于分支与数组处理的算法。 ; 算法描述 ; 1. esum=0; ; 2. for i=0 to n-1 do ; if a[i] is evennunber then esum=esum+a[i]; ; 判断偶数,采用 test 指令测试最低位。 ; 合理分配寄存器:采用loop循环,ecx=lengthof array ; esum=eax=0,esi=0,做下标,采用带比例因子的相对寻址处理数组。 .686 .model flat,stdcall option casemap:none includelib msvcrt.lib printf PROTO C : dword,:vararg .data array dword 12,34,123,78,43,234,79,86,98,20 esum dword ? fmtStr byte ' esum=%d',13,10,0 ;格式描述串 .code main proc mov ecx,lengthof array xor eax,eax ;esum=eax=0 mov esi,eax ;数组下标 again: mov ebx,array[esi*4] test ebx,1 jnz next ;if a[i] is evennunber then esum=esum+a[i]; add eax,ebx ;注意:转换成汇编语言时,测试的是不是偶数时则取下一个数测试。 next: inc esi loop again mov esum,eax invoke printf,offset fmtStr,esum ret ;return to Windows main endp ;end of main end main ;end of assembly 8. “回文串”是一个正读和反读都一样的字符串,比如“eye”、“level”、“noon”等。请写一个程序测试一字符串是否是“回文”, 是“回文”则显示“Y”,否则显示“N”。 显示一个字符的子程序为:dispc,入口参数:AL=要显示个字符的SACII码。 ; Win32 Console Application palindrome ; 测试一字符串是否是“回文”, 是“回文”则显示“Y”,否则显示“N”。 ; 算法描述: ; left,right分别指向串的第一个和最后一个元素,采用首尾比较。 ; 1. left=0,right=n-1 ,flag='Y' ; ; 2. while lefta[right--] then ; { flag= 'N'; break;} ; 3. printf flag ; 合理分配寄存器:left=esi,right=edi ,flag=al='Y' ; 采用相对寻址处理数组。 include io32.inc .data msg byte 'level',0 count equ lengthof msg .code main proc mov esi,0 ;left指针 mov edi,count-2 ;right指针,串长不包括结束标志0 mov al,'Y' ; flag=al='Y' .while (esi0 do ; 1.2.1 edx=0;div ebx;esi=esi*10+edx ; 1.3 if ecx=esi then print esi include io32.inc .code main proc mov ecx,10 mov ebx,ecx ;ebx=10除数 .repeat xor esi,esi ;esi=0,是新生成的数的初值 mov eax,ecx ;eax被除数 .while (eax!=0) xor edx,edx ;edx被除数的高32位 div ebx imul esi,10 add esi,edx ;逆序生成新数,esi=esi*10+edx .endw cmp esi,ecx jne next mov eax,ecx call dispuid call dispcrlf next: inc ecx .until (ecx>10000) ret ;return to Windows main endp ;end of main end main ;end of assembly 10. 编程写一个名为Prime的子程序,用于测试一个整数是否是素数,主子程序间的参数传递通过堆栈完成。调用Prime子程序求出2~100之间的所有素数,并将它们存入Parray数组中,素数的个数存入变量Pcounter中。 ; Win32 Console Application ; 利用子程序求2~100之间的所有素数。 ; 目的:学习子程序的构造与参数的传递方法。 include io32.inc .data Prime dword 100 dup(?) Pcounter dword ? flag byte ? .code main proc xor esi,esi ;esi素数个数计数器,兼做Prime下标。 mov ecx,2 ;循环控制变量 .while (ecx<=100) push offset flag ;flag的地址进栈,传地址 push ecx ;ecx进栈,传值 call prime cmp flag,1 jne next mov Prime[esi*4],ecx inc esi mov eax,ecx call dispuid ;输出,用于验证。可以删掉 call dispcrlf ;输出,用于验证。可以删掉 next: inc ecx .endw mov Pcounter,esi ret ;return to Windows main endp ;end of main prime proc ; function: 判断一个无符号整数x是否是素数 ; Receives: 从栈获取无符号整数x及标志变量flag的地址 ; Returns: if x is prime number then flag=1 else flag=0 ; 注意:[ebp+8]是最后一个压入栈中的参数! ; 以[ebp+8]为基准,从栈中获取其它的参数。 ; 算法描述: ; 1.flag=1; ; 2. for i=x/2 downto 2 do ; if x mod i=0 then {flag=0;break;} ; 注意合理的分配使用寄存器,ecx=i,兼做除数。 ; edx,eax做被除数,ebx=flag的地址,edi=x,用于暂存x push ebp mov ebp,esp ; 建立访问栈参数的指针基准 push eax ; 保护子程序中要使用的寄存器 push ebx push ecx push edx push edi mov ebx,[ebp+12] ;变量flag的地址 mov byte ptr [ebx],1 ;flag=1 mov eax,[ebp+8] ;eax=x mov edi,eax ;edi=x,用于暂存x mov ecx,eax shr ecx,1 ;ecx=x/2 .while (ecx>=2) mov eax,edi ;eax=x,注意:此句极易漏掉!导致逻辑错误。 xor edx,edx ;被除数送edx,eax,32位除法 div ecx ;div指令执行后eax=商,edx=余数 or edx,edx ;cmp edx,0 jnz next ;if eax mod ecx<>0 then goto next mov byte ptr [ebx],0 ;flag=0 jmp restore next: dec ecx .endw restore: pop edi ; 恢复子程序中使用过的寄存器 pop edx pop ecx pop ebx pop eax pop ebp ret 2*4 ;清理栈中的参数 prime endp end main ;end of assembly 11. 编程写一个名为Gcd的求两个数最大公约数子程序,主子程序间的参数传递通过堆栈完成。调用Gcd子程序求出三个双自变量:dvar1、dvar2与dvar3的最大公约数并输出。显示一个无符号数的子程序为:dispuid,入口参数:EAX=要显示无符号数的值。 ; Win32 Console Application ; 利用子程序求3个无符号整数的最大公约数。 ; 目的:学习子程序的构造与参数的传递方法。 .686 .model flat,stdcall option casemap:none includelib msvcrt.lib printf PROTO C : dword,:vararg .data dvar1 dword 2012 dvar2 dword 128 dvar3 dword 456 dgcd dword ? ;存放2个无符号整数的最大公约数 fmtStr byte ' gcd(%d,%d,%d)=%d',13,10,0 .code main proc push dvar1 push dvar2 ;参数dvar1,dvar2进栈,传值 push offset dgcd ;dgcd的地址进栈,传地址 call Gcd ;dgcd=dvar1,dvar2的最大公约数 push dvar3 push dgcd ;参数dvar3,dgcd进栈,传值 push offset dgcd ;dgcd的地址进栈,传地址 call Gcd invoke printf,offset fmtStr,dvar1,dvar2,dvar3,dgcd ret ;return to Windows main endp ;end of main Gcd proc ; function: 求2个无符号整数的最大公约数。 ; Receives: 从栈中获取无符号整数a,b及 ; 存放最大公约数变量gcd的地址 ; Returns: gcd=无符号整数a,b的最大公约数。 ; 注意:[ebp+8]是最后一个压入栈中的参数! ; 以[ebp+8]为基准,从栈中获取其它的参数。 ; 算法思想:采用欧几里得算法。gcd(a,0)=a; ; gcd(a,b)=gcd(b,a mod b) ; 算法描述: ; 1. while b<>0 do ; { r=a mod b;a=b;b=r;} ; 2. gcd=a; ; 注意合理的分配使用寄存器,edx,eax做被除数 ; ebx=gcd的地址,eax=a,ecx=b push ebp mov ebp,esp ; 建立访问栈参数的指针基准 push eax ; 保护子程序中要使用的寄存器 push ebx push ecx push edx mov ebx,[ebp+8] ;ebx=变量gcd的地址 mov ecx,[ebp+12] ;ecx=b mov eax,[ebp+16] ;eax=a .while (ecx!=0) xor edx,edx ;被除数送edx,eax,32位除法 div ecx ;div指令执行后eax=商,edx=余数 mov eax,ecx ;a=b mov ecx,edx ;b=r,edx=余数 .endw mov [ebx],eax ;gcd=最大公约数 restore: pop edx ; 恢复子程序中使用过的寄存器 pop ecx pop ebx pop eax pop ebp ret 3*4 ;清理栈中的参数 Gcd endp ;end of Gcd end main ;end of assembly 12. 在一个已知长度的字符串中查找是否包含“BUG”子字符串。如果存在,显示“Y”,否 则显示“N”。 显示一个字符的子程序为:dispc,入口参数:AL=要显示个字符的SACII码。 ; Win32 Console Application ; 串模式匹配算法,求子串在源串中第一次出现的起始位置。 ; 若子串在源串中出现则显示“Y”,否则显示“N”。 ; 算法思想:采用人工串匹配的方法,就是从左向右扫描, ; 当源串没有结束时,从源串的第i个字符开始与子串进行比较, ; 若相等,则继续比较后续字符,否则从源串的第i+1 ; 个字符开始重新与字串进行比较。这种算法的效率非常低, ; 一种朴素串模式匹配算法改进的算法称为KMP算法。 ; 算法描述: ; 1. i=j=0; 数组下标从0开始,sStr为源串,tStr为子串 ; 2. while (i=0) do ; if sStr[scanP]==' ' then ; for moveP=scanP+1 to tailP do ; sStr[moveP-1]=sStr[moveP]; ; tailP--; ; else ; scanP++; ; 3. print sStr; ; 合理分配寄存器:tailP=edi,scanP=esi ,moveP=ebx ; 采用相对寻址处理数组。 ; Q:若将此算法改为子程序,如何修改? Include io32.inc .data sStr byte ' I Love XAUT ! ',0dh,0ah,0 .code main proc lea eax,sStr ; 显示处理前的字符串 call dispmsg mov edi,lengthof sStr-2 ;尾指针tailP mov esi,edi ;从右向左扫描工作指针scanP .while sdword ptr esi>=0 ;sdword ptr esi指示将esi按有符号数处理 cmp sStr[esi],20h ; 检测是否是空格 jnz next lea ebx,[esi+1] ;移动字符工作指针moveP=scanP+1 .while ebx<=edi ;循环移动开始 mov al,sStr[ebx] mov sStr[ebx-1],al ;字符向前移一个位置 inc ebx .endw dec edi ;尾指针tailP向前移一个位置 next:dec esi ;向左扫描工作指针scanP向前移一个位置 .endw mov byte ptr sStr[edi+1],0 ;串结束标志 lea eax,sStr ;显示处理后的字符串 call dispmsg ret ;return to Windows main endp ;end of main end main ;end of assembly 14. 编写一子程序,将一个32位二进制数用8位十六进制形式在屏幕上显示出来。采用堆栈方法传递这个32位二进制数,并写主程序验证它。显示一个字符的子程序为:dispc,入口参数:AL=要显示个字符的SACII码。 ; Win32 Console Application ; 将一个32位二进制数转换为8位十六进制, ; 并在屏幕上显示出来的子程序。 ; 目的:学习子程序的构造与参数的传递方法。 include io32.inc .data dvar dword 1234abc8h ;table byte '0123456789abcdef' ;采用查表法进行转换 .code main proc push dvar ;堆栈传递参数 call btoh ret ;return to Windows main endp ;end of main btoh proc ; function: 将一个32位二进制数转换为8位十六进制, ; 并在屏幕上显示出来。 ; Receives: 堆栈中获取要转换为十六进制的32位数 ; Returns: 无。 ; 算法思想:采用循环左移,一次移动4位。 ; 利用最低4位的值查表,转换为十六进制的数ASCII码。 ; 算法描述: ; 1. ecx=8; ; 2. while ecx>0 ; { ror eax,4; ; ebx=eax; ; eax=eax and 0fh; ; al=table[eax]; ; print al; ; eax=ebx; ; ecx--;} push ebp mov ebp,esp ; 建立访问栈参数的指针基准 push ebx ; 保护子程序中要使用的寄存器 push ecx mov ecx,8 mov eax,[ebp+8] again: rol eax,4 ;eax的最高的4位移动到最低的4位 mov ebx,eax and eax,0fh ;保留eax的最低的4位 mov al,table[eax] call dispc mov eax,ebx loop again call dispcrlf restore: pop ecx ; 恢复子程序中使用过的寄存器 pop ebx pop ebp ret 1*4 table byte '0123456789abcdef' ;采用查表法进行转换 btoh endp ;end of Bubble end main ;end of assembly 15. 编程写一个名为Bubble的冒泡排序子程序,主子程序间的参数传递通过堆栈完成;并写主程序验证它。显示一个无符号数的子程序为:dispuid,入口参数:EAX=要显示无符号数的值。 ; Win32 Console Application ; 冒泡排序子程序。 ; 目的:学习子程序的构造与参数的传递方法。 include io32.inc .data array dword 12,4,168,122,-33,56,78,99,345,66,-5 count equ lengthof array .code main proc push offset array ;array的首地址进栈,传地址 push count ;数组元素的个数进栈,传值 call Bubble xor esi,esi ;以下的while循环用于验证。可以删掉 .while (esi0 ; { esi=array;数组的首地址 ; ebx=ecx; ; while ebx>0 ; { if [esi]>[esi+4] then ; swap [esi],[esi+4] ; ; esi=esi+4;ebx--; ; } ; ecx--;} ; push ebp mov ebp,esp ; 建立访问栈参数的指针基准 push eax ; 保护子程序中要使用的寄存器 push ebx push ecx push esi push edi mov esi,[ebp+12] ;array的首地址 mov edi,esi mov ecx,[ebp+8] ;数组元素的个数 dec ecx again: mov esi,edi ;esi=array的首地址 mov ebx,ecx .while (ebx>0) mov eax,[esi] cmp eax,[esi+4] ; 比较两个相邻的元素 jl next xchg eax,[esi+4] mov [esi],eax ; 交换两个相邻的元素 next: add esi,4 ; esi指向下一个元素 dec ebx .endw loop again restore: pop edi ; 恢复子程序中使用过的寄存器 pop esi pop ecx pop ebx pop eax pop ebp ret 2*4 ;清理栈中的参数 Bubble endp ;end of Bubble end main ;end of assembly 第6章  微机总线 6.1.选择 1. 地址总线为20位的微处理器可直接寻址的最大范围是( )。 A 1MB B 16MB C 64MB D 4GB 2. 8086的INTR信号线表示( ) A 可屏蔽中断响应 B 不可屏蔽中断 C 可屏蔽中断 D不可屏蔽中断响应 3. 当控制线READY=0时,应在( )之间插入等待周期Tw A T1和T2之间 B T2和T3之间 C T3和T4之间 D 任何时候 4. 8086的NMI信号线表示( ) A 可屏蔽中断响应 B 不可屏蔽中断 C 可屏蔽中断 D不可屏蔽中断响应 5. 8086的READY信号线表示( ) A 就绪 B 复位 C 时钟 D 测试 6. 8086的HOLD信号线表示( ) A 总线请求 B 总线响应 C 中断请求 D 中断响应 7. 8086的写总线周期在T1状态( ) A 完成数据传送 B 输出地址 C 输出控制信号 D 检测数据传送 8. 8086的写总线周期在T2状态( ) A 完成数据传送 B 输出地址 C 输出控制信号 D检测数据传送 9. 8086的写总线周期在T3状态( ) A 完成数据传送 B 输出地址 C 输出控制信号 D 检测数据传送 10. 8086的写总线周期在T4状态( ) A 完成数据传送 B 输出地址 C 输出控制信号 D 检测数据传送 11. MB/s的含义是 ( ) A 总线上每秒传输的最大数据量 B 总线上每秒传输的最大字节量 C 总线上每秒传输的二进制位数 D 总线上每秒传输的十进制位数 12. 总线上每秒传输的最大字节量称为 ( )。 A 总线位宽 B 总线字宽 C 总线带宽 D 数据位数 13. 串行通信适用于微机间 ( )的数据传送。 A 不同类型 B 同类型 C 近距离 D 远距离 14. 并行通信适用于微机间 ( )的数据传送。 A 不同类型 B 同类型 C 近距离 D 远距离 15. USB是一种 ( ) A 通用的串行总线接口 B 通用的并行总线接口 C 新型的微机内部总线 D 新外设标准插头 6.2.名词解释 1. 芯片总线:大规模集成电路芯片内部或系统中各种不同器件连接在一起的总线. 2. 内总线:微机系统中功能单元与功能单元间连接的总线. 3. 外总线:微机系统与其外设或微机系统之间连接的总线 4. 总线仲裁:确定使用总线的主模块,目的是避免多个主模块同时使用时占用总线, 确保任何时候总线上只有一个模块发送信息. 5. 总线带宽:单位时间传送的数据量,也成总线 6. 总线时序:描述总线信号随时间变化的规律以及总线信号的相互作用. 7. 指令周期:一条指令在处理器中从取指、译码到最终执行完成的过程 8. 总线周期:一个总线周期由一个地址期和一个或多个数据期组成,伴随着数据交换的总线操作。 9. 机器周期:即cpu周期,通常用内存中读取一个指令字的最短时间来规定cpu周期。 10. 时钟周期:每个时钟脉冲的持续时间。 11. 存储器读:处理器从存储器读取代码或操作数。 12. 存储器写:处理器向存储器写入操作数。 13. I/O读:存储器从外设读操作数 14. I/O写:存储器向外设写操作数 15. ALE:地质所存允许,是一种三态输出高电平有效的信号 6.3.判断 1. 低电平有效是指信号为低电平时候表示信号的功能。T 2. 处理器读取存储器操作数时和读取代码时,都发生存储器读的总线操作。T 3. 8086准备好READY引脚输出给存储器或外设有效信号,表明处理器准备好交换数据了。F 4. 8086总线周期的T1状态发出地址,属于总线操作的寻址阶段。T 5. 总线操作的同步时序是指总线操作的各个过程由共用的总线时钟信号控制。T 6. 总线操作的半同步时序是指总线操作仍由共用的总线时钟信号控制,但慢速模块可以通 过等待信号让快速模块等待。T 7. 总线操作的异步时序是指总线操作需要握手(Handshake)联络(应答)信号控制, 总线时钟信号可有可无。T 8. 能够控制总线传输信息的设备称为从设备。F 9. 处理器引脚是典型的芯片总线。T 10. 现代微型计算机采用分级总线结构,以适应不同部件的要求。T 11. 高性能总线都支持数据块传送,即猝发传送。T 12. 某一时刻可以有多个主模块控制总线。F 13. 总线类似于一个“公路网”,通过不同的总线把系统内的各个模块连接起来。T 14. 总线信号并不是各自独立发挥作用,而是相互配合实现总线操作。T 15. 处理器通过引脚对外操作主要有存储器读,存储器写,I/O读,I/O写四种操作。T 6.4.填空 1. 某个处理器具有16个地址总线,通常可以用A 0 表达最低位地址信号,用A 15 表达最高地址信号。 2. 8086有3个最基本的读写控制信号,它们是M/IO、 /WR 和 /RD 。 3. 8086执行指令“MOV AX, [BX]”时,在其引脚上将产生 存储器读 总线操作;执行指令“MOV [BX], AX”时,在其引脚上将产生 存储器写 总线操作。 4. 8086无等待的总线周期由 4 个T状态组成,Pentium无等待的总线周期由 2 个T状态组成。 5. 占用总线进行数据传输,一般需要经过总线请求和仲裁、 寻址 、数据传送 和结束4个阶段。 6. 总线按照信号分类可以分为数据总线, 地址总线 , 控制总线 。 7. 总线按照信号分类可以分为 数据总线 , 地址总线 ,控制总线。 8. 总线按照数据传输方式分为 并行总线 和 串行总线 。 9. 8086处理器的数据总线为16位,时钟频率为5MHz,那么实现一次16为数据传送的总线带宽是_。而对于系统时钟频率为66MHz的Pentium处理器来说,其2-1-1-1的猝发传送周期用5个时钟传送32个字节数据,则其总线带宽是 422.4MB/S 。 10. 通常情况下,我们用AB表示地址总线,那么 DB 表示数据总线, 用 CB _表示控制总线。 11. 位于集成电路内部的总线被称为 芯片 总线。用于同一块印刷电路板上的总线是 内 总线。 12. 总线仲裁的方法有用 集中仲裁 和 分布仲裁 。 13. 通常总线带宽与位宽成 正 比,如果总线的频率为88MHz,总线的位宽为8位,则总线的带宽应为_____528Mb/s____。 14. 外部总线也称为 通信 总线,其表现形式是位于微机后面板上的一些 _外部接口_。 15. IA32处理器进行串行传送时,需要 1 根传输线;并行传送时,每个数据位都需要 1 条单独的传输线。 6.5.简答题 1. 为什么称处理器的数据总线是双向的? 答:数据总线承担着处理器与存储器、外设之间的数据交换既可以输入也可以输出故其是双向的。 2. 8086的地址和数据总线为什么要分时复用? 答:为减少引脚个数,8086采用了地址总线和数据总线分时复用。即数据总线在不同时刻还具有地址总线的功能。 3. 具有三态能力的引脚输出高阻意味着什么? 答:相当于连接了一个阻抗很高的外部器件,信号无法正常输出;即放弃对该引脚的控制,与其它部件断开连接。 4. 总线周期中的等待状态是个什么工作状态? 答:处理器的运行速度远远快与存储器和I/O端口。处理器检测到存储器或I/O端口不能按基本的总线周期进行数据交换时,插入一个等待状态Tw。等待状态实际上是一个保持总线信号状态不变的时钟周期。 5. 猝发传送是一种什么传送? 答:处理器只提供首地址。但可以从后续连续的存储单元中读写多个数据。 6. 8086处理器的输入控制信号RESET,HOLD的含义各是什么?当它们有效时,8086 CPU将出现何种反应? 答:RESET:复位输入信号,高电平有效。该引脚有效时,将迫使处理器回到其初始状态;转为无效时,CPU重新开始工作。 HOLD:总线请求,是一个高电平有效的输入信号。该引脚有效时,表示其他总线主控设备向处理器申请使用原来由处理器控制的总线。 7. 8086处理器的输入控制信号NMI和INTR的含义各是什么?当它们有效时,8086 CPU将出现何种反应? 答:NMI:不可屏蔽中断请求,是一个利用上升沿有效地输入信号。该引脚信号有效时,表示外界向处理器申请可屏蔽中断。 INMI:可屏蔽中断请求,是一个利用高电平有效的输入信号。该引脚信号有效时,表示中断请求设备向处理器申请可屏蔽中断。 8. 总线数据传输为什么要进行总线仲裁? 答:总线上可能连接多个需要控制总线的主设备,但任一时刻总线上只能有一个模块发送信息。总线仲裁可以确定使用总线的主模块,用以避免多个主模块同时占用总线。 第7章  存储系统 7.1.选择 1. 某处理器设计只支持7KB主存,则内存地址需( )位就足够了。 A 12 B 13 C 14 D 15 2. 需要定时刷新的存储器是( ) A.SRAM B.DRAM C.EPROM D.E2PROM 3. 下列只读存储器中,可紫外线擦除数据的是( ) A.PROM B.EPROM C.Flash Memory D.E2PROM 4. 可编程ROM可简记为( )。 A.PROM B.MROM C.EPROM D.E2PROM 5. 优盘是一种电可擦除.可重写的 ( ) 的存储器。 A.非易失性 B.易失性 C.只读性 D.磁介质性 6. 存储器芯片位数不足时,需用( ) 。 A.字扩展 B.位扩展 C.字位扩展 D.以上均可 7. 64K*1位的DRAM芯片通常有( ) 地址线引脚 A.16 B.8 C.1 D.4 8. 某微机系统的存储器容量为256K字节,若采用单片容量为16K*8位的SRAM芯片,则组成该存储系统共需( )个该类芯片 A.16 B.8 C.1 D.4 9. 64K*1位的EPROM芯片通常有( ) 地址线引脚 A.16 B.8 C.1 D.4 10. 某微机系统的存储器容量为256K字节,若采用单片容量为16K*1位的SRAM芯片,则组成该存储系统共需( )个该类芯片 A.16 B.128 C.64 D.8 11. 8086CPU有20条地址线,可寻址空间为( )。 A.640kB B.64kB C.1MB D.16MB 12. 80286有24条地址线,可寻址空间为( )。 A.640kB B.64kB C.1MB D.16MB 13. PC系列微机可寻址的I/O空间是( ) 。 A.1k B.32k C.64k D.1M 14. 一般PC系列微机I/O寻址只用10根地址线,可寻址( )个。 A.1k B.32k C.64k D.1M 15. 下列只读存储器中,仅能一次写入数据的是( )。 A.PROM B.EPROM C.Flash Memory D.E2PROM 7.2.名词解释 1. RAM: 随机存储器,只要给出存取位置就可以读写内容,存取时间与所处位置无关。 2. ROM: 只读存储器,只能读出其中的数据,但数据可以长期保存断电不丢失。 3. SRAM: 静态RAM,SRAM芯片以触发器为基本存储单元用其两种稳定状态表示逻辑0和 逻辑1。SRAM不需要额外的刷新电路只要不掉电,信息就不会消失。 4. FLASH ROM: 是一种新型的电可擦除可编程ROM芯片,能够很快擦除整个芯片内容,中文简称“闪存”。 5. NVRAM: 非易失RAM,NVRAM多指带有后备电池的SRAM芯片。这种芯片采用CMOS制造工艺设计以减少用电,其背部有锂电池,断电后电池维持供电,即使长期不用,所存信息也能维持若干年。 6. 完全译码: 使用全部处理器的地址总线,称之为完全译码。完全译码的特点是地址唯一:一个存储单元只对应一个存储地址,组成的存储系统的地址空间连续。 7. 部分译码: 只使用部分系统地址总线进行译码。没有被使用的地址信号对存储器芯片不产生影响,有一个不使用的地址信号就对应有两个编码,这两个编码实际上指向同一个存储单元,这就出现了地址重复:一个存储单元对应多个存储地址,浪费了存储空间。 8. 系统RAM区: 该去占用地址最低端的640KB空间(00000H-9FFFFH)由dos进行管理。 9. 存储容量: 微机系统存储容量,以字节B为基本单位,半导体芯片以位b为基本单位,表达存储容量。 10. 存取速度: 即存储时间,指从读写命令发出到数据传输操作完成经历的时间。 11. 空间局部: 即紧邻被访单元的地方也将被访问。 12. 时间局部: 刚被访问的单元很快将再次被访问。 13. 辅助存储器: 通过磁记录或光记录方式,以磁盘或光盘形势存放可读可写式制度内容。 14. 地址译码: 将某个特定的编码输入翻译为有效输出的过程。 15. 虚拟存储器: 利用读写辅助存储器,操作系统可以在主存储器与辅助存储器之间以磁盘文件形式建立虚拟存储器。 7,3.判断 1. 存储系统的高速缓存需要操作系统的配合才能提高主存访问速度。F 2. 存储器芯片的集成度高表示单位芯片面积制作的存储单元数多。T 3. 微机大容量主存一般采用DRAM芯片组成。T 4. 部分译码可以简化译码电路,不会减少可用的存储空间。F 5. 存储系统每次给DRAM芯片提供刷新地址,被选中的芯片上所有单元都刷新一遍。F 6. 存储系统的刷新地址提供给所有DRAM芯片。T 7. ROM芯片的烧写或擦写就是指对ROM芯片的编程。T 8. 存储器译码时采用全地址译码会浪费地址空间。F 9. 存储器的主要性能指标是存储容量和存储空间。F 10. 存储访问的局部特性保证了层次化存储系统具有优秀的性能。T 11. 存储访问的局部性原理只是指空间局部。F 12. PC机主要采用光盘作为辅助存储器。F 13. 按制造工艺,半导体存储器可分为“双极型”器件和“MOS型”器件。T 14. 芯片的存储容量有存数单元数和每个存储单元的数据位数决定。T 15. 高性能处理器必须配合快速主存储器才能真正发挥作用。T 7.4.填空 1. 计算机存储容量的基本单位:1 B(Byte)= 8 b(bits),1TB= 210 GB。 2. 在半导体存储器中,RAM指的是随机存取存储器 ,可读可写,但断电后信息一般会丢失。 3. 在半导体存储器中ROM指的是 只读存储器 ,正常工作时只能从中 读取 信息。 4. 存储结构为8K×8位的EPROM芯片2764,共有 13 个地址引脚,用其组成64KB的ROM存储区共需 8 片芯片。 5. 对一个存储器芯片进行片选译码时,有一个高位系统地址信号没有参加译码,则该芯片 的每个存储单元占有 2 个存储器地址。假设地址总线A19~A15输出01011时译码电路产生一个有效的片选信号,这个片选信号共有 32K 容量。 6. 半导体 EPROM 芯片顶部开有一个圆形石英窗口。 通常U盘、MP3播放器、数码相机、多媒体手机等设备采用半导体 Flash ROM 芯片构成存储器。 7. SIMM是一种 单列存储器模块 内存条,而 DIMM是一种 双列直插式存储模块 内存条。 8. 每个存储单元被赋予一个唯一的编号,称为 全地址 ,一个存储单元可以存储 1、4、8、16、32 位二进制信息。 9. 存储器扩展有两种方法,分别是 字 扩展和 位 扩展。 10. 用2k×8位的存储芯片,组成16k×8位的存储器,需用 8 片,组成24k×1位的存储器,需用 12 片。 11. 8086的存储器分为 偶 存储体和 奇 存储体。 12. 衡量存储器的技术指标主要有 容量 , 速度 和 成本 。 13. 衡量存储器的技术指标主要有 存储容量 , 存储速度 和 成本价格 。 14. 以8086为CPU的微型计算机内存RAM区为00000H~3FFFFH,若采用8K*8的6264构成,需要__64__片芯片,若采用256K*1的21256构成,需要 16 _片芯片。 15. 计算机需要主存储器存放当前运行的 程序 和 数据 。 7.5.简答题 1. 存储器的存取时间和存取周期有什么区别? 答:存取时间是指从读/写命令发出,导数据传输操作完成所经历的时间;存取周期表示两次存储器访问所允许的最小时间间隔。存取周期大于等于存取时间。 2. 地址重复是怎么回事? 答:译码电路中只有部分地址线参与译码会造成地址重复,也就是一个存储单元占有多个存储器地址。 3. 简述存储系统的层次结构及各层存储部件特点。 答:为解决容量、速度和价格的矛盾,存储系统采用金字塔型层次结构,单位价格和速度自上而下逐层减少,容量自上而下逐层增加。 存储系统的各层存储部件自上而下依次是:CPU寄存器.高速缓存.主存存储器(RAM/ROM),辅助存储器如磁盘.光盘等。CPU寄存器.高速缓存器集成在CPU芯片上,对用户来说,是透明的,它们用于暂存主存和处理器交互的数据,以减少频繁读取主存而影响处理器速度;主存储器则可和处理器直接交换数据,而辅助存储器必须经过主存存储器,才可与处理器进行数据交换。 4. DRAM为什么要刷新? 答:DRAM以单个MOS管为基本存储单元,以极间电容充放电表示两种逻辑状态。由于极间电容的容量很小,充电电荷自然泄漏会很快导致信息丢失,所以要不断对它进行刷新操作.即读取原内容.放大再写入。 5. 存储系统如何进行刷新? 答:存储系统的刷新控制电路提供刷新行地址,将存储DRAM芯片中的某一行选中刷新。实际上,刷新控制电路是将刷新行地址同时送达存储系统中所有DRAM芯片,所有DRAM芯片都在同时进行一行的刷新操作。刷新控制电路设置每次行地址增量,并在一定时间间隔内启动一次刷新操作,就能够保证所有DRAM芯片的所有存储单元得到及时刷新。 6. 请给出下图中138译码器的所有译码输出引脚对应的地址范围。 答:由于20根地址线全部参与译码,因此输出引脚地址范围如表所示: 7. 写出下图中138译码器指定引脚译码输出的地址范围。 答:由于A18未使用,属于部分译码,因此有两个编码对应同一存储单元。假设A18=1,其输出地址范围如表所示: 同理 ,当A18=0时可得下表: 8. 利用全地址译码将6264芯片接在IA-32的系统总线上,其所占地址范围为0BE000H~0BFFFFH,画出连接电路图。 第八章 无条件与查询传送方式 8.1.选择 1. 8086CPU对I/O接口编址采用( )。 A.I/O端口和存储器统一编址 B.I/O端口和寄存器统一编址 C.I/O端口单独编址 D.输入和输出口分别编址 2. 当CPU访问外设接口时,需利用( )信号。 A. B. C. D. 3. 软中断INT n(n=10~FFH)的优先级排列原则是( )。 A.n值越小级别越高 B.无优先级别 C.n值越大级别越高 D.随应用而定 4. CPU在执行IN AL,DX指令时,DX的内容输出到( )。 A.地址总线 B.数据总线 C.存储器 D.寄存器 5. 数据传送方式中,除无条件传送外,( )方式也是外设被动进行数据交换 A.查询 B.中断 C.DMA D.以上皆是 6. 程序控制传送方式又分为无条件传送和( )传送方式。 A.有条件 B.中断 C.DMA D.查询 7. 采用查询传输方式的工作流程是按( )的次序完成一个数据的传输。 A 先写数据端口,再读/写控制端口 B 先读状态端口,再读/写数据端口 C 先写控制端口,再读/写数据端口 D 先读控制端口,再读/写状态端口 8. 按微机系统中与存储器的关系,I/O端口的编址方式分为( ) A 线性和非线性编址 B 集中与分散编址 C 统一和独立编址 D 重叠与非重叠编址 9. 从硬件的角度而言,采用硬件最少的数据传送方式是( ) A 无条件传送方式 B 查询传送方式 C 中断传送方式 D DMA传送方式 10. 状态寄存器用来保存( ) A 处理器和外设之间交换的数据 B 外设或其接口电路当前的工作状态信息 C 处理器控制接口电路和外设操作的有关信息 D 以上皆可 11. 数据寄存器用来保存( ) A 处理器和外设之间交换的数据 B 外设或其接口电路当前的工作状态信息 C 处理器控制接口电路和外设操作的有关信息 D 以上皆可 12. 控制寄存器用来保存( ) A 处理器和外设之间交换的数据 B 外设或其接口电路当前的工作状态信息 C 处理器控制接口电路和外设操作的有关信息 D 以上皆可 13. 由外设主动提出数据交换请求的数据传送方式是( ) A 无条件传送方式 B 查询传送方式 C 中断传送方式 D 以上皆是 14. 从硬件的角度而言,下列数据传送方式硬件最复杂的是( ) A 无条件传送方式 B 查询传送方式 C 中断传送方式 D 不确定 15. 利用DOS的09号系统功能输出一串字符串,需要先将该字符串在内存中的偏移地址放入( )。 A AX寄存器 B BX寄存器 C CX寄存器 D DX寄存器 8.2.名词解释 1. 数据寄存器:保存处理器与外设之间交换的数据。 2. 状态寄存器: 保存外设当前的工作转台信息,处理器通过该寄存器掌握外设状态,进行数据交换。 3.控制寄存器: 保存处理器控制接口电路和外设操作的有关信息。处理器向控制寄存器写入控制信息,选择接口电路的不同工作方式和与外设交换数据形式 4. 统一编址:将I/O端口与存储器地址统一编排,共享一个地址空间。 5. 独立编址:将I/O端口独立编排地址,独立于存储器地址。 6. 接口:位于基本系统和外设间实现两者数据交换的控制电路。 7. 并行数据传输:是在传输中有多个数据位同时在设备之间进行的传输 8. 串行数据传输:是在传输中只有1个数据位在设备之间进行的传输 8.3.判断 1. 处理器并不直接连接外设,而是通过I/O接口电路与外设连接。T 2. I/O接口的状态端口通常对应其状态寄存器。T 3. I/O接口的数据寄存器保存处理器与外设间交换的数据,起着数据缓冲的作用。T 4. IA-32处理器的64K个I/O地址也像存储器地址一样分段管理。F 5. 指令“OUT DX,AX”的两个操作数均采用寄存器寻址方式,一个来自处理器. 一个来自外设。F 6. 向某个I/O端口写入一个数据,一定可以从该I/O端口读回这个数据。F 7. 程序查询方式的一个主要缺点是需要处理器花费大量循环查询.检测时间。T 8. 16位DOS应用程序采用中断调用指令使用DOS系统功能。T 9. I/O接口电路的基本器件是实现数据缓冲的三态缓冲器和实现数据锁存的锁存器。T 10. 硬件电路决定了I/O端口的访问形式。T 11. 一个I/O地址只能被用作输入端口。F 12. 微机连接外部设备,一方面需要根据外设接口信号设计相应的硬件接口电路, 另一方面还需要配合软件管理程序。T 13. 02号DOS系统功能调用是,将在显示器输出一串字符串。F 14. 实现DOS系统功能调用需要先在AL寄存器中设置系统功能调用号。F 15. 相对查询传送来说,无条件传送工作可靠。F 8.4.填空 1. 计算机能够直接处理的信号是_数字量_,_开关量_和脉冲量形式。 2. 计算机能够直接处理的信号是数字量,开关量 和 脉冲量 形式。 3. 输入输出指令有两种寻址方式,其具体形式是:__直接寻址__和 DX寄存器间接寻址 。 4. 指令IN是将数据从I/O端口传输到 处理器 ,执行IN指令处理器引脚产生 I/O读 总线周期。 5. 指令“IN AL, 21H”的目的操作数是寄存器_寻址方式,源操作数是直接寻址方式。 6. 指令“OUT DX, EAX”的目的操作数是 直接 寻址方式,源操作数是寄存器寻址 寻址方式。 7. 在Intel 80x86系列处理器中,I/O端口的地址采用I/O独立_编址方式,访问I/O端口时要使用专门的 I/O 指令。 8. 接口的基本功能是输入 状态信息 ,输出 控制信息 。 9. 通过一个外设接口与外设之间交换的信息主要有数据信息 、 状态信息 和 控制信息 。 10. 程序控制的三种I/O传送方式是指无条件传送、 查询传送 和中断传送 。 11. 程序控制的三种I/O传送方式是指:无条件传送、 查询传送 和 中断传送 。 12. 通过一个外设接口与外设之间交换的信息主要有 数据信息 和 状态信息 、控制信息。 13. 借助于DOS系统功能,实现输入一个字符,则需要先执行指令mov ah, 1 ,再执行指令int al 。 14. 借助于DOS系统功能,实现输出一个字符“a”,则需要先执行指令mov ah,_2_;再执行指令mov dl ,‘a’。 15. I/O接口电路从应用角度可归结为数据寄存器, 状态寄存器 和 控制寄存器 3类可编程寄存器。 8.5.简答题 1. 为什么说外部中断才是真正意义上的中断? 答:外部中断是由处理器外部提出中断请求引起的程序中断。相对于处理器来说,外部中断是随机产生的,所以是真正意义上的中断。 2. 与系统总线连接的输出接口为什么需要锁存器? 答:将数据总线的数据暂时锁存,使较缓慢的设备有足够的时间进行处理。 3. 下图示例了无条件输入输出接口电路,编程实现当开关闭合时,相应的LED灯将点亮,并调用延时子程序DELAY保持一定时间(假设延时子程序DELAY已经编写,直接调用)。 8. 下图示例了无条件输入输出接口电路,编程实现让L7点亮(其它LED灯灭)一段时间后, L0点亮(其它LED灯灭),持续时间可调用延时子程序DELAY 。 第9章  中断与DMA传送方式 9.1.选择 1. 一个完整的中断过程包括中断请求、( )、中断服务和中断返回四个阶段。 A.中断处理 B.中断响应 C.保存断点 D.开中断 2. CPU每次可以响应( )个中断源的中断请求。 A.1 B.2 C.3 D.4 3. 8086系统中,中断优先级最低的是( )。 A.INT n B.NMI C.INTR D.单步中断 4. 8086CPU每响应一次中断,需连续执行( )个中断响应总线周期。 A.1 B.2 C.3 D.4 5. 两片8259芯片级连后,可以管理( )级中断。 A.15 B.16 C.64 D.32 6. CPU响应INTR引脚上来的中断请求的条件是( ) 。 A.IF=0 B.IF=1 C.TF=0 D.TF=1 7. 向量号为0的中断指( )中断 。 A.除法错 B.溢出异常 C.调试异常 D.断点异常 8. 向量号为4的中断指( )中断 。 A.除法错 B.溢出异常 C.调试异常 D.断点异常 9. CPU每次能响应( )个中断源的请求。 A.1 B.2 C.3 D.4 10. 中断返回的指令是( )。 A.RET B.IRET C.CALL D.INT 11. 8259是一个可编程的( ) 。 A.定时计数器 B.中断控制器 C.DMA控制器 D.并行接口 12. 8259芯片中,IRR是( )寄存器 A.中断屏蔽寄存器 B.中断请求寄存器 C.中断服务寄存器 D.以上皆不是 13. 一片8259可以管理 ( ) 级中断 A.2 B.4 C.8 D.16 14. 中断向量与中断类型码的关系是( ) 。 A.中断向量地址=中断类型码*8 B.中断向量地址=中断类型码*4 C.中断向量地址=中断类型码*2 D.中断向量地址=中断类型码*1 15. 中断触发的方式有电平触发和( ) 触发两种 A.电压触发 B.边沿触发 C.脉冲触发 D.以上皆不是 9.2.名词解释 1. 中断源:能引起中断的事件或原因。 2. 中断识别:处理器识别出当前究竟是哪个中断源提出了请求,并明确与之相应的中断服务程序所在的主存位置。 3. 中断优先权:为每个中断源分配一级中断优先权,即系统设计者事先为每个中断源确定处理器响应他们的先后顺序。 4. 中断嵌套:在一个中断处理过程中又有一个中断请求被响应处理 5. I/O敏感指令:对输入输出的指令IN,OUT,INS,OUTS,还有中断标志设置指令CLI,STI的执行涉及I/O端口,称之为I/O敏感指令。 6. 中断:处理器在执行程序时,被内部或外部的时间打断,转而执行一段预先安排好的终端服务程序;服务结束后,又返回原来的断点,继续执行原来的程序,这个过程叫中断。 7. DMA:其他控制器接管系统总线实现存储器与外设之间的数据直接传送。此方法称为直接存储器存取又称DMA。 8. 内中断:有处理及内部产生的中断事件称内部中断源,有内部中断源引起的中断称为内中断。 9.3.判断 1. 中断传送方式下,由硬件实现数据传送,不需要处理器执行IN或OUT指令。F 2. IA-32处理器保护方式用中断描述符表代替了实方式的中断向量表。T 3. 某个外设中断通过中断控制器IR引脚向处理器提出可屏蔽中断,只要处理器开中断就一定能够响应。F 4. DMA控制器接管系统总线实现外设与CPU之间的数据直接传送。F 5. DMA通道的单字节传送方式也成为周期窃取方式。T 6. 中断传送赋予外设主动提出数据交换请求的能力。T 7. 中断传送用硬件复杂性换来了数据传送的快递性。T 8. DMA传送中用DMAC替代处理器。T 9. 标志寄存器EFLAGS有一个IOPL字段,表示程序具有的I/O特权级。T 10. 每个程序都有一个任务状态段TSS,其中包含I/O许可位图,一个I/O地址对应中I/O许可位图的一个位。T 11. 外设像存储器芯片那样直接和处理器相连。F 12. 外设必须经过输入输出接口电路和处理器相连。T 13. I/O接口的各种寄存器需要利用I/O地址区别。T 14. 中断是对处理器功能的有效扩展。T 15. 可屏蔽中断用于外设数据传送,需要中断控制器配合。T 9.4.填空 1. DMA的意思是_直接存储器存取_,主要用于高速外设和 主存_间的数据传送。 2. 在IA-32处理器中0号中断被称为_除法错异常_中断,外部非屏蔽中断是_2_号中断。 3. IA-32处理器开中断指令 STI_,此时标志IF=_1_。 4. IA-32处理器关中断指令是_CLI_,此时标志IF=_0_。 5. 实地址方式下,主存最低_1KB_的存储空间用于中断向量表。若其内容从低地址开始依次是00H.23H.10H.F0H,则意味着0号中断的中断服务程序的首地址是_F010H:2300H_。 6. 向量号8的中断向量保存在物理地址 20H_开始的 4_个连续字节空间; 7. 8237芯片是一种高性能的可编程_DMA控制器芯片_ ,有_4_个独立的DMA通道 8. 外部中断也称为 硬件 中断,由CPU某一引脚信号引起。内部中断又称 异常/软件 中断,是在程序运行过程中,为处理意外情况或调试程序而提供的中断。 9. 不可屏蔽 中断不受中断允许标志位IF的屏蔽。而INTR引脚上来的中断属于可屏蔽 中断。 10. DMA控制器8237有4种工作方式,分别是 数据传送方式_, 单字节传送方式 ,请求传送方式和级联方式。 11. 中断工作过程中, 段基地址 和 偏移地址 信息一般会由处理器自动加以保护 12. 中断返回指令将_断点信息_和_寄存器_的信息出栈恢复。 13. IF是 中断 标志,处理器响应可屏蔽中断时IF的值为 1 。 14. 实方式下,使用中断向量表直接保存中断服务程序的入口地址,它包含 十六位段基地址CS 和 十六位偏移地址IP 两部分内容。 15. 保护方式下,每个中断服务程序由一个中断描述符指向,其中保存着中断服务程序的 16位段选择器 ,_32位偏移地址_和中断特权层。 9.5.简答题 1. 什么是接口电路的命令字或控制字? 答:处理器向接口芯片相应端口写入特定的数据,用于选择I/O芯片的工作方式或控制外设工作,该数据称命令字或控制字。 2. 为什么说外部中断才是真正意义上的中断? 答:外部中断是由处理器外部提出中断请求引起的程序中断。相对于处理器来说,外部中断是随机产生的,所以是真正意义上的中断。 3. 简答DMA传送的一般过程 答:进行DMA传送的一般过程是:外设先向DMA控制器提出DMA请求?,DMA控制器通过总线请求信号有效向处理器提出总线请求,处理器回以总线响应信号有效表示响应。此时处理器的三态信号线将输出高阻状态,即将它们交由中断控制器(DMAC)进行控制,完成外设和主存间的直接数据传送。 4. 简述主机与外设进行数据交换的几种常用方式。 答:无条件传送方式,常用于简单设备,处理器认为它们总是处于就绪状态,随时进行数据传送。 程序查询方式:处理器首先查询外设工作状态,在外设就绪时进行数据传送。 中断方式:外设在准备就绪的条件下通过请求引脚信号,主动向处理器提出交换数据的请求。处理器无其他更紧迫任务,则执行中断服务程序完成一次数据传送。 DMA传送: DMA控制器可接管总线,作为总线的主控设备,通过系统总线来控制存储器和外设直接进行数据交换。此种方式适用于需要大量数据高速传送的场合。 5. 以可屏蔽中断为例,简答中断的一般过程 答: 中断请求:外设通过硬件信号的形式.向处理器引脚发送有效请求信号。 中断响应:在满足一定条件时,处理器进入中断响应总线周期。 关中断:处理器在响应中断后会自动关闭中断。 断点保护:处理器在响应中断后将自动保护断点地址。 中断源识别:处理器识别出当前究竟是哪个中断源提出了请求,并明确与之相应的中断服务程序所在主存位置。 现场保护:对处理器执行程序有影响的工作环境(主要是寄存器)进行保护。 中断服务:处理器执行相应的中断服务程序,进行数据传送等处理工作。 恢复现场:完成中断服务后,恢复处理器原来的工作环境。 开中断:处理器允许新的可屏蔽中断。 中断返回:处理器执行中断返回指令,程序返回断点继续执行原来的程序。 6. 中断时为什么要安排中断优先级?什么情况下程序会发生中断嵌套? 答:1)处理器随时可能会收到多个中断源提出的中断请求,因此,为每个中断源分配一级中断优先权,根据它们的高低顺序决定响应的先后。 2)必须在中断服务程序中打开中断,程序才会发生中断嵌套。 7. IA-32处理器的中断向量表和中断描述符表的作用是什么? 答:IA-32处理器的中断向量表和中断描述符表的作用都是获取中断服务程序的入口地址(称为中断向量),进而控制转移到中断服务程序中。 8. 说明如下程序段的功能: cli mov ax,0 mov es,ax mov di,80h*4 mov ax,offset intproc ; intproc是一个过程名 cld mov es:[di],ax mov ax,seg intproc mov es:[di+2],ax sti 答:设置80H号中断向量。 第10章  常用接口技术 10.1.选择 1. 8255芯片是一种( ) 。 A.并行接口芯片 B.串行接口芯片 C.DMAC D.中断控制芯片 2. 8255芯片有( )数据端口。 A.3个16位 B.3个8位 C.4个16位 D.4个8位 3. 8255芯片有( )种基本工作方式。 A.2 B.3 C.4 D.6 4. 8086系统中的8255芯片有 ( )。 A.4个端口地址 B.2个端口地址 C.4个连续的偶地址 D.4个连续的奇地址 5. 对于8255芯片的描述正确的是 ( )。 A.A口只能输入,B口只能输出 B.C口高4位只能输入,低4位只能输出 C.C口高4位.低4位不能同时输入输出 D.A.B.C口既可以输入,也可以输出 6. 设8255芯片的端口基地址是60H,寻址控制寄存器的命令是( )。 A.OUT 60H,AL B.OUT 63H,AL C.OUT 61H,AL D.OUT 62H,AL 7. 向8253芯片写入的计数初值,写到了( )中。 A.减1计数器 B.0#计数器 C.控制字寄存器 D.初值寄存器 8. 8253芯片有( )个端口地址。 A.2 B.3 C.4 D.6 9. PC机中通常采用独立的键盘,通过( )芯电缆与主机连接。 A.1 B.4 C.5 D.8 10. 8253芯片有( )种工作方式。 A.3 B.4 C.5 D.6 11. 8253芯片内部有完全独立的( )。 A.6个16位计数通道 B.3个16位计数通道 C.6个8位计数通道 D.3个8位计数通道 12. 设8253芯片的端口基地址是60H,寻址控制寄存器的命令是( )。 A.OUT 60H,AL B.OUT 61H,AL C.OUT 62H,AL D.OUT 63H,AL 13. 假设某8253芯片的CLK1接1.5MHz的时钟,欲使OUT1产生频率为30kHz的方波信号,则8253的计数值应为( )。 A.2 B.20 C.50 D.5 14. 假设某8253芯片的CLK2接15MHz的时钟,欲使OUT2产生频率为300kHz的方波信号,则其的计数值应为( )。 A.2 B.20 C.5 D.50 15. 下列不属于8253芯片计数初值格式的是( )。 A.2进制 B.10进制 C.BCD码 D.8进制 10.2名词解释 10.3判断 1. 称为定时器也好,称为计数器也好,其实它们都是采用计数电路实现的。T 2. 32位PC机中并没有8253或8254芯片,但其控制芯片组具有兼容其功能的电路。T 3. 计数可以从0开始逐个递增达到规定的计数值,也可以从规定的计数值开始逐个递减恢复到0;前者为加法计数器,后者是减法计数器;8253/8254采用后者T 4. 8255没有时钟信号,其工作方式1的数据传输采用异步时序。T 5. 在微机系统中常采用软硬件结合的方法,用可编程定时器芯片构成一个方便灵活的定时 电路。T 6. 8253芯片工作在方式3类似于一个方波发生器。T 7. 8253定时器的计数通道2在PC机中通常用于控制扬声器发声。T 8. 8253芯片的6种工作方式中只有方式1需要硬件启动。F 9. 8255芯片的方式控制字决定3个端口的工作方式,因此需要三条输出指令。F 10. 定时器有数字电路中的计数电路构成。T 11. 8253芯片在计数过程中,预置寄存器中的值始终不变。T 12. 8253芯片在计数过程中,减法计数器的值始终不变。F 13. 8253芯片面向处理器连接的引脚类似于处理器的数据.地址和控制信号。T 14. 8253芯片的6种工作方式中只有方式2具备自动重装计数初值功能。F 15. 8253芯片工作在方式2类似于一个频率发生器(分频器)。T 10.4填空 1. 8253芯片芯片上有 3 个 16 位计数器通道。 2. 若设定8253芯片某通道为方式0后,其输出引脚OUT为 低 电平;当 写入计数初值 后通道开始计数。 3. 若设定8253芯片某通道为方式0后,_脉冲输入CLK_信号端每来一个脉冲计数值就减1;当 计数器初值减为零 ,则输出引脚输出高电平,表示计数结束。 4. 假设某8253芯片的CLK0接1.5MHz的时钟,欲使OUT0产生频率为300kHz的方波信号,则8253的计数值应为 5 ,应采用的工作方式是 3 。 5. 8255芯片具有 24 个外设数据引脚,分成3个端口,引脚分别是PA0~PA7,PB0~PB7和_PC0~PC7_。 6. 8255芯片有三种工作方式,其中方式0为 基本 输入输出方式,方式1为 选通 的输入输出方式,方式2为_双向选通_输入输出方式。 7. 8255芯片有三种工作方式,其中方式0为 基本 输入输出方式,方式1为 选通 输入输出方式,方式2为_双向选通_ 输入输出方式。 8. 8255芯片有2个控制字,分别是 方式选择 控制字和 复位/置位 控制字。 9. 8255芯片是一种可编程的 并行 接口芯片, 其控制字共用一个端口地址,用控制字的第 D7 位来区别。 10. 8253芯片中,CLK是时钟信号,GATE是门控输入 信号,OUT是计数器输出 信号。 11. 8253芯片有两种功能:接收处理器的控制字和计数器 功能和 发送计数器的当前计数值和工作状态 功能。 12. 8253芯片的每个计数器可以按照_2_进制或_16_进制计数。 13. 8253芯片的6种工作方式中,_1_和_5_需要硬件启动。 14. 8253芯片的6种工作方式中 2 和 3 具备自动重装计数初值的功能。 15. 8253芯片是一种可编程计数/定时 芯片,芯片上每个计数器有 6 种工作方式可供选择。 10.5简答题 1. 为什么称8253/8254的工作方式1为可编程单稳脉冲工作方式? 答:方式1可以通过编程产生一个确定宽度的单稳脉冲,故称工作方式1为可编程单稳脉冲工作方式。 2. 为什么写入8253/8254的计数初值为0却代表最大的计数值? 答:因为计数器是先减1,再判断是否为0,当初始值为0时,减一后每一位变为全1即FFFFH所以写入0实际代表最大计数值。 3. 8253芯片需要几个I/O地址,各用于何种目的? 答:有4个I/O地址,分别用来控制读写计数器0,1和2,及控制字。 4. “8255具有锁存输出数据的能力”是什么意思? 答:8255的三种工作方式均可实现输出数据锁存,即数据输出后被保存在8255内部,可以读取出来,只有当8255再输出新一组数据时才改变。 5. 8255芯片中有几个控制字?共用一个端口地址吗?如何区分? 答:有两个控制字,共用一个端口地址,通过该端口的最高位判断,D7=0时为方式控制字,D7=1时为C口的位控字。 6. 当8255的PC4~PC7全部为输出线时,请问此时能否确定A端口的工作方式是什么?为什么? 答:可以,A端口工作在方式0。因为A端口工作在方式1或2均使用PC4~PC7中部分或全部信号线作为固定的应答信号线和中断请求线,而此时PC4~PC7全部为输出线,说明A端口工作时无应答信号线,由此判断其工作在方式0。 7. 当8255的PC0~PC3全部为输入线时,请问此时能否确定B端口的工作方式是什么?为什么? 答:可以,B端口工作在方式0。因为B端口工作在方式1或2均使用PC0~PC3中部分或全部信号线作为固定的应答信号线和中断请求线,而此时PC0~PC3全部为输入线,说明B 端口工作时无应答信号线,由此判断其工作在方式0。 8. 8255芯片工作在方式1输出是,需要端口C有3个控制引脚,这3个控制引脚的功能是什么? 答:/OBF 输出缓冲器满信号,低电平有效; /ACK 响应信号,低电平有效; INTR 中断请求信号,高电平有效。 10.6应用题 1. 利用扬声器控制原理,编写一个简易乐器程序。 当按下1~8数字键时,分别发出连续的中音1~7和高音i(对应频率依次为524Hz,588Hz,660Hz,698Hz,784Hz,880Hz,988Hz和1048Hz);当按下其他键时暂停发音;当按下ESC键(ASCII码为1BH),程序返回操作系统。P263例题,习题8.7 参考程序: .data table dword 2277,2138,1808,1709,1522,1356,1200,1139 ;对应中音1~7和高音i。 ;算法:主频除以对应的频率 .cade mov al , 0b6h ;设置定时器2,工作方式3 out 43h , al again: call readc ;等待按键 cmp al , '1' ;判断是否是1~8 jb next ;小于1转到next cmp al , '8' ja next sub al , 31 ;将1~8的ASCLL码转换为二进制数0~7 xor ah , ah shl ax , 1 ;ax=ax*2 mov bx , ax mov ax , table[bx] out 42h , al ;设置定时器2的记录值 mov al , ah out 42h , al ;输出高字节 in al , 61h ;打开扬声器声音 or al , 03h ;使D1D0=PB1PB0=11 out 61h , al jmp again ;连续发音 next: push ax ;保护ax数据 in al , 61h ;不是1~8的数字则关闭扬声器 and al , 0fch ;使D1D0=00; out 61h , al pop ax ;恢复ax的内容 cmp al , 1bh ; 判断是否按键为“ESC” jne again done: ;结束 2. 下图是用8255端口B方式0与打印机接口连接示意图及各引脚间时序关系,编程实现该功能。P271例题,习题8.10 设端口地址为200H~203H 参考程序: ;假设A口地址为P8255Base=FFF8H ;初始化程序段 init8255: mov dx , P8255Base+3 ; 控制口地址 mov al , 10000001 ;方式控制字81h out dx , al ;端口B方式0输出,C口上半部分输出,下半部分输入 mov al , 00001111B ;端口C复位/置位字 out dx , al ;使PC7=1 ret printc proc ;输出打印子程序,入口参数:AH=打印数据 push ax push dx prin: mov dx , P8255Base+2 ; C端口地址 in al , dx ;查询打印机的状态 and al , 04h ;打印机是否忙? jnz prn ;PC2=1,打印机忙则等待 mov dx , P8255Base+1 ; 打印机不忙,输出数据 mov al , ah out dx , al ; 将打印数据从端口B输出 mov dx , P8255Base+3 ;从端口PC7送出控制低脉冲 mov al , 00001110 ;使PC7=0,即设置/STROBF=0 out dx , al nop ;延长适当时间 nop mov al , 00001111 ;使PC7=1,即设置/STROBF=1 out dx , al pop dx ; 最终产生低脉冲/STROBF信号 pop ax ret printc endp 3. 下图是用8255端口A方式1与打印机接口连接示意图及各引脚间时序关系,编程实现该功能。 P272例题,习题8.10 设端口地址为200H~203H 4. 下图是用8255端口B方式1与打印机接口连接示意图及各引脚间时序关系,编程实现该功能。见第3题,P272例题,习题8.11 参考代码: ;假设A口地址为P8255Base=FFF8H init8255: ;初始化子程序 mov dx , P8255Base+3 ;控制口地址 mov al , 84h ;10000100B out dx , al mov cx , counter ;counter为控制计数个数 mov bx , offset buffer call prints prints: proc push ax push dx print1: mov al , [bx] mov dx , P8255Base+1 ;端口B输出 out dx , al mov dx , P8255Base+2 ;端口C,监听打印机状态 tesing: in al , dx test al , 01h jnz testing ;PC1 =0时继续监听 inc bx ;数组指针后移 loop print1 pop dx pop ax ret prints end proc end 5. 如图所示,8253的端口地址为90H~93H。要求8253的通道0产生周期为100µs 的对称方波,8253的通道1产生周期为1S的对称方波。完成如下任务: 1. 在该图的基础上画出完成指定功能的线路连接(译码电路的设计可略去)。 2. 分别写出通道0和通道1的控制字,并求出它们的计数初值。 3.编写完成指定功能的8253初始化程序子程序INIT8253。 参考答案: 2) 通道0的控制字: 00110110 初始值 100us/0.833us=200 通道1的控制字: 01110110 初始值 1s/100us=10000 3) init8253: proc mov dx , 93h mov al , 36h out dx , al mov dx ,90h mov ax , 200 out dx , al mov dx , 93h mov al , 76h out dx , al mov dx , 91h mov ax , 10000 out dx , al mov al , ah out dx , al ret 6. 下图是8255与8088/86系统总线的连接原理图,要求A口.B口和C口的低4位定义为输出;C口的高4位定义为输入。请完成系列任务: 1.A口、B口、C口和控制端口的地址分别是: 2.方式控制字是: 3.写出完成指定功能的8255初始化的程序片段。 参考答案: 1) 由图可知:A9~A5=11100,因此: A口地址: P8255Base=380h; B口地址: P8255Base+1=381h; C口地址: P8255Base+2=382h; 控制口地址: P8255Base+3=383h; 2)方式控制字:88H 端口地址 3);初始化程序段 init8255 proc mov dx , P8255Base+3 ; 控制口地址 mov al , 10001000 ;方式控制字88h out dx , al mov al , 00001111B ;端口C复位/置位字 out dx , al ;使PC7=1 ret init8255 endp 7. 下图是某PC系列微机应用系统以8255A作为接口,采集一组开关S7~S0的状态,然后它通过一组发光二极管LED7~LED0显示出来,(Si闭合,对应LEDi亮;Si断开,对应IEDi灭)。已知8255A的A.B两组均工作在方式0。 (1)写出8255A的四个端口地址; (2)写出8255A的工作方式控制字; (3)编写实现数据采集与显示的子程序App8255。 端口地址 参考答案: 1)8255A的A端口地址:P8255Base=320h ;=1001 000 00B 8255A的B端口地址:P8255Base+1=0121h ;=1001 000 01B 8255A的C端口地址:P8255Base+2=0122h ;=1001 000 10B 8255A的控制口地址:P8255Base+3=0123h ;=1001 000 11B 2)由于是B口输入,A口输出,因此方式控制字为:1000 0010 ;=82h 3)参考代码: init8255 proc mov al,10000010b ; 写入方式字=82H mov dx,P8255Base+3 ; 控制口地址=0123H out dx,al ;加入下一段更好,使L0~L3全亮 mov al,ffh mov dx,P8255Base ; 端口A地址 out dx,al ret init8255 endp ;初始化结束 App8255 proc ;控制程序段 mov dx,P8255Base+1 ; 端口B地址 in al,dx ; 读入PB0~PB7的输入 not al ; 对端口A的输入取反 mov dx,P8255Base ; 读入端口A地址 out dx,al ; 控制PA0~PA7的输出 ret App8255 endp 8. 下图是某PC系列微机应用系统以8255A作为接口,采集一组开关S7~S0的状态,然后它通过一组发光二极管LED7~LED0显示出来,(Si闭合,对应LEDi亮;Si断开,对应IEDi灭)。已知8255A的A.B两组均工作在方式0。 (1)写出8255A的四个端口地址; (2)写出8255A的工作方式控制字; (3)编写实现数据采集与显示的子程序App8255。 端口地址 参考答案: 1)8255A的A端口地址:P8255Base=0188h ;=11 00 010 00B 8255A的B端口地址:P8255Base+1=0189h ;=11 00 010 01B 8255A的C端口地址:P8255Base+2=018ah ;=11 00 010 10B 8255A的控制口地址:P8255Base+3=018bh ;=11 00 010 11B 2)由于是A口输入,B口输出,因此方式控制字为:1001 0000 ;=90h 3)参考代码: init8255 proc mov al,10010000b ; 写入方式字=90H mov dx,P8255Base+3 ; 控制口地址=018BH out dx,al ;加入下一段更好,使L0~L3全亮 mov al,ffh mov dx,P8255Base+1 ; 端口B地址 out dx,al ret init8255 endp ;初始化结束 App8255 proc ;控制程序段 mov dx,P8255Base ; 端口A地址 in al,dx ; 读入PA0~PA7的输入 not al ; 对端口A的输入取反 mov dx,P8255Base +1 ; 读入端口B地址 out dx,al ; 控制PB0~PB7输出 ret App8255 endp ; 程序结束 9. 如图所示,利用8253的3个计数器输出out,分别产生周期为100µs的对称方波.周期为1s的负窄脉冲和周期为10s的对称方波( 8353方式控制字如图所示)试按上述要求分别编写8253的初始化程序。见第5题 参考程序:N=fclk/fout=fclk*tout=tout/tclk 通道0的控制字: 00110110 初始值 100us/0.838s=200 2*10^6*100*10^-6=200 通道1的控制字: 01110110 初始值 1s/100us=10000 (采用级联方式OUT0=CLK1) 通道2的控制字: 10110110 初始值 10s/1s=10 (采用级联方式OUT1=CLK2) init8253 proc ;假设计数器0的端口P8253Base=90h mov dx , P8253Base+3 ;=93h mov al , 036h ;方式控制字 out dx , al mov dx , 91h mov ax , 200 out dx , al mov al , ah out dx , al ;计数器1 初始化 mov dx , P8253Base+3 ;=93h mov al , 076h ;方式控制字 out dx , al mov dx , 91h mov ax , 10000 out dx , al mov al , ah out dx , al ;计数器2 初始化 mov dx , P8253Base+3 ;=93h mov al , 0b6h ;方式控制字 out dx , al mov dx , 91h mov ax , 10 out dx , al mov al , ah out dx , al ret init8253 endp 10. 有一个控制系统,有4个控制点,分别由4个对应的输入端控制,现用8255的端口C模拟实现该系统的控制,如图所示(A15~A10按0处理)。开关K0~K3打开则对应发光二极管L0~L3亮,表示该控制点运行正常;开关闭合则对应发光二极管不亮,说明该控制点出现故障,编写8255的初始化程序和控制程序。(假设A口~控制口地址分别为60H~63H) 习题8.12 ,63H为控制端口! 参考程序: ;由假设A口~控制口地址分别为60H~63H可知端口A地址为:P8255Base=60H init8255 proc mov al,10000001b ; 写入方式字=81H mov dx,P8255Base+3 ; 控制口地址 out dx,al ;加入下一段更好,使L0~L3全亮 mov al,0fh mov dx,P8255Base+2 ; 端口C地址 out dx,al ret init8255 endp ;初始化结束 light proc ;控制程序段 mov dx,P8255Base+2 ; 端口C地址 in al,dx ; 读入PC0~PC3 mov cl,4 rol al,cl ; 左移4位 not al out dx,al ; 控制PC4~PC7 ret lihgt endp ; 程序结束 11. 如下图所示,8253的端口地址为90H~93H。要求8253的通道0产生周期为500µs的负的窄脉冲,8253的通道1产生周期为2S的对称方波。完成如下任务: 1. 在该图的基础上画出完成指定功能的线路连接(译码电路的设计可略去)。 2. 分别写出通道0和通道1的控制字,并求出它们的计数初值。 3.编写完成指定功能的8253初始化程序子程序INIT8253。 参考程序:(同第5题) N=fclk/fout=fclk*tout=tout/tclk 2) 通道0的控制字: 00110110 初始值500us/0.838us=1000 通道1的控制字: 01110110 初始值2s/500us=4000 (采用级联方式OUT1=CLK1) 3) init8253 proc mov dx , 93h mov al , 36h out dx , al mov dx ,90h mov ax , 1000 out dx , al mov dx , 93h mov al , 76h out dx , al mov dx , 91h mov ax , 4000 out dx , al mov al , ah out dx , al ret init8253 endp 12. 试按如下要求分别编写8253的初始化程序,已知8253的计数器0~2和控制字I/O地址依次为204H~207H。 ① 使计数器1工作在方式0,仅用8位二进制计数,计数初值为128。 ② 使计数器0工作在方式1,按BCD码计数,计数值为3000。 ③ 使计数器2工作在方式2,计数值为02F0H。习题8.6 参考程序: 13. 试按如下要求分别编写8253的初始化程序,已知8253的计数器0~2和控制字I/O地址依次为204H~207H。 ① 使计数器0工作在方式0,仅用8位二进制计数,计数初值为200。 ② 使计数器1工作在方式2,按BCD码计数,计数值为1234。 ③ 使计数器2工作在方式3,计数值为1234H。 参考程序: 14. 有一个控制系统,有4个控制点,分别由4个对应的输入端控制,现用8255的端口C模拟实现该系统的控制,如图所示(A15~A10按0处理)。开关K0~K3打开则对应发光二极管L0~L3亮,表示该控制点运行正常;开关闭合则对应发光二极管不亮,说明该控制点出现故障,编写8255的初始化程序和控制程序。见题10 端口地址 参考程序: ;由接线可知端口A地址为:P8255Base=380H init8255 proc mov al,10000001b ; 写入方式字=81H mov dx,P8255Base+3 ; 控制口地址 out dx,al ;加入下一段更好,使L0~L3全亮 mov al,0fh mov dx,P8255Base+2 ; 端口C地址 out dx,al ret init8255 endp ;初始化结束 light proc ;控制程序段 mov dx,P8255Base+2 ; 端口C地址 in al,dx ; 读入PC0~PC3 mov cl,4 rol al,cl ; 左移4位 not al out dx,al ; 控制PC4~PC7 ret lihgt endp ; 程序结束 15. 下图是用8255端口A方式0与打印机接口连接示意图及各引脚间时序关系,编程实现该功能。P271例题设端口地址为200H~203H,203H为控制端口! 参考程序: ;假设A口地址为P8255Base=200H ;初始化程序段 init8255 proc mov dx , P8255Base+3 ; 控制口地址 mov al , 10000001 ;方式控制字81h out dx , al ;端口B方式0输出,C口上半部分输出,下半部分输入 mov al , 00001111B ;端口C复位/置位字 out dx , al ;使PC7=1 ret init8255 endp printc proc ;输出打印子程序,入口参数:AH=打印数据 push ax push dx prin: mov dx , P8255Base+2 ; 读取端口C in al , dx ;查询打印机的状态(PC2=BUSY=0)? and al , 04h ;打印机是否忙? jnz prn ;PC2=1,打印机忙则等待 mov dx , P8255Base ; PC2=0打印机不忙,输出数据 mov al , ah out dx , al ; 将打印数据从端口A输出 mov dx , P8255Base+3 ;从端口PC7送出控制低脉冲 mov al , 00001110B ;使PC7=0,即设置/STROBF=0 out dx , al nop ;延长适当时间 nop mov al , 00001111 ;使PC7=1,即设置/STROBF=1 out dx ,al pop dx ; 最终产生低脉冲/STROBF信号 pop ax ret printc endp

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高员外,我们会尽快处理。