如果写入8253计数初值值为120,那么在选通负脉冲输出之前将出现多长延迟时间

【图文】汇编语言第12章 计数、定时技术_modified_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
汇编语言第12章 计数、定时技术_modified
&&汇编语言
阅读已结束,下载本文到电脑
登录百度文库,专享文档复制特权,积分每天免费拿!
你可能喜欢文章责编:gaoxiaoliang& 看了本文的网友还看了
?&&( 12:33:11)?&&( 12:32:05)?&&( 12:30:25)?&&( 16:04:24)?&&( 16:02:42)?&&( 18:17:01)?
? ?   ? ?   ? ?   ? ?   ? ?
? ?   ? ?   ?
?   ? ?    ? ?   ? ?   ? ?   ? ?
? ?   ? ?
|     |
|     |
|     |
|     |
|     |
精选推荐专题 |
|        |
实用工具 |
| 大全 | 大全     |
版权声明:如果网所转载内容不慎侵犯了您的权益,请与我们联系,我们将会及时处理。如转载本内容,请注明出处。
Copyright & 2004-
 考试网 All Rights Reserved 
中国科学院研究生院权威支持(北京) 电 话:010- 传 真:010-微型计算机原理及应用技术_第二版_课后作业解答(全集) (1)-海文库
您现在的位置:&>&&>&其它课程
微型计算机原理及应用技术_第二版_课后作业解答(全集) (1)
计算机基础知识
教材习题解答1.
计算机中为什么都采用二进制数而不采用十进制数?【解】计算机的基本功能是对数的运算和处理。计算机中,通过数字化编码技术,对所表示的数值、文字、符号及控制信息等进行数字编码,这种数字化表示方法不仅要适合于人的自然习惯,同时要满足机器中所用器件、线路的工作状态以及数据可靠传输与易于校验纠错等方面的要求。一个具有两种不同的稳定状态且能相互转换的器件,就可以用来表示一位二进制数,所以表示二进制的器件易于制造且工作可靠,并且二进制数的运算规则也最简单,因此目前计算机中均采用二进制数来表示各种信息及进行信息处理。2.
写出下列用原码或补码表示的机器数的真值:(1)
(4)【解】(1) [X]原==+109(2) [X]原==-13(3) [X]原==+89(4) [X]原==-783.
填空:(1) (1234)10=(
)16(2) (34.6875)10=(
)16(3) (271.33)10=(
)16(4) ()2=(
)16(5) (1AB.E)16=(
)2(6) (1)2=(
)16【解】(1) (1234)10=(
)2=( 4D2 )16(2) (34.6875)10=( 1 )2=( 22.B )16(3) (271.33)10=( 0101 )2=( 10F.54 )16(4) ()2=( 2761 )10=( AC9 )16(5) (1AB.E)16=( 427.875 )10=(1 )2(6) (1)2=( 170.4375 )10=( AA.7 )164.
已知X=36,Y=-136,Z=-1250,请写出X、Y、Z的16位原码、反码和补码。【解】[X]原=10 0100[Y]原=00 1000[Z]原=10 0010[X]反=10 0100
[X]补==+109 [X]补==-115 [X]补==+89 [X]补==-501
[Y]反=11 0111[Z]反=01 1101[X]补=10 0100[Y]补=11 1000[Z]补=01 11105.
已知[X]补=B,[Y]补=B,[Z]补=1111B,求X、Y、Z及X+Y、Y-Z的十进制值为多少?【解】Y-Z运算时Y需要扩展符号位X=85Y=-86Z=-28673X+Y=B+B=B=-1Y-Z=01010B-11111B=01010B+00001B=10 1011B=285876.
用8位补码进行下列运算,并说明运算结果的进位和溢出:(1) 33+114
(2) 33-114
(3) (-33)+114
(4) (-33)-114【解】(1) [33]补=[114]补=0 0 1 0 0 0 0 1+0 1 1 1 0 0 1 01 0 0 1 0 0 1 1正确的运算结果147&127,出现溢出,使符号位发生变化,出现结果:-109(2) [33]补=[-114]补=0 0 1 0 0 0 0 1+1 0 0 0 1 1 1 01 0 1 0 1 1 1 1运算结果:-81(3) [-33]补=[114]补=1 1 0 1 1 1 1 1+0 1 1 1 0 0 1 01 0 1 0 1 0 0 0 1最高位进位,自然丢失,运算结果:+81(4) [-33]补=[-114]补=2
1 1 0 1 1 1 1 1+1 0 0 0 1 1 1 010 1 1 0 1 1 0 1正确的运算结果-147&-127,出现溢出,使符号位发生变化,出现运算结果:+1097.
将下列十进制数表示为8421BCD码:(1) 8609
(4) 2998【解】(1) 00 1001(2) 01 0100(3) 11 0000(4) 01 10008.
将下列8421BCD码表示为十进制数和二进制数:(1)
(4) 【解】(1) 79,
1001111B(2) 285,
B(3) 607,
B(4) 590, B9.
将下列数值或字符串表示为相应的ASCII码:(1) 51
(4) Computer
(5) how are you?【解】(1) 0001(2) (3) (4)
1101111111110.
定点数和浮点数表示方法各有什么特点?【解】用浮点表示法比定点表示法表示数的范围大,浮点数的运算比定点数的运算复杂11.
微处理器、微型计算机和微型计算机系统三者之间有什么不同?【解】微处理器(CPU),由运算器和控制器组成。运算器完成算术运算和逻辑运算,控制器分析命令并指挥协调各部件统一行动完成命令规定的各种动作或操作。微型计算机由运算器、控制器、存储器、输入设备、输出设备五大部分组成。微型计算机系统包括微型计算机硬件和软件。12.
微型计算机由哪几部分组成,各部分的功能是什么?【解】微型计算机由运算器、控制器、存储器、输入设备、输出设备五大部分组成。运算器完成算术运算和逻辑运算;控制器分析命令并指挥协调各部件统一行动完成命令规定的各种动作或操作;存储器存放原始数据、中间结果和最终结果以及程序;输入设备、输出设备与外界交换信息。3
CPU在内部结构上由哪几部分组成,CPU应具备什么功能?【解】微处理器(CPU)由运算器和控制器组成。CPU应具备的功能:对数据进行处理并对处理过程进行控制。14.
简述计算机执行指令和执行程序的过程。以书中的例子为例,说明在此三条指令执行中,哪些信号属于数据流,哪些信号属于控制流?【解】计算机执行指令和执行程序的过程分为:(1) 取指阶段,从存储器中取出指令;(2) 分析执行阶段,由控制器进行分析译码、发出一系列控制信号完成该指令的执行。以书中的例子为例,在此三条指令执行中,以下信号属于数据流:① IP→M;② IP+1→IP;③ M→IR;④ IR→ID;addr→M;M→ACC⑤ ALU结果→ACC。以下信号属于控制流:① 控制上述操作过程的信号流;② 控制IP自动加1③ 存储器对地址译码,找到100单元;④ ID对指令译码后,由控制信号发生器产生一系列控制信号来执行这条指令⑤ ALU执行“ADD”运算;15.
微型计算机外部为什么采用三总线结构?【解】有了总线结构以后,系统中各功能部件之间的相互关系变为各个部件面向总线的单一关系。一个部件或设备只要符合总线标准,就可以连接到采用这种总线标准的系统中,使系统功能能很简便地得到扩展。数据总线用来传输数据,地址总线专门用来传送地址信息,控制总线用来传输控制信号。16.
数据总线和地址总线在结构和作用上有什么不同?【解】数据总线用来传输数据,地址总线专门用来传送地址信息。从结构上看,数据总线是双向的,即数据既可以从CPU送到其它部件,也可以从其它部件传送到CPU。因地址总是从CPU送出去的,所以地址总线是单向的。地址总线的位数决定了CPU可以直接寻址的内存范围。17.
如果某几种CPU的地址总线分别有8、16、20、32条,它们各自能寻址的存储器的容量是多少?【解】地址总线8条: 2=256B地址总线16条:2=64KB地址总线20条:2=1MB地址总线32条:2=4GB18.
什么是硬件,什么是软件,硬件和软件的关系如何?【解】硬件是指组成计算机的各种电子的、机械的、光磁学的物理器件和设备,它们构成了计算机的物理实体。软件则是指为了运行、管理和维护计算机而编制的各种程序及其有关的文档资料的总称。硬件是基础,软件是灵魂,两者既相互独立,又相互依存,缺一不可。硬32201684
件和软件合起来才组成一个完整的计算机系统。19.
说明位、字节、字长的概念及它们之间的关系。【解】(1) 位(bit)。位是计算机所能表示的最基本最小的数据单位。它只能有两种状态“0”和“1”,即二进制位。(2) 字(Word)。计算机中作为一个整体参与运算、处理和传送的一串二进制数,是计算机中信息的基本单位。(3) 字长(Word Length)。计算机中每个字所包含的二进制位数称为字长。它们之间的关系:字由位构成,字长指每个字所包含的位的个数。20.
计算机的发展趋势有哪些?你如何看待冯?诺依曼计算机体系结构理论?【解】计算机的发展趋势包括:微处理器的位数增加(4位→64位);采用并行处理技术;集中式主机模式逐渐被客户/服务器模式所取代;网络技术的应用和普及;多媒体技术技术应用等。冯?诺依曼计算机体系结构理论的核心是“存储程序”和“程序控制”。冯?诺依曼提出的这些基本概念奠定了现代计算机体系结构的基本框架,并由此产生了程序设计思想。尽管从计算机诞生到现在已经历了半个多世纪,计算机的体系结构已发生了很大变化,计算机的性能也有了巨大提高,但目前大多数计算机仍遵从冯?诺依曼体系结构理论。21.
说出几种型号的CPU,它们各有什么特点?【解】(1) Intel公司于1981年推出,16位微处理器,地址线有20条,内存寻址范围为1M字节。它们的区别在于,8086外部的数据也是16位,而8088的外部数据为8位。(2) 8028680286也是16位处理器,其频率比8086更高,它有24条地址线,内存寻址范围是16M字节。(3) 8038680386属于32位微处理器,其内部和外部数据总线都是32位,地址总线也是32位,可寻址4GB内存。它除具有实模式和保护模式外,还增加了虚拟86的工作方式,可以通过同时模拟多个8086处理器来提供多任务能力。386处理器的主频有16,20,25,33,40MHz五种。(4) 80486于1989年由Intel公司首先出。其时钟频率从25MHz逐步提高到33MHz、50MHz。它也属于32位处理器。80486是将80386和数学协处理器80387以及一个8KB的高速缓存集成在一个芯片内,并且在80X86系列中首次采用了RISC技术,可以在一个时钟周期内执行一条指令。它还采用了突发总线方式,大大提高了CPU 与内存的数据交换速度。(5) Pentium处理器Pentium(奔腾)是Intel公司于1993年推出的新一代微处理器, Pentium微处理器使用更高的时钟频率,最初为60MHZ和66MHZ,后提高到200MHZ。64位数据总线,16KB的高速缓存。接着Intel推出使用MMX技术的Pentium MMX的多能奔腾。它增加了57条多媒体指令,内部高速缓存增加到32KB。最高频率是233MHz。MMX是Multimedia Extension的缩写,意5
即多媒体扩展,一种基于多媒体计算以及通讯功能的技术,它能生成高质量的图像、视频和音频,加速对声音图像的处理。(6) Pentium IIPentiumII与以往的Pentium处理器使用了不同的封装方式,它将处理器放到了盒中。而且采用SLOT 1模式的插座。该形式的封装结构为系统总线与L2高级缓存之间的接口提供了独立的连接电路。然后再将处理器、高速缓存芯片,都放置在一个小型电路板上(SEC卡盒)。(7) 塞扬塞扬属于Pentium II的低价位版本,被称为&Celeron&。它是将Pentium II处理器的二级Cache去掉,并简化了封装形式,没有塑料壳,另加一一块散热片组成。因为没有了Cache,其速度明显下降。(8) 塞扬 300 ACeleron 300A处理器是包含了128K 二级缓存的Pentium II处理器,其缓存是集成在CPU内部的,速度和CPU相同,比 Pentium II/III的Cache速度还要高,这样CPU从二级缓存中读写数据时不需等待,可以大大提高计算速度;塞扬 300 A仍没有塑料外壳,采用了SLOT1的结构,加了一个散热片和一块风扇。(9) Pentium III它采用了与Pentium II 相同的SLOT1结构,具有100MHz的外频,其内部集成了64K的一级缓存,512K的二级缓存仍然安装在SLOT1的卡盒内,工作频率是CPU的一半。提供了比PentiumII更强劲的性能,这主要表现在其新增加了KNI指令集。KNI指令集中提供了70条全新的指令,可以大大提高3D运算、动画片、影像、音效等功能,增强了视频处理和语音识别的功能。22.
说出目前流行的几种主机板的类型以及他们的性能特点。【解】ATX是目前市场上最常见的主板结构,扩展插槽较多,PCI插槽数量在4-6个,大多数主板都采用此结构;Micro ATX又称Mini ATX,是ATX结构的简化版,扩展插槽较少,PCI插槽数量在3个或3个以下,多用于品牌机并配备小型机箱;BTX是英特尔制定的最新一代主板结构。AT主板的尺寸为13&×12&,板上集成有控制芯片和8个I/0扩充插槽。由于AT主板尺寸较大,因此系统单元(机箱)水平方向增加了2英寸,高度增加了1英寸,这一改变也是为了支持新的较大尺寸的AT格式适配卡。AT主板尺寸较大,板上能放置较多的元件和扩充插槽。Baby/Mini AT主板:随着电子元件集成化程度的提高,相同功能的主板不再需要全AT的尺寸。因此在1990年推出了规范,简称为Baby AT主板。Baby AT主板是从最早的XT主板继承来的,它的大小为15&×8.5&,比AT主板是略长,而宽度大大窄于AT主板。Baby AT主板沿袭了AT主板的I/0扩展插槽、键盘插座等外设接口及元件的摆放位置,而对内存槽等内部元件结构进行了紧缩,再加上大规模集成电路使内部元件减少,使得Baby AT主板比AT主板布局紧凑而功能不减。6
Micro ATX主板把扩展插槽减少为3-4只,DIMM插槽为2-3个,从横向减小了主板宽度,其总面积减小约0.92平方英寸,比ATX标准主板结构更为紧凑。按照Micro ATX标准,板上还应该集成图形和音频处理功能。目前很多品牌机主板使用了Micro ATX标准。BTX是英特尔提出的新型主板架构Balanced Technology Extended的简称,是ATX结构的替代者。BTX具有如下特点:支持Low-profile,也即窄板设计,系统结构将更加紧凑;针对散热和气流的运动,对主板的线路布局进行了优化设计;主板的安装将更加简便,机械性能也将经过最优化设计。23
常用的外部设备有哪些,它们各有什么特点?如何衡量它们的性能?【解】常用的外部设备有外存储器(如CD-ROM、磁带存储器、硬盘、软盘)、键盘、鼠标、打印机、显示器、多媒体设备(如扫描仪、扬声器)、网络设备等。CD-ROM的特点是:存储容量大,只能读不能写,读写数据速度低于硬盘。磁带存储器的特点是:存储容量大,顺序存取方式,主要用于在系统中备份数据。 硬盘的特点是:存储容量大,读写速度高软盘的特点是:便宜、适宜于由用户保存数据,容易损坏,容量小,速度慢。键盘:键盘是最主要的输入设备。鼠标:鼠标器是控制显示屏上光标移动位置并向主机输入用户所选中的某个操作命令或操作对象的一种常用的输入设备。打印机:打印机是产生硬拷贝输出的一种设备,供用户保存计算机处理的结果。显示器:是用户与计算机对话的主要窗口。分辨率、彩色数目及屏幕尺寸是显示器的主要指标。扫描仪:是一种输入图片和文字的外部设备。24
计算机软件包括哪些种类,它们有什么不同?【解】计算机软件包括系统软件和应用软件两大类。系统软件指由机器的设计者提供的,使用和管理计算机的软件。系统软件包括:①各种语言的汇编或解释、编译程序。②机器的监控管理程序、操作系统、调试程序、故障诊断程序。③程序库。应用软件指用户用各种语言编制的解决各种问题的软件,如财务管理软件、银行管理软件、文字处理软件等。系统软件和应用软件的不同:系统软件指由机器的设计者提供的,其目的是让用户更方便地使用和管理计算机,而不必了解具体的计算机硬件,从而使用户编制各种源程序更为简单、方便和可靠。应用软件则是为了解决各种应用问题的软件,其目的为了扩大计算机的功能和应用领域,方便各应用领域的用户的使用。25.
你知道或用过哪些系统软件,它们各有什么功能特点?【解】(1) DOS系统是1981年由微软公司为IBM个人电脑开发的,它是一个单用户单任务的操作系统。在1985年到1995年间DOS占据操作系统的统治地位。功能特点:小巧灵活、文件管理方便、外设支持良好、应用程序众多(2) WindowsWindows是一个为个人电脑和服务器用户设计的操作系统。它的第一个版本由微软公司7
发行于1985年,并最终获得了世界个人电脑操作系统软件的垄断地位。功能特点:具有友好的图形用户界面;具有强大的内存管理功能(可直接管理4GB内存);允许多任务操作(可同时运行多个程序),且速度较快;具有出色的多媒体功能;支持新硬件,如DVD、数字相机等;可靠性更强。(3) UnixUnix是一种分时计算机操作系统,1969在AT&TBell实验室诞生。从此以后其优越性不可阻挡的占领网络。大部分重要网络环节都是Unix构造。功能特点:具有强大的可移植性,适合多种硬件平台;可操作性很强;具有良好的用户界面和程序接口;为用户提供了数千条系统命令,有助于系统操作和系统管理;管道机制;为用户提供了良好的开发环境;其跨平台的文件系统和网络文件系统;具有强大的网络功能;完善的系统审计;增强的系统安全机制;系统备份功能完善;系统结构清晰,有利于操作系统的教学和实践;具有强稳定性和健壮的系统核心。(4) LinuxLinux是Unix克隆的操作系统,在源代码上兼容绝大部分Unix标准,是一个支持多用户、多进程、多线程、实时性较好的且稳定的操作系统。功能特点:完全免费;完全兼容POSIX 1.0标准;多用户、多任务;良好的界面;丰富的网络功能;多进程、多线程、实时性较好;支持多种平台26.
说出你用过的一种计算机的主要性能指标。【解】(1) 联想天骄e1050x的主要性能指标:处理器类型 Celeron D 331,处理器主频2660MHz,处理器的一级缓存128KB,二级缓存256KB,处理器运算位数 64位主板的系统总线频率 533MHz内存类型DDR,容量 256 MB外围设备包括: DVD-ROM (16X)光驱,硬盘(7200rpm,80GB) ,17英寸液晶显示器,显卡,声卡,音响系统, 10/100M网卡,键盘,USB光电鼠标(2) 联想家悦C 1066E的主要性能指标:处理器类型 SEM 2200+,处理器主频2200MHz,处理器的一级缓存128KB,二级缓存256KB,处理器运算位数 64位主板的系统总线频率 533MHz内存类型DDR,容量 256 MB外围设备包括: DVD-ROM (16X)光驱,硬盘(7200rpm,80GB) ,17英寸液晶显示器,显卡,声卡,音响系统, 10/100M网卡,键盘,USB光电鼠标
第2章 8086微处理器及其系统8
教材习题解答1.
8086 CPU 由哪两部分构成,它们的主要功能是什么?在执行指令期间,EU 能直接访问存储器吗,为什么?【解】8086CPU由执行部件(EU)和总线接口部件(BIU)两部分组成。执行部件由内部寄存器组、算术逻辑运算单元(ALU)与标志寄存器(FR)及内部控制逻辑等三部分组成。寄存器用于存储操作数和中间结果;算术逻辑单元完成16位或8位算术逻辑运算,运算结果送上ALU内部数据总线,同时在标志寄存器中建立相应的标志;内部控制逻辑电路的主要功能是从指令队列缓冲器中取出指令,对指令进行译码,并产生各种控制信号,控制各部件的协同工作以完成指令的执行过程。总线接口部件(BIU)负责CPU与存储器、I/O设备之间传送数据、地址、状态及控制信息。每当EU部件要执行一条指令时,它就从指令队列头部取出指令,后续指令自动向前推进。EU要花几个时钟周期执行指令,指令执行中若需要访问内存或I/O设备,EU就向BIU申请总线周期,若BIU总线空闲,则立即响应,若BIU正在取一条指令,则待取指令操作完成后再响应EU的总线请求。2.
8086CPU与传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点?【解】8086 CPU与传统的计算机相比增加了指令队列缓冲器,从而实现了执行部件(EU)与总线接口(BIU)部件的并行工作,因而提高了8086系统的效率。3.
8086 CPU 中有哪些寄存器,各有什么用途?【解】8086共有8个16位的内部寄存器,分为两组:① 通用数据寄存器。四个通用数据寄存器AX、BX、CX、DX均可用作16位寄存器也可用作8位寄存器。用作8位寄存器时分别记为AH、AL、BH、BL、CH、CL、DH、DL。AX(AH、AL)累加器。有些指令约定以AX(或AL)为源或目的寄存器。实际上大多数情况下,8086的所有通用寄存器均可充当累加器。BX(BH、BL)基址寄存器。BX可用作间接寻址的地址寄存器和基地址寄存器,BH、BL可用作8位通用数据寄存器。CX(CH、CL)计数寄存器。CX在循环和串操作中充当计数器,指令执行后CX内容自动修改,因此称为计数寄存器。DX(DH、DL)数据寄存器。除用作通用寄存器外,在I/O指令中可用作端口地址寄存器,乘除指令中用作辅助累加器。② 指针和变址寄存器。BP(Basic Pointer Register)基址指针寄存器。SP(Stack Pointer Register)堆栈指针寄存器。SI(Source Index Register)源变址寄存器。DI(Destination Index Register)目的变址寄存器。BP、SP称为指针寄存器,用来指示相对于段起始地址的偏移量。BP和SP一般用于堆栈9
段。SI、DI称为变址寄存器,可用作间接寻址、变址寻址和基址变址寻址的寄存器。SI一般用于数据段,DI一般用于数据段或附加段。标志寄存器(FR):是一个16位寄存器,算术逻辑单元进行算术逻辑运算后,在标志寄存器中建立相应的标志。段地址寄存器(CS、DS、SS、ES)。用于存放段地址,根据其主要用途,分为代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS、附加段寄存器ES。代码段寄存器CS:代码段是存放程序代码的存储区域,代码段寄存器用来存放代码段存储区域的起始地址。数据段寄存器DS:数据段是存放程序中所使用的数据的存储区域,数据段寄存器用来存放程序的数据存储区的起始地址。堆栈段寄存器SS:堆栈段寄存器用来存放堆栈存储区的起始地址。由堆栈段寄存器SS与堆栈指针寄存器SP来确定当前堆栈指令的操作地址。附加段寄存器ES:附加段是为某些字符串操作指令存放目的操作数而设置的一个附加的数据段,附加段寄存器用来存放该附加数据段存储区域的起始地址。指令指针寄存器(IP)。又称程序计数器,是16位寄存器。IP中存放当前将要执行的指令的有效地址,每取出一条指令IP自动增量,即指向了下一条指令。指令队列缓冲器:是一个与CPU速度相匹配的高速缓冲寄存器。在EU执行指令的同时,BIU可以从内存中取出下一条或下几条指令放到指令缓冲器中,EU执行完一条指令后,可以立即从指令缓冲器中执行下一条指令。4.
状态标志与控制标志有何不同,程序中是怎样利用这两类标志的?标志寄存器有哪些标志位,各在什么情况下置位?【解】状态标志根据算术逻辑运算结果由硬件自动设定,它们反映运算结果的某些特征或状态,可作为后继操作(如条件转移)的判断依据。控制标志由用户通过指令来设定,它们可控制机器或程序的某些运行过程。标志寄存器的内容如下:15 14 13 12 11 109 8 7 6 5 4 3 2 1 0
CF(Carry Flag)进位标志,反映在运算结果的最高位有无进位或借位。如果运算结果的最高位产生了进位(加法)或借位(减法)则CF=1,否则CF=0。PF(Parity Flag)奇偶标志,反映运算结果中“1”的个数的奇偶性,主要用于判断数据传送过程中是否出错。若结果的低8位中有偶数个“1”则PF=1,否则PF=0。AF(Auxiliary Carry Flag)辅助进位标志,又称半进位标志。加减运算时,若D3向D4产生了进位或借位则AF=1,否则AF=0。在BCD码运算时,该标志用于十进制调整。ZF(Zero Flag)零标志,反映运算结果是否为0。 若结果为零则ZF=1,否则ZF=0。 SF(Sign Flag)符号标志,反映运算结果最高位即符号位的状态。如果运算结果的最高位为1则SF=1(对带符号数即为负数),否则SF=0(对带符号数即为正数)。OF(Overflow Flag)溢出标志,反映运算结果是否超出了带符号数的表数范围。若超出了机器的表数的范围,即为产生溢出,则OF=1,否则OF=0。DF(Direction Flag)方向标志,用于串处理指令中控制串处理的方向。当DF=1时,每10
次操作后变址寄存器SI、DI自动减量,因此处理方向是由高地址向低地址方向进行。当DF=0,则SI、DI自动增量,处理方向由低地址向高地址方向进行。该标志由方向控制指令STD或CLD设置或清除。IF(Interrupt Flag)中断允许标志,用于控制CPU是否允许响应可屏蔽中断请求。IF=1为允许响应可屏蔽中断请求,IF=0则禁止响应可屏蔽中断请求。该标志可由中断控制指令STI或CLI设置或清除。TF(Trap Flag)陷阱标志,用于单步操作。TF=1时,每执行一条用户程序指令后自动产生陷阱,进入系统的单步中断处理程序。TF=0时,用户程序会连续不断地执行,不会产生单步中断。5.
求出下列运算后各个标志的状态,并说明进位标志和溢出标志的区别。(1) 1278H + 3469H
(2) 54E3H - 27A0H(3) 3881H + 3597H
(4) 01E3H - 01E3H【解】CF进位标志,反映在运算结果的最高位有无进位或借位。OF溢出标志,反映运算结果是否超出了带符号数的表数范围。机器实际处理时判断是否溢出的方法是根据最高位的进位(CF)与次高位的进位是否相同来确定,若两者不相同则OF=1(表示有溢出),否则OF=0(表示无溢出)。(1)11 1000+ 10 100110 0001OF DF IF TF SF ZF -- AF -- PF -- CF
(2)10 0011- 10 000000 0011OF DF IF TF SF ZF -- AF -- PF -- CF
00OF DF IF TF SF ZF -- AF -- PF -- CF
+ 01 0111
运算后各个标志的状态: 运算后各个标志的状态: 运算后各个标志的状态:11
10 0011- 10 001100 0000运算后各个标志的状态:OF DF IF TF SF ZF -- AF -- PF -- CF
8086 CPU 中存储器的逻辑地址和物理地址之间有什么关系,各有多少值?【解】物理地址为某一个存储单元的实际地址,对于8086它是一个20位的地址。物理地址从00000H~FFFFFH变化,对应1MB的空间。逻辑地址,又称偏移地址或有效地址,即对段首的偏移量。偏移地址从0000H~FFFFH变化,对应64KB的空间。物理地址的获得方法是:将段寄存器的内容左移4位(即×16),与逻辑地址相加,得到20位物理地址。根据寻址方式的不同,偏移地址可以来自程序计数器(IP)或其它寄存器。7.
8086CPU使用的存储器为什么要分段,怎样分段?为什么要设置段寄存器,有几个段寄存器?各段寄存器有什么意义?【解】8086 CPU内部数据结构是16位的,即所有的寄存器都是16位的,而外部寻址空间为1MB,即需要20位地址线。为了能用内部寄存器中的16位地址来寻址1MB空间,8086将1MB空间以16字节为一个内存节,共分成64K个节。节的起始地址分别为00000H、00010H、00020H、?、FFFF0H,称为段基址。节的起始地址的后4位二进制数为全0,称为节的段地址。 用于存放段地址的寄存器称为段寄存器,根据其主要用途,分为代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS、附加段寄存器ES。代码段寄存器CS:用来存放代码段存储区域的起始地址。数据段寄存器DS:数存放程序的数据存储区的起始地址。堆栈段寄存器SS:用来存放堆栈存储区的起始地址。由堆栈段寄存器SS与堆栈指针寄存器SP来确定当前堆栈指令的操作地址。附加段寄存器ES:附加段是为某些字符串操作指令存放目的操作数而设置的一个附加的数据段,附加段寄存器用来存放该附加数据段存储区域的起始地址。8.
简述A0与BHE在8086系统中的应用。【解】8086系统中将1MB存储空间分成两个512KB的物理存储体。一个存储体由偶数地址组成,另一个存储体由奇数地址组成。用A0位来区分两个存储体。用BHE和A0的组合来选择存储体,其组合关系及操作情况如下:(1) 从偶地址读写一个字节(BHE A0=10)。AD15~AD8上的数据被忽略,字节内容通过AD7~AD0传送。(2) 从奇地址读写一个字节(BHE
A0=01)。在AD15~AD8上传送的数据有效,AD7~AD0上数据被忽略。(3) 从偶地址开始读写一个字(BHE A0=00)。在AD15~AD0上传送的数据同时有效。(4) 从奇地址开始读写一个字。第一个总线周期BHE A0=01,从奇地址读写低字节,在12
AD15~AD8上传送的数据有效。第二个总线周期BHE A0=10,从偶地址读写高字节,在AD7~AD0上传送的数据有效。9.
8086系统中为什么要采用地址锁存器8282?采用什么方法从分时复用地址/数据线中将数据和地址信号分离出来?【解】8086地址总线与数据总线是分时复用的,高8位数据有效信号BHE也是复用信号。在T1状态,总线上输出20位地址信号及BHE信号,而在T2~T4状态,BHE信号也失效。为了正确地交换数据,地址信号及BHE信号在T2~T4期间必须保持,所以需要设一组地址锁存器(3片8282),用于锁存地址及BHE信号。在T1状态,CPU送出地址锁存允许信号ALE,将ALE接向8282的选通输入端STB。当ALE=1时,8282输出跟随输入变化,用ALE的下降沿将总线上已经稳定的地址信号锁入8282。10.
CPU的主要区别是什么?【解】8088的内部结构和指令功能与8086完全相同,只是为了和原有的8位微处理器外围芯片兼容,其外部数据总线是8位的。11.
8086系统中的存储器采用什么结构?如何与地址、数据线连接?【解】8086系统中将1MB存储空间分成两个512KB的物理存储体。一个存储体由偶数地址组成,另一个存储体由奇数地址组成。用A0位来区分两个存储体。12.
8086的I/O端口寻址范围是多少?什么是I/O端口与内存分别独立编址?【解】8086的I/O端口使用16位地址A15~A0,I/O端口地址范围为0000H~FFFFH,可寻址空间为64KB。I/O端口与内存分别独立编址时,指令访问的是I/O端口还是内存,由地址信息无法区分,由M/IO信号区分是I/O端口的寻址与内存寻址 。13.
在对存储器和I/O设备读写时,要用到IOR(IO读)、IOW(IO写)、MR(存储器读)、MW(存储器写)信号,这些信号的作用是什么?它们在最小模式时可用怎样的电路得到?请画出示意图。 【解】IOR:该信号有效时,对IO端口执行读操作IOW:该信号有效时,对IO端口执行写操作MR:该信号有效时,对存储器执行读操作MW:该信号有效时,对存储器执行写操作在最小模式时可分别用以下电路得到上述信号:
RDM/IORDM/IOIOR
WRM/IO MW14.
什么是基地址和位移量,它们之间有何联系?【解】8086 CPU内部数据结构是16位的,而外部寻址空间为1MB。为了能用内部寄存器中的16位地址来寻址1MB空间,8086将1MB空间以16字节为一个内存节(Paragraph),共分成64K个节。节的起始地址称为段基址。偏移地址是存储地址对段首的偏移量。偏移地址从
0000H~FFFFH变化,对应64KB的空间。它们之间有何联系:物理地址=基地址×16+位移量。15.
设CS=1200H,IP=0FF00H,此时指令的物理地址是多少?指向这一物理地址的CS和IP的值是惟一的吗?【解】指令的物理地址:12000H+0FF00H=21F00H指向这一物理地址的CS和IP的值不是惟一的。16.
若CS=1000H,指出当前代码段可寻址的存储空间的大小和地址范围。【解】当前代码段可寻址的存储空间的大小:64KB当前代码段可寻址的存储空间的地址范围:10000H~1FFFFH17.
简述8086单CPU和多CPU系统各自主要特点,并说明有何差别。【解】单CPU系统中只有一个微处理器8086,所有总线控制信号由它产生,系统中总线控制逻辑信号可减少到最小。多CPU系统中包括两个以上处理器,其中一个为8086作为主处理器,其它处理器作为协处理器,一般多用于复杂的大中型系统。与8086协同工作的协处理器有两种,分别为数学协处理器和输入/输出协处理器。配置协处理器的系统,主处理器不用处理费时的复杂运算和I/O操作,因此可大大提高主处理器的运行效率。18.
时钟周期、T状态、总线周期、指令周期的定义是什么,什么情况下会出现空闲周期?【解】计算机是由一串脉冲控制进行工作的。这一串脉冲称为计算机的时钟,每个脉冲的时间称为一个时钟周期,每个脉冲称为一个时钟脉冲或一个T状态。若干个时钟脉冲完成一个基本操作。一种基本操作称为一个总线周期。执行一条指令所需要的时间称为指令周期19.
8086 CPU 读/写总线周期包含几个时钟周期,什么情况下需要插入TW等待周期,插入TW的数量取决于什么因素【解】8086 CPU 读/写总线周期包含4个时钟周期。读总线周期:在T3状态内存或I/O端口将数据送上数据总线。CPU准备读入数据。在T3的前沿(下降沿),CPU查询READY引脚,若内存或外设工作速度较慢,来不及在基本总线周期内完成数据传送工作,则应通过逻辑电路在T3前沿之前产生READY低电平信号,T3前沿若查到READY为低电平,则在T3后自动插入一个等待状态TW,在TW前沿继续查询READY信号,若READY仍为低电平,则继续插入TW,直到READY上升为高电平,则等待状态结束,进入T4状态。写总线周期:在T3状态中,T2状态有效的信号继续保持有效,继续向外部写数据。在T3的下降沿查询READY,若内存或I/O端口在标准总线周期内来不及接收数据,则应通过逻辑电路在T3前沿之前产生READY低电平信号。CPU查到READY为低,则在T3之后插入一个TW,并在TW前沿继续查询READY,直到READY上升为高电平,则结束等待进入T4状态。20.
8086 CPU 复位后,有哪些特征?8086 系统的起动程序如何去找?【解】8086 CPU 复位后:所有内部寄存器、标志寄存器IR及ES、SS、DS段寄存器清0,指令队列缓冲器清空,指令指针寄存器(IP)清0,CS被置为FFFFH;复位时,所有三态输出总线变为高阻状态,这些三态总线包括:AD15~AD0,A19/S6~A16/S3,BHE/S7,S2(M/IO),S1(DT/R),S0(DEN),KCOL,WR,RD,INTA 等。ALE、HLDA、QS0、QS1等信号降为低电平,RQ/GT 0 、RQ/GT 1等信号上升为高电平。14
8086 系统的起动程序从CS×16+IP即FFFF0H地址开始执行。21.8086 系统在最小模式时应该怎样配置?试画出这种配置并标出主要信号的连接关系。【解】8086 系统在最小模式时的典型配置:一片8284A时钟发生器产生系统所需要的时钟信号CLK,同时对外部READY信号和系统复位信号RESET进行同步,其输出送向8086应相引脚。三片8282(或74LS373)地址锁存器用于20位地址和BHE信号锁存,使得整个总线读写周期期间地址信号始终有效,以支持8086CPU地址/数据总线分时复用的工作方式。两片8286总线驱动器(又称总线收发器或总线驱动器)。当系统所连存储器和外设较多时,为了提高数据总线的驱动能力,可以接入8286芯片。该模式的配置图见教材图2-8。22. 画出最小模式时读存储器或I/O设备的总线周期时序。【解】8086 最小模式下的读周期时序见教材图2-15。
第3章 从8086到Pentium系列微处理器的技术发展教材习题解答1.
简述80286的特点和保护模式的保护功能。【解】80286的特点:① CPU内部分为四个处理部件:EU(执行部件)、AU(地址部件)、IU(指令部件)和BU(总线部件)。这四个处理部件可以并行的进行操作,提高了处理速度。② 数据线和地址线完全分离。 在一个总线周期中, 当有效数据出现在数据总线上的时候,下一个总线周期的地址已经送到地址总线,形成总线周期的流水作业。③ 具有“实地址模式”(Real Address Mode,简称为“实模式”)和“保护虚地址模式”(Protected Virtual Address Mode,简称为“保护模式”)”两种工作模式。④ 能运行实时多任务操作系统,支持存储管理和保护功能。⑤ 实现了虚拟存储管理。⑥ 与 80286 配合使用的数学协处理器是80287,它基本与8087相同,但适应80286 的两种工作模式。保护模式体现了80286的特色,主要是对存储器管理、虚拟存储和对地址空间的保护。在保护模式下,可为每个任务提供多达1GB的虚拟存储空间和保护机制,有力地支持了多用户、多任务的操作。那些内存装不下的逻辑段,将以文件形式存在外存储器中,当处理器需要对它们进行存取操作时就会产生中断,通过中断服务程序把有关的程序或数据从外存储器调入到内存,从而满足程序运行的需要。保护模式为不同程序设置了四个特权级别,可让不同程序在不同的特权级别上运行。依靠这一机制,可支持系统程序和用户程序的分离,并可进一步分离不同级别的系统程序,大15
大提高了系统运行的可靠性。2.
简述80386 的特点、80386引脚与8086的区别。【解】80386 的特点:80386是全32位结构,它的外部数据总线和内部数据通道,包括寄存器、ALU和内部总线都是32位的。80386 有 3 种工作模式:实模式、虚拟86模式、386的保护模式。80386的硬件结构可分成6个逻辑单元,它们以流水线方式工作,运行速度可达4MIPS。其硬件设计有支持段页式存储管理部件,易于实现虚拟存储系统。在保护模式下的分段寻址体系,与操作系统相配合可以组成虚拟存储器系统,一个任务的最大虚拟空间可达2=64 TB。80386硬件支持多任务处理,用一条指令就可以实现任务切换。80386设置了4级特权级,按优先顺序依次为0级、1级、2级、3级,前3级用于操作系统程序,后1级用于用户程序。80386引脚与8086的区别见表3-1。表3-1
80386引脚与8086的区别
简述80386 CPU寄存器的组成、特点及作用。【解】80386共有34个寄存器,按功能可分为:通用寄存器、段寄存器、状态和控制寄存器、系统地址寄存器、调试寄存器及测试寄存器。16
80386的8个通用寄存器和8086通用寄存器相同,只是扩展到32位,分别是:EAX(累加器)、EBX(基址寄存器)、ECX(计数寄存器)、EDX(数据寄存器,在I/O指令中可用作端口地址寄存器,乘除指令中用作辅助累加器)、ESI(源变址寄存器)、EDI(目的变址寄存器)、EBP(基址指针寄存器)、ESP(堆栈指针寄存器)80386的6个段寄存器分别是:CS代码段寄存器,DS数据段寄存器,SS堆栈段寄存器,ES、FS、GS为三个附加段寄存器。在实方式下,段寄存器的用法和8086系统相同,只是增加了两个附加段寄存器FS、GS。在保护方式下,段寄存器称为段选择符,与描述符配合实现段寻址。64位的段描述符寄存器对程序员是不可见的。为了加快对内存中描述符表的查询速度,在段选择符内容装入时,段描述符同时装入段描述符寄存器。这样,只要段选择符内容不变,就不需要到内存中查描述符表,从而加快了段地址寻址的速度。描述符寄存器的内容包括段基地址、段限和段属性。段限指出本段的实际长度,与段属性一起主要用于段保护,防止不同任务进入不该进入的段进行操作。80386的状态和控制寄存器由标志寄存器EFLAGS、指令指针寄存器EIP和四个控制寄存器CR0~CR3组成。80386有四个系统地址寄存器,用来保护操作系统需要的保护信息和地址转换表信息,定义目前正在执行任务的环境、地址空间和中断向量空间。80386为调试提供了硬件支持。芯片内设有DR0~DR7 八个调试寄存器,调试寄存器主要为系统程序设计人员准备。8位的测试寄存器。其中TR0~TR5保留备用。TR6~TR7用于控制对转换后备缓冲器(TLB)中RAM和CAM(内容可寻址寄存器)的测试。TR6是测试命令寄存器。TR7为测试数据寄存器,其中保存测试结果的状态。4.
简述80386的三种工作模式的特点和异同。【解】80386 有 3 种工作模式:实地址模式(简称为实模式),保护虚拟地址模式(简称为保护模式),虚拟8086模式(简称为虚拟86模式)。实模式:80386加电启动或复位后自动进入这一模式。实模式主要功能是初始化80386,为建立保护模式做准备。在实模式下,80386的工作方式与 8086 相似,可保持8兼容:地址总线仍为 20 位,不用虚拟地址的概念,存储器最大容量仍为1MB,其寻址机制、存储器管理均与8086相同;数据总线为32 位,数据总线与地址总线是相互独立的,内部寄存器主要作为 16 位使用,操作数默认长度是16位,也可以按 32 位使用,这时要在指令加上越权访问前缀;中断处理结构与8086相同;80386具有4级特权级,程序运行在最高级(0级)上,除少数几条指令外,80386的绝大部分指令均可在实模式下执行。保护模式:保护模式是80386最常用的工作模式,通常在80386加电启动或复位后首先进入实模式,完成初始化工作后立即进入保护模式。所谓保护,主要是对存储器的保护,即对存储器中存放的程序和数据的保护。80386运行在保护模式下,可实现对多任务、多道程序的复杂管理,也只有在保护模式下,80386才能够真正发挥其强大的功能。在保护模式下,采用虚拟存储器的概念,存储空间可使用虚拟地址空间、线性地址空间、17
物理地址空间。通过存储器管理部件,操作系统可以将磁盘等外存设备映射到内存,使程序员可使用的逻辑地址空间大大超过实际内存的物理地址空间。程序指令的操作数和段内的偏移地址都是32位,地址总线也是32位,物理地址空间为2B=4GB,但对内存单元的访问要通过一种称为描述符的数据结构才能实现。80386具有4级特权级,可实现程序与程序之间、用户程序与操作系统之间的隔离和保护,为多任务操作系统提供了有效的支持虚拟86模式:在虚拟86模式下,不用虚拟地址的概念,存储器最大容量仍为1MB,其寻址机制与8086相同。但存储管理机制与8086不同,它把1MB的存储空间分为256个页面,每页4KB。这时,当多道程序同时运行时,可以使其中的一个或多个任务使用虚拟86模式,并使某一个任务占用存储器的某些页面,而另一个任务占用存储器的另外一些页面,这样就可将多个任务分别转换到物理存储器的不同存储位置,实现了多任务同时运行。在虚拟86模式下,程序运行在最低特权级(3级)上,这时80386的一些特权指令是不能使用的。80386的上述3种工作模式可以相互转换。在实模式下,通过LMSW或数据传送指令,将控制寄存器CR0的第0位(即PE,允许保护控制位)置为1,即可进入保护模式。通过数据传送指令,将PE置为0,即可从保护模式返回到实模式。在保护模式下,通过执行IRETD指令或进行任务转换,可以进入虚拟86模式。通过中断操作,可以从虚拟86模式转换到保护模式。5.
什么是逻辑地址和物理地址,逻辑地址、线性地址和物理地址三者之间的关系是什么?【解】逻辑地址:用户程序中所使用的地址称为逻辑地址。物理地址:完成存储器单元或I/O端口寻址的实际地址。程序提供的逻辑地址,包括偏移地址和段选择符两部分。逻辑地址由两部分组成:低32位为偏移地址,可指向4GB空间中的任何地址;高16位为选择符,指向段描述符表(段描述符表由操作系统管理)的一个表项,即一个段描述符。段描述符给出一个段基地址,该段基址与偏移地址相加,产生线性地址。当不采用分页机制时,该线性地址就可用作存储器的物理地址,即出现在地址总线上的地址。当采用分页机制时,线性地址通过分页机构再转换成物理地址。6. 简述80486 CPU 的组成及各部分的作用。【解】486微处理器的内部结构包括九个功能单元,这些单元是:总线接口单元、高速缓存(CACHE)、指令预取单元、指令译码单元、控制单元、整数和数据通路单元、浮点单元、分段单元和分页单元等。总线接口单元用于数据传输、指令预取和处理器内部单元与外部系统的控制功能。 CACHE单元存储当前读入的指令、操作数及其它数据的副本。指令预取单元:当指令执行中不使用总线周期时,指令预取单元就通过总线接口单元预取指令。指令译码单元从指令预取单元接受指令,将其译码成低级控制信号和微代码入口指针。 控制单元的功能是解释指令字和从译码单元获得的微代码入口指针。整数(数据通路)单元:数据在整数单元中存储并完成386处理器指令及几条新增指令的所有算术逻辑运算。浮点单元执行协处理器387同样的指令组。 3218
分段单元将程序发出的逻辑地址转换成线性地址,并将此线性地址发向分页单元和CACHE。分页单元用把程序和数据一部分存在存储器中、一部分存在磁盘上的方法,能够存取的数据结构远大于实际的物理空间。7. Pentium 微处理器采用了哪些新的技术和结构?【解】Pentium新型体系结构的特点可以归纳为以下四个方面:(1) 超标量流水线超标量流水线(Superscalar)设计是Pentium处理器技术的核心。它由U与V两条指令流水线构成。每条流水线都拥有自己的ALU、地址生成电路和数据CACHE的接口。这种流水线结构允许Pentium在单个时钟周期内执行两条整数指令,比相同频率的486DX CPU性能提高了一倍。(2) 独立的指令CACHE和数据CACHEPentium片内有两个8K CACHE B,一个作为指令CACHE,另一个作为数据CACHE,即双路CACHE结构,指令和数据分别使用不同的CACHE,使Pentium的性能大大超过486微处理器。(3) 重新设计的浮点单元Pentium的浮点单元在486的基础上进行了彻底的改进,其执行过程分为8级流水,使每个时钟周期能完成一个浮点操作。(4) 分支预测Pentium提供一个称为分支目标缓冲器BTB(Branch Target Buffer)的小CACHE来动态地预测程序分支,当一条指令导致程序分支时,BTB记下这条指令和分支目标的地址,并用这些信息预测这条指令再次产生分支时的路径,预先从此处预取指令,保证流水线的指令预取步骤不会空置。因此循环越多,BTB的效益越明显。
指令系统教材习题解答1.
若DS=3000H,BP=2000H,SI=1000H,[32000H]=00H,[32001H]=40H,SS=3000H,[31000H]=20H,[31001H]=60H,[33000H]=50H,[33001H]=60H,说明下列各条指令执行后,AX中的内容是什么?并说明各条指令中源操作数的寻址方式。(1) MOV
AX,DS(3) MOV
AX,[SI](5) MOV
AX,[BP+SI]【解】
(2) MOV AX,[2000H] (4) MOV AX,[BP]19
(1) AX=3000H
寄存器寻址(2) AX=4000H
直接寻址(3) AX=6020H
寄存器间接寻址(4) AX=4000H
寄存器间接寻址(5) AX=6020H
基址加变址寻址2.
指出下列指令中的非法指令。(1) MOV BX,AL(3) PUSH 4567H(5) ADD AL,148H(7) MOV BH,SI【解】非法指令:(1) MOV
BX,AL(3) PUSH
BX和AL的长度不一致
CS段寄存器不能作目的操作数 只能将寄存器或存储单元的内容压入堆栈,不能是立即数 运算溢出 立即数不能直接传送给DS段寄存器 BH和SI的长度不一致 目的操作数不能是立即数 (2) MOV
(4) XCHG VAR1,VAR2
(5) ADD AL,148H (7) MOV
38H,AL(1)
CS,2000H (4) XCHG VAR1,VAR2 (6) MOV
DS,2000H (8) SUB
38H,AL 两个存储单元之间不能直接交换数据 3.
若SP=2000H,AX=3355H,BX=4466H,试指出下列指令或程序段执行后有关寄存器的内容。
执行后AX=?,SP=?
执行后AX=?,CX=?,DX=?,SP=?(2) 执行后AX=3355H,CX=3355H,DX=4466H,SP=2000H 【解】(1) 执行后AX=3355H,SP=1FFEH4.
请按下面的要求写出相应的汇编指令或指令序列。(1) 将1234H送入DS中。(2) 将5678H与AX中的数相加,结果放在AX中。(3) 将DATAX和DATAY相加,其和放在DATAY中。(4) 将AX中的高4位变为全0。(5) 将BX中的低2位变为全1。(6) 将CX中的D3~D7位取反。【解】(1)
MOV AX,1234HMOV DS,AX20
ADD AX,5678H (3)
MOV AX,DATAXADD AX,DATAY MOV DATAY,AX(4)
AND AX,0FFFH (5)
OR AX,0003H (6) MOV AX,CXAND AX,07H XOR CX,0FFFFH AND CX,0FFF8H ADD CX,AX5.
若AL=0FFH,BL=03H,指出下列指令执行后标志AF、OF、ZF、SF、PF、CF的状态。(1) ADD BL,AL
(3) SUB BL,AL
(5) AND BL,AL
(7) CMP BL,AL【解】执行后:(1) ADD (2) INC (3) SUB (4) NEG (5) AND (6) MUL (7) CMPBL,AL
BL BL,ALAF 1 0 1 1 任意值 任意值 1 任意值 任意值 任意值OF 0 0 0 0 0 1 0 1 0 0ZF 0 0 0 0 0 任意值 0 任意值 0 0SF 0 0 0 1 0 任意值 0 任意值 1 1PF 0 0 0 0 1 任意值 0 任意值 1 1CF 1 不影响 1 1 0 1 1 1 0 0(2) INC
BL (4) NEG
BL (6) MUL
BL (8) IMUL BL(9) OR
BL,AL (10)XOR
BL,BL(8) IMUL BL (9) OR
BL,AL (10) XOR BL,BL6.
已知存储器中有两个压缩BCD码存放在从BUF开始的连续4个单元中(高字节放在高地址单元),试编制两数相减的程序,结果存放在后面的两个单元中。 【解】程序段如下:MOV
BX,BUF MOV
AX,[BX] MOV
CX,[BX+2] SUB
AL,CL MOV
DL,AL DAA21
AL,CHDAAMOV
[BX+4],AX7.
假设DX=36A5H,CL=3,CF=1,确定下列各条指令执行后DX和CF的值。
【解】(1) 指令执行后DX:1B52H,CF:1(2) 指令执行后DX:06D4H,CF:1(3) 指令执行后DX:6D4AH,CF:0(4) 指令执行后DX:364AH,CF:1(5) 指令执行后DX:0C6D4H,CF:1(6) 指令执行后DX:362DH,CF:1(7) 指令执行后DX:6CA5H,CF:0(8) 指令执行后DX:06A5H,CF:1(9) 指令执行后DX:0B529H,CF:1(10)指令执行后DX:0A6D4H,CF:18.
编写程序段将寄存器AL中的8位二进制数的内容颠倒过来,即将原来的最高位变为最低位,次高位变为次低位,以此类推,若原AL的内容为B,则颠倒之后变为B。【解】程序段如下:XOR AH,AHMOV CX,8LP1:
SHR AL,1RCL AH,1LOOP LP1MOV AL,AH
;AH清零 ;重复8次 ;逻辑右移,将最最低位移入CF
DL,1 (6) ROL
DL,CL (10)RCR
DX,CL (7) SAL
DH,CL ;带进位的循环左移,将CF移入AH的最低位9.
执行下列程序段,指出各相关寄存器的内容。MOVDECSUBANDMOVSAL
AL,25HXCHG
AL,AHPUSH
BL【解】各相关寄存器的内容:MOVDECSUBANDMOVSALADD
;AX:0A0BH
;AX:0A0AH
;AX:090BH ;AX:000BH ;CL:03H ;AX:0058H
;AX:007DH
;AX:7D00H ;AX:7D00H XCHG
;BX:7D00H
;BX:7D01H10.
用串操作指令将100H个字符从2100H处搬到1000H处,并且从中检索与AL中所存字符相同的存储单元,并将该单元的内容替换成空格,本程序只替换检索到的第一个相同的单元。请在下列空格中填入合适的指令,使程序段完成上述功能。┇
CX,100H CLD
DI,1000H MOV
[DI],20H K1:
┇【解】(1) MOV
DI,1000H(2) REP
MOVSB(3) REPNE SCASB(4) DEC
试分析下列程序段,如果AX和BX的内容分别为下列5种情况,问程序分别转向何处?23
(1) AX=147FH,BX=80DCH(2) AX=0B586H,BX=54B5H(3) AX=42C0H,BX=608AH(4) AX=0D023H,BX=9FD7H(5) AX=94B7H,BX=0B568H
AX,BX JNO
AX,BX JNC
L5【解】(1) L1;不溢出,转移到L1(2) L1;不溢出,转移到L1(3) L2;溢出,不转移到L1,进位为0,转移到L2(4) L3;溢出,不转移到L1,进位为1,不转移到L2,借位为0,转移到L3(5) L4;溢出,不转移到L1,进位为1,不转移到L2,借位为1,不转移到L3,不溢出,转移到L412.
编程求出AX中存放的16位二进制数中‘1’的个数,将其存入CL中(若AX=1011B则将8存入CL)。【解】程序段如下:MOV CX,16XOR BX,BXL1:
SHL AX,1RCL BL,1ADD BH,BLXOR BL,BLLOOP L1MOV CL,BH
;最低位移入CF ;CF移入最低位13.
已知BUF单元有一个单字节无符号数X,按要求编写一程序段计算Y(仍为单字节数),并将其存于累加器。
3X,X&20 X-20,X≥20【解】程序段如下:XOR AX,AXMOV AL,BUF24
CMP AL,20JNB L1MOV BL,3MUL BLJMP ENDL1:
SUB AX,20END:
汇编语言程序设计
教材习题解答1.
下列语句在存储器中分别为变量分配多少字节?VR1
DUP(?)CONT
DUP(?)VR4
DUP(?,CONT DUP(0))VR5
DB ‘HOW ARE YOU?’【解】VR1:2B ;
VR2:8B ;
CONT:1B ;
VR3:40B;
VR4:44B;2.
根据下列数据定义,写出各条指令执行后的结果TABLE DW 100
DUP(?)ARRAY DB ‘ABCD’RES
MOV BX,TYPE
MOV CX,LENGTH
DI,LENGTH
ARRAY DI=(
)【解】(1)
DI=425 :12B
下面定义的是一个数据段,请图示它们在存储器中的存放形式。DATA
SEGMENT A B C N X YDB
1,2,3,4
0ABCDHDATA
ENDS【解】注:括号中为段内偏移地址
试定义一个完整的数据段,首先将10个压缩的BCD码29存放在ARRAY变量字节单元,紧接着把-28,6,45,39,3存放在ALPHA数组变量的字单元中,最后从字节变量BUFFER单元开始预留100个空单元备用。 【解】DATA
SEGMENT ARRAY
10 DUP(29H) ALPHA
-28,6,45,39,3
100 DUP(?) DATA
请定义一个结构,描述一个学生的简况。该结构应含有以下内容:姓名、年龄、性别、籍贯、民族、入学成绩、名次。说明如何定义结构变量和引用结构变量。 【解】STUDENTSTRUCNAME DW 5 DUP(?)
(?) HOMEPLA RACE
GRADEDW 10 DUP(?) DW 5 DUP(?) DB
ENDS定义结构变量的格式:结构变量名
〈字段值表〉例如:STU1
STUDENT 〈1,‘ZHANG’〉引用结构变量的格式:结构变量名.结构字段名,例如:STU1.NAME6.
实现满足下面要求的宏定义。(1) 任意两个单元中的数据相加存于第三个单元中。(2) 任意8位寄存器中的数据转换为ASCII码并在屏幕上显示。【解】(1) 宏定义的代码段如下:ADDM MACRO M1,M2,M3AX,[M1]AX,[M2][M3],AX MOV
MOVENDM(2) 设8位寄存器存储的是无符号数,最高位是百位。宏定义的代码段如下:ADDM MACRO
;形式参数Y代表一个8位寄存器MOV
DL,100DIV
AL,30HMOV
;显示百位数
;存余数XOR
AL,30HMOV
;显示十位数
;存余数ADD
AL,30HMOV
;显示个位数7.
对下面程序进行注释,并说明其功能。27
SEGMENT DB ‘123ABC’ENDSSEGMENTASSUME CS:CODE,DS:DATA DATA
CODESTART: MOV
AX,DATAMOV
AL,[BX]XCHG
AH,4CHINT
START【解】注释如下:DATA
;数据段开始 DB ‘123ABC’
;数据段结束
;代码段开始 DATA
SEGMENTASSUME
CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
AL,[BX]XCHG
;系统功能调用,功能号:2 ,;将字符1、2、3、“A”、“B”、“C”送屏幕显示LOOP
;CX=6,循环6次 ;装填数据段
;传送变量的地址MOV
AH,4CHINT
;返回DOS ;代码段结束28
;源程序结束程序的功能:显示从A开始的6个字节单元中的字符。8.
编程将CX、DX作为双字联合右移四位(设CX为高16位),最高4位送入全1。【解】程序代码如下:CODE
;代码段开始ASSUME
CS:CODESTART: MOV
DX,1LOOP LPOR
AX,0F000HMOV
AH,4CHINT
ENDS;返回DOS
;代码段结束
;源程序结束 END
编程把从A单元开始存放的3个单字节无符号数按递增顺序排序后存回原处。【解】程序代码如下:DATA
;数据段开始 DB 3 DUP(?)
;数据段结束
;代码段开始 DATA
SEGMENTASSUME
CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
AL,[BX]CMP
AL,[BX+1]JAE
;[BX]&[BX+1],交换
;装填数据段
;传送变量的地址 CMP
AL,[BX+2]JAE
;[BX]&[BX+2],交换EX1: XCHG
AL,[BX+1]XCHG
AL,[BX]MOV
AL,[BX]JMP
CMP2EX2: XCHG
AL,[BX+2]XCHG
AL,[BX]29
AL,[BX]CONT1: MOV
AL,[BX+1]CMP
AL,[BX+2]JB
AL,[BX+2]XCHG
AL,[BX+1]CONT2: MOV
AH,4CHINT
;返回DOS ;[BX+1]&[BX+2],交换 ;代码段结束;源程序结束 END
试编写一段程序比较从ARRAY开始存放的3个16位有符号数。根据比较结果置FLAG标志。(1) 如果3个数都不相等,置FLAG为0。(2) 如果3个数中有2个数相等,置FLAG为1。(3) 如果3个数都相等,置FLAG为2。【解】程序代码如下:DATA
;数据段开始ARRAY DW 3 DUP(?)FLAG
ENDS;数据段结束
;代码段开始 CODE
SEGMENTASSUME
CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
;装填数据段;传送变量的地址 LEA
BX,ARRAYMOV
AX,[BX]CMP
AX,[BX+2]JE
CONT1EQU1:CONT1: MOV
AX,[BX+4]JE
CONT2EQU2:CONT2: ADD
AX,[BX+2]CMP
AX,[BX+4]JE
; [BX]=[BX+2],执行MOV DL,1
; [BX]=[BX+4] ,DL+130
EQU3:CONT3: ADD
; [BX]=[BX+2]=[BX+4] ,DL-1EQU4: MOV
FLAG,DLMOV
AH,4CHINT
21H;返回DOS CODE
;代码段结束;源程序结束 END
分析下列程序,指出运行结果。DATA
SEGMENTSUM
SEGMENTASSUME
CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
SUM,AXMOV
AH,4CHINT
START请问:(1) 该程序完成的功能是_______________________________。(2) 程序执行后,SUM单元的内容是_______________。【解】(1) 该程序完成的功能是计算0~20的偶数和。(2) 程序执行后,SUM单元的内容是110。12.
从ARRAY开始的单元中存有10个16位无符号数,试编一完整程序找出其中最小数并存入MIN单元。【解】程序代码如下:DATA
;数据段开始31
ARRAY DW 0F454H,4540H,0D214H,8354H,8210H,0A673H,5656H,0021H,0567H,4228HDW ?
;数据段结束
;代码段开始 MIN
SEGMENTASSUME
CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
;装填数据段;传送变量的地址 LEA
BX,ARRAYMOV
AX,[BX]MOV
CX,9LP1:
AX,[BX]JB
CONT1;AX&[BX],转移 ;AX&=[BX],AX←[BX] MOV
AX,[BX]CONT1: LOOP
MIN,AXMOV
AH,4CHINT
;返回DOS ;代码段结束;源程序结束 END
START13. 从DAT开始的数据区中放有100个8位的无符号数,编程统计其中奇数的个数,将结果存入RESULT单元。【解】程序代码如下:DATA
SEGMENTDATRESULT
;数据段开始 DB 26,45,44,32,90,2,1,81,2,120,5?? DB ?
;数据段结束
;代码段开始 DATA
SEGMENTASSUME
CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
BX,DATXOR
CX,100LP1: MOV
;装填数据段 ;传送变量的地址32
DHCONT1: INC
;余数在AH中
;DH用作计数器MOV
RESULT,DHMOV
AH,4CHINT
ENDS;返回DOS ;代码段结束
;源程序结束 END
利用DOS系统功能调用,将键盘输入的小写字母转换成大写字母输出显示,直到输入“$”字符时停止输出。【解】调用1号系统功能,键入的字符送AL寄存器,并送屏幕显示输出。调用2号系统功能,将DL寄存器中的内容送屏幕显示输出。程序代码如下:CODE
;代码段开始ASSUME
CS:CODESTART:INPU: XOR
AX,AX MOV
;键盘输入单字符送ALMOV
BL,‘$’CMP
AL,20HMOV
INPUEXT: MOV
AH,4CHINT
21HCODEENDS
;将DL中的字符送屏幕显示 ;转换成大写字母 ;代码段结束
;源程序结束 END
建立两个过程:一个过程将16进制数变换成ASCII码,一个过程将ASCII码字符在屏幕上显示输出。【解】程序代码如下:DATA
SEGMENTLIST
;数据段开始
;存储一个十六进制数(1位) ;存储转换的ASCII码 ;数据段结束33
;代码段开始ASSUME
CS:CODE,DS:DATA,ES:DATASTART: MOV
AX,DATAMOV
DS,AXCALL
CHANGECALL
AH,4CHINT
AL,LISTCMP
AL,30HJMP
NEXT2NEXT1:NEXT2: ADD
AL,37H MOV
ASC,ALRETCHANGEOUTPTR
ENDP PROCMOV
DL,ASCMOV
21HRETOUTPTR
;代码段结束
;源程序结束
;AL&9,转移
;装填数据段 CODE
要求编写程序比较两个最大长度为100个字符的字符串ALFA1和ALFA2是否相等,若相等则输出显示“All Right!”,否则输出显示“Error!”。【解】完成输出显示功能时,调用9号系统功能,功能是将指定的内存缓冲区中的字符串在屏幕上显示出来,缓冲区的字符串以“$”为结束标志。LEN指定的内存中存储两字符串中长串的长度,否则,即使两串相等,由于字符串后面的随机字符,将影响判断结果。程序代码如下:DATA
;数据段开始ALFA1 DB 100 DUP(?)ALFA2RESULT1RESULT2 DB 100 DUP(?) DB
‘All Right!$’ DB
‘Error!$’;字符串长度 LEN
ENDS;数据段结束
;代码段开始 CODE
SEGMENTASSUME
CS:CODE,DS:DATA,ES:DATASTART: MOV
AX,DATAMOV
;装填数据段 ;装填附加段;传送源串的地址 LEA
BX,ALFA1MOV
BX,ALFA2MOV
;传送目的串的地址 ;清方向标志,使正向传送XOR
CL,LENREPNZ
;若ZF=1,说明两串相等,转EQQLEA
DX,RESULT2 ;输出显示“Error!”JMP
OUT1EQQ: LEA
DX,RESULT1 ;输出显示“All Right!”OUT1:
AH,4CHINT
;返回DOSCODE
;代码段结束;源程序结束 END
有一个最大长度为80个字符的字符串STRING,试编写程序找出第一个空格的位置(用00H~4FH表示),并存入CL中。若该串无空格,则将0FFH存入CL中。【解】程序代码如下:DATA
SEGMENTSTRING
;数据段开始 DB 80 DUP(?)LEN
;数据段结束 ;代码段开始ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV
AX,DATAMOV
;装填数据段 ;装填附加段
;要查找的关键字(空格)LEA
BX,STRINGMOV
DI,BX ;传送串的地址35
CL,LENCLD
;清方向标志,使正向传送 REPNZ
CL,0FFHJMP
STOPFOUND: MOV
AL,LENSUB
CL,ALSTOP: MOV
AH,4CHINT
;搜索关键字
;若ZF=1,说明找到,转FOUND
;CL中是剩余的字符数
;返回DOS ;代码段结束;源程序结束 END
在AX中存放着压缩BCD码的十进制数。要求:(1) 将AH中的数转换成二进制数。(2) 求AH与AL中数的和,将结果转换成ASCII码,然后在屏幕上显示出来。【解】(1) 将AH中的数转换成二进制数,结果存于DX中。程序代码如下:CODE
;代码段开始ASSUME CS:CODESTART: MOV
AH,0FHMOV
AH,4CHINT
ENDS;返回DOS
;百位加千位结果存于DX中
;移位次数
;百位结果存于DX中
;保存AX中的数据 ;千位置0 ;千位移到低4位 ;代码段结束
;源程序结束 END
START(2) 求AH与AL中数的和,将结果转换成ASCII码,然后在屏幕上显示出来。程序代码如下:CODE
;代码段开始36
ASSUME CS:CODESTART: MOV
AH,30HMOV
AH,0FHADD
AH,30HMOV
AL,30HMOV
AL,0FHADD
AL,30HMOV
;调用2号系统功能,输出单字符
;取低4位 ;转换成ASCII码
;调用2号系统功能,输出单字符
;移位次数 ;十位移到低4位
;调用2号系统功能,输出单字符
;取低4位 ;转换成ASCII码
;调用2号系统功能,输出单字符
;保存AX中的数据
;移位次数 ;千位移到AH低4位 ;转换成ASCII码 ;转换成ASCII码MOV
AH,4CHINT
;返回DOS ;代码段结束;源程序结束 END
已知从BUF单元开始存放着10个8位无符号数,要求编写汇编语言程序将这10个数去掉一个最大的,再去掉一个最小的,将其余的数的算术平均值计算出来并存于AVERG单字节单元。【解】注意:10个8位无符号数的累加和有可能超过8位,需要16位的寄存器存储。寄存器分配:DL:最小值;DH:最大值;CX:循环次数;AX:累加和。本题的思路:找出最小值,暂时存于DL,找出最大值,暂时存于DH,求10个数的和,再减去最小值和最大值,求8个数的平均值。程序代码如下:37
SEGMENTBUFAVERG
;数据段开始 DB 23H,26H,44H,98H,32H,72H,39H,62H,75H,48H DB ?
;数据段结束
;代码段开始 DATA
SEGMENTASSUME CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
BX,BUFXOR
DL,[BX]MOV
DH,[BX]MOV
AL,[BX]LP1: INC
DL,[BX]JBE
DL,[BX]CONT1: CMP
DH,[BX]JAE
DX,[BX]CONT2: ADD
AL,[BX]ADC
;平均值在AL中
;if DH&[BX], then DH←[BX] ;if DL&=[BX], 转移
;if DL&[BX], then DL←[BX] ;if DL&=[BX], 转移
;装填数据段 ;传送变量的地址MOV
AVERG,ALMOV
AH,4CHINT
;返回DOS ;代码段结束;源程序结束 END
START20. 编程:(1)
键入某班学生(30人)的计算机考试成绩。成绩按学号(1~30)排放在SCORE数据区中。(2)
按考分排序(降序),列出相应学号到ORDER数据区中。38
在屏幕上显示前三名学生及成绩。【解】程序代码如下:DATA
SEGMENTSCORE DB 30 DUP(?)ORDER;数据段开始 ;存储按学号排序的成绩
;按成绩排序的学号 DB 30 DUP(?) BUFF
DB 30 DUP(?)DATA
ENDS; 暂存降序排序的成绩 ;数据段结束
;代码段开始 CODE
SEGMENTASSUME CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
;装填数据段;传送变量的地址 LEA
BX,ORDERMOV
AL,1LP1:
[BX],ALINC
LP1;存储学号初始值 ;以下按位接收键盘键入的成绩,成绩以回车符0DH间隔;传送变量的地址 LEA
BX,SCOREXOR
CX,30INPUT: MOV
;等待键盘输入,ASCII码送AL寄存器 CMP
AL,0110000BJB
;输入的不是数字,有可能是回车符 CMP
AL,0111001BJA
;输入的不是数字,也不是回车符,结束程序 SUB
AL,30HMOV
DH,10XCHG
INPUTNEXT1: CMP
AL,0DHJNE
STOP;输入的不是回车符,也不是数字,结束程序 ;是回车符,成绩存入存储区
;暂存输入的数字 MOV
[BX],DLINC
DL,DLLOOP
INPUT;DL,准备转换下一个输入的数据 ;以下成绩存入暂存区;传送数据表首地址 LEA
BX,SCORELEA
SI,BUFFMOV
CX,30LP2:
AL,[BX]MOV
[SI],ALINC
CHLOP0: LEA
SI,BUFFLEA
BX,ORDERMOV
DL,DLLOP1:
AL,[SI]CMP
AL,[SI+1]JGE
AL,[SI+1]MOV
[SI],ALMOV
AL,[BX]XCHG
AL,[BX+1]MOV
[BX],ALOR
DL,01HNEXT: INC
BX,ORDERMOV
CX,3LP33: CALL
;SI←暂存区首地址 ;以下用冒泡法排序
;CH←数据长度
;CH←外循环次数
;SI←数据表首地址(成绩)
;BX←数据表首地址(学号)
;CL←内循环(比较)次数
;交换标志DL←0
;比较相邻两个数
;顺序正确(小数在后),转NEXT
;顺序不对(大数在后),交换两数
;交换学号
;交换标志BL←1
;调整地址指针
;内循环未完,转LOP1继续内循环
;交换标志为0,说明顺序排好,转STOP
;外循环未完,转LOP0继续外循环 ;以下显示前三名学号和成绩40INC
DL,0001101BMOV
DL,0001010BMOV
BX,BUFFMOV
CX,3LP43: CALL
DISPLAYINC
DL,0001101BMOV
DL,0001010BMOV
STOPDISPLAY PROCXOR
AL,[BX]MOV
DL,0AHDIV
AL,30HMOV
AL,[BX]MOV
DL,0AHDIV
AH,30HMOV
DL,0100000BMOV
;显示回车
;显示换行
;显示回车
;显示换行 ;定义显示子程序
;显示十位数
;显示个位数41
21HRETDISPLAYSTOP: ENDP
;显示空格
;定义显示子程序结束 MOV
AH,4CHINT
;返回DOS CODE
;代码段结束
;源程序结束 END
从TABLE字节单元开始存有100个无符号数,试编程把数组中出现次数最多的数存入CH中,其出现次数存入CL中。【解】程序代码如下:DATA
;数据段开始TABLE DB 100 DUP(?)DATA
ENDS;数据段结束
;代码段开始 CODE
SEGMENTASSUME CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
;装填数据段;传送变量的地址 LEA
BX,TABLEXOR
CX,99LP2: PUSH
AH,[BX]MOV
AL,1LP1: INC
AH,[BX]JNE
ALNEXT1: LOOP
DH,AHNEXT2: LOOP
;AL&DL,本次计数的数字不是最多的
;AH !=[BX],转移42
AH,4CHINT
;返回DOS ;代码段结束;源程序结束 END
有两个长度不等的字符串,分别存于STRN1和STRN2单元开始的存储区,字串长度分别存放于LS1和LS2字节单元,要求编程将短串接在长串之后,并将连接后的串长度存于LS1和LS1+1单元。【解】设两串连接后最大长度为256个字符,连接后的字符串存于STRN3单元开始的存储区。程序代码如下:DATA
;数据段开始STRN1 DB ‘i swear by the moon and the stars in the sky.’STRN2 DB ‘and i swear like the shadow thats by your side. ’STRN3 DB 256 DUP(?)LS1
ENDS;数据段结束
;代码段开始 CODE
SEGMENTASSUME CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
AL,LS1MOV
BL,LS2CMP
LINK2LINK1:;AL&BL,大数在LS1中,转移到LINK2
;传送变量的地址 ;传送变量的地址
;装填数据段 LEA
SI,STRN3XOR
CL,LS2LOP1: MOV
AL,[BX]MOV
[SI],ALINC
BX,STRN1MOV
;传送变量的地址LOP2: MOV
AL,[BX]MOV
[SI],AL43
NEXTLINK2: LEA
BX,STRN1LEA
SI,STRN3XOR
CL,LS1LOP3: MOV
AL,[BX]MOV
[SI],ALINC
BX,STRN2MOV
CL,LS2LOP4: MOV
AL,[BX]MOV
[SI],ALINC
LOP4NEXT: XOR
AL,LS1MOV
BL,LS2ADD
BX,LS1MOV
[BX],AXSTOP: MOV
AH,4CHINT
ENDS;返回DOS
;将连接后的串长度存于LS1和LS1+1单元。
;传送变量的地址
;传送变量的地址 ;传送变量的地址 ;代码段结束
;源程序结束 END
从BUF字节单元开始存有按增序排好顺序的一个带符号数组,数组长度在LEN字节单元。在POSI字节单元存有一个正数,要求将其按顺序插入到数组中,并修改数组长度。【解】程序代码如下:DATA
SEGMENTBUF
;数据段开始 DB -33,-29,-6,-4, 4,21,33, 34, 34,49??LEN
;数据段结束44
;代码段开始ASSUME CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
BX,BUFXOR
CL,LENMOV
AH,POSILP1:
AL,[BX]CMP
[BX],AHJMP
STOPNEXT:LP2:
AL,[BX]MOV
[BX+1],ALDEC
[BX],AHSTOP: MOV
AL,LENINC
LEN,ALMOV
AH,4CHINT
ENDS;返回DOS
;修改数组长度
;插入新数据
;指针移向数组尾
;新数据插入到数组尾
;AH & AL,转移
;装填数据段 ;传送变量的地址 ;代码段结束
;源程序结束 END
从DAT单元开始存有20个8位带符号数构成的数组,要求编程去掉数组中的负奇数,并生成一个新的数组存于从RES字节单元开始的存储区中。【解】程序代码如下:DATA
SEGMENTDAT;数据段开始 DB -29,34,4,33,-4,-6,49,-33,34,21, 67,83,-17,-12,-81,34,85,32,1,91RES
20 DUP(?)DATA
ENDS;数据段结束 ;代码段开始 CODE
SEGMENTASSUME CS:CODE,DS:DATASTART: MOV
AX,DATA45
BX,DATLEA
SI,RESMOV
CX,20LP1:
AL,[BX]INC
AL,81HCMP
;装填数据段 ;传送变量的地址
;是负奇数,转移MOV
AL,[BX-1]MOV
[SI],ALINC
SINEXT: LOOP
AH,4CHINT
;返回DOS ;代码段结束;源程序结束 END
已知某数组ARRAY中有50个8位带符号数,试用汇编语言编写一个完整的程序统计该数组中相邻两数之间符号变化(正数变负数或负数变正数)的次数,并将其存于NUM存储单元。【解】程序代码如下:DATA
;数据段开始ARRAY DB -20,34,4,33,-4,-6,49,-33,34,21,
67,83,-17,-12,-81,34,85,32,1,91, 15,73,95,14,28,16,-41,-34,-9,54,2,2,4,67,-33,-51,-21,4,3,10,67,83,-20,-17,-81,34,85,32,1,90NUM
ENDS;数据段结束 ;代码段开始 CODE
SEGMENTASSUME CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
;装填数据段;传送变量的地址 LEA
BX,ARRAYXOR
CX,49LP1:
AL,[BX]MOV
AH,[BX+1]AND
;留符号位,屏蔽其它位46
AH,80HCMP
NUM,DLMOV
AH,4CHINT
;留符号位,屏蔽其它位
;返回DOS ;代码段结束;源程序结束 END
编写完整的汇编语言程序完成如下功能:首先在屏幕上显示提示行“Input number key, CR or Space return”,显示后回车换行等待用户输入。若用户输入的数字N在1~9之间,则响铃N次(每次要稍延时以作间隔);若键入的是0或非数字字符则不响铃;若键入的是回车或空格,则直接返回DOS。【解】程序代码如下:DATA
;数据段开始STR1
DB ‘Input number key, CR or Space return$’DATA
ENDS;数据段结束
;代码段开始 CODE
SEGMENTASSUME CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
DX,STR1MOV
;调用9号系统功能,显示内存缓冲区中的字符串;(以“$”为结束标志)MOV
DL,0001101B ;回车控制符MOV
;调用2号系统功能,显示回车 ;装填数据段
;传送变量的地址MOV
DL,0001010B ;换行控制符MOV
21HCONT: MOV
;调用7号系统功能,等待用户输入单字符,送AL
;调用2号系统功能,显示换行CMP
AL,0110001B ;与‘1’比较JB
;小于‘1’,转移(CF=1)CMP
AL,0111001B ;与‘9’比较JA
;大于‘1’,转移(CF=0,且ZF=0)47
;CX清零 ;响铃的次数 ;ASCII码转换成数值LP1:
DL,0000111B ;响铃控制符MOV
;调用延时子程序,形成响铃间隔
;调用2号系统功能,响铃1次 CMP
AL,0001101B ;与‘回车符’比较JZ
;相等,转移CMP
AL,0100000B ;与‘空格’比较JZ
CONTSTOP:
;相等,转移 ;继续等待下一个输入 MOV
AH,4CHINT
21H;返回DOS DELAYPROC
;定义延时子程序 ;向CX中送延时常数,决定延时的时间 MOV
CX,10000DELAY1:NOPPUSH
CX,65535DELAY2: NOPLOOP
DELAY1RETDELAY ENDPCODE
;定义延时子程序结束 ;代码段结束;源程序结束
微机存储器系统
教材习题解答1.
内存和外存的功能如何,有什么联系和区别?【解】内存的存取速度快而容量有限,用于存放CPU现行程序和数据;外存的容量大但存取速度较慢,用于存放CPU暂时不用或尚未用过的程序。弥补内存的容量不足。当某个时刻CPU需要执行那部分程序时,可将程序从外存调入内存,以供CPU执行,或者将CPU暂时不用的那部分程序从内存调出,存入外存以备待用。2.
高速缓冲区有什么功能?【解】随着计算机各部件与工艺的发展,主存储器的速度与CPU的速度出现一定的差距,从而成为影响整机提高速度的重要因素。为解决主存储器与CPU的速度匹配,在CPU与主存储器之间增设一个容量不大而速度很高的存储器,通常叫做“高速缓冲存储器”。 CPU在某一小段时间内要执行的程序,事先从主存储器调入高速缓冲存储器中,当CPU执行这些程序时,就直接从高速缓冲存储器中取得,这样减少了访问主存储器的次数,显著提高了CPU执行指令的速度。高速缓冲存储器多采用与CPU相同类型的半导体集成电路工艺,如双极型集成电路器件,以保证尽量与CPU的速度相匹配。3.
RAM和ROM有什么区别?【解】对于随机存储器(RAM),CPU或I/O设备在某一时刻可按地址去访问任一个存储单元,而且在一个存取周期内能进行一次访问,信息读出的时间对全部地址都是相等的,即与信息所在地址位置无关。RAM既可以读出,又可写入信息。只读存储器(ROM)是随机存储器的一种特殊方式。其特点是:每次访问它只能读出信息,而不能写入新的内容。因此用它存放那些固定不变的系统程序和子程序等。4.
利用若干2114芯片和2716芯片采用75LS138译码,构成7K容量的存储器,要求有5KRAM及2KROM,请设计电路图。【解】2114芯片为1K×4的存储芯片,所以每两片构成一个1K容量的存储器。5KRAM需要10个2114芯片。2KROM需要1个2716芯片。电路图如图6-5所示。其中ROM的地址范围是:80000H~807FFH,RAM的地址范围是:80800H~81BFFH。49
存储器连接示意图5.
常见的存储芯片有哪些,它们的容量是多少?【解】静态RAM芯片:Intel 2114,存储容量为1K×4位动态RAM芯片:Intel 2188,存储容量为16K×1位掩膜式只读存储器ROM:芯片等,一次性可编程的只读存储器PROM:Intel 3036,存储容量为2K×8位紫外线擦除的EPROM:Intel 2716,存储容量为2K×8位电可擦除只读存储器EEPROM:AT24C01,存储容量为128×8位
输入/输出和中断
教材习题解答1.
CPU与外设交换数据的方式有几种,各有什么特点?【解】CPU与外设交换数据的方式有两种:程序控制传递方式和DMA(直接存储器存取)传递方式,其中程序控制的数据传送分为无条件传送、查询传送和中断传送三种。程序控制传递方式的特点是,以CPU为中心,数据传送的控制来自CPU,通过预先编制好的输入或输出程序(传送指令和I/O指令)实现数据的传送 。这种传送方式的数据传送速度较低,传送路径经过CPU内部的寄存器,同时数据的输入输出的响应比较慢。50
DMA(Direct Memory Access)传递方式是一种不需要CPU干预也不需要软件介入的高速数据传送方式。由于CPU只启动而不干预这一传送过程,同时整个传送过程只由硬件完成而不需要软件介入,所以其数据传送速率可以很高。2.
比较中断传送和DMA传送的区别。【解】在中断方式下,外设需要与主机传输数据时要请求主机给予中断服务,中断当前主程序的执行,自动转向对应的中断处理程序,控制数据的传输,过程始终在处理器所执行的指令控制之下进行。DMA传送方式下,系统中有一个DMA控制器,它是一个可驱动总线的主控部件。当外设与主存储器之间需要传输数据时,外设向DMA控制器发出DMA请求,DMA控制器向中央处理器发出总线请求;取得总线控制权后,DMA控制器按照总线时序控制外设与存储器间的数据传输,而不是通过指令来控制数据传输,传输速度高于中断方式。3.
编写一段程序,使从终端上输入80个字符,存放BUFFER开始的内存缓冲区中;并要求每读入一个字符,在终端上显示键入的字符。【解】程序如下:DATA
SEGMENTBUFFER
80 DUP(?)DATA
SEGMENTASSUME
CS:CODE,DS:DATASTART: MOV
AX,DATAMOV
BX,BUFFERLP:
[BX],ALINC
AH,4CHINT
什么叫中断,采用中断技术有哪些好处?【解】中断是外设随机地(指主程序运行到任何一条指令时)或程序预先安排产生中断请求信号,暂停CPU正在运行的程序,转入执行称为中断服务的子程序,中断服务完毕后,返回到主程序被中断处继续执行的过程。CPU与外设采用中断技术交换数据,可以克服无条件传递和查询传送的缺点,即CPU和外设只能串行工作。这样可以提高系统的工作效率,充分发挥CPU的高速运算的能力。5.
什么叫中断系统,它具备哪些功能?51
【解】计算机系统中完成中断处理过程的软硬件称为中断系统。中断系统应具有以下功能:(1) 能实现中断响应、中断服务和中断返回当有中断源发出中断请求时,CPU能决定是否响应此中断,若接受这个中断请求,CPU能在保护断点(现行CS:IP值)后,转去执行相应的中断服务程序,中断处理完成后能恢复断点,继续执行程序。(2) 能实现中断优先级排队当两个或多个中断源同时提出中断请求时,CPU要能根据各中断请求的轻重缓急程度,分别处理,即给每个中断源一个优先级别,保证首先处理优先级高的中断申请。(3) 能实现中断嵌套若中断处理过程中,又有新的优先级较高的中断请求,且当中断允许时,CPU应能暂停正在执行的中断服务程序,转去响应与处理优先级较高的中断申请,待处理结束后,再返回原先较低的中断处理过程。6.
CPU在什么情况下才响应中断,中断处理过程一般包括哪些步骤?【解】CPU每执行完一条指令后,当查询到有中断请求且此时CPU允许中断(即中断允许标志位IF=1,开中断),CPU才能响应中断。CPU中断处理的具体过程一般包括以下步骤:中断请求、中断判优、中断响应、中断处理及中断返回。7.
何谓非屏蔽中断和可屏蔽中断?【解】何谓非屏蔽中断和可屏蔽中断都是硬件中断(也称外部中断)。非屏蔽中断通过CPU的NMI端引入,它不受内部中断允许标志位IF的屏蔽,一般在一个系统中只允许有一个非屏蔽中断。可屏蔽中断是通过CPU的INTR引入 ,它受内部中断允许标志IF的控制。只有在IF=1时,CPU才能响应中断源的请求。当IF=0时,中断请求被屏蔽。通常在一个系统中,通过中断控制器(8259A)的配合,可屏蔽中断可以有一个或多个。8.
CPU如何识别中断源?【解】通过读取8259中断服务寄存器ISR中的内容识别中断源。ISR寄存所有正在被服务的中断级,优先权电路对保存在IRR中的各个中断请求,经过判断确定最高的优先权,并在中断响应周期把它选通送至中断服务寄存器ISR。9.
什么叫中断优先权,有哪些解决中断优先权的办法?【解】由于中断请求是随机的,在某一瞬间有可能出现两个或两个以上中断源同时提出请求的情况。这时必须根据中断源的轻重缓急,给每个中断源确定一个中断级别,这个级别称为中断优先权。在系统中如果有多个中断源,就要考虑其优先权的问题。通常CPU只有一条中断请求线,当有多个中断源同时请求中断服务时,就要求CPU能识别出哪些中断源有中断请求,同时辨别和比较它们的优先权,先响应中断源中优先权级别最高的中断请求。另外,当CPU正在处理中断时,也要能响应更高级的中断申请,并屏蔽同级或较低的中断请求。确定中断的中断优先权一般可以采用软件和硬件两种方法。10.
简述CPU的中断结构及中断处理过程。【解】CPU可以处理256种类型的中断源,这些中断源可分为硬件中断和软件中断两大类。CPU响应中断后,把正在执行程序的当前地址(CS∶IP)压入堆栈保存,将中断服52
务程序入口地址送入CS∶IP,由此开始执行中断服务程序。在8086系统中,允许引入256种类型中断源(类型码为0~255),相应有256个中断服务程序首址。存放中断地址的一段内存空间称中断向量表。断类型码与中断向量所在位置(中断向量地址指针)之间的对应关系为:中断向量地址指针=4*中断类型码内部中断的处理过程:(1)CPU取得中断类型码,将类型码乘4作为向量表指针。(2)把CPU 标志寄存器入栈,保护各个标志,此操作类似于PUSHF指令。(3)清除IF和TF标志,屏蔽新的INTR中断和单步中断。(4)保存断点,即把断点处IP和CS压栈,先压CS值后压IP值。(5)从中断向量表中取中断服务程序入口地址分别送入IP和CS中。(6)按新的地址执行中断服务程序。CPU执行中断服务程序的最后一条中断返回指令IRET后,返回到断点处继续执行原程序。11.
的中断系统分哪几类,其优先顺序如何?【解】CPU可以处理256种类型的中断源,这些中断源可分为硬件中断和软件中断两大类。硬件中断是由外部硬件产生的,它又可分为非屏蔽中断和可屏蔽中断。一般在一个系统中只允许有一个非屏蔽中断,可屏蔽中断可以有一个或多个。软件中断是CPU根据软件的某些指令或者软件对标志寄存器某个标志位的设置而产生的。系统中,中断优先权排队次序从高到低为:除法出错、指令中断、溢出中断、非屏蔽中断、可屏蔽中断、单步中断。12.
中断入口地址表的功能是什么?已知中断类型码分别为84H和0FAH,它们的中断入口在中断入口地址表的什么位置上?【解】CPU响应中断后,把正在执行程序的当前地址(CS:IP)压入堆栈保存,将中断服务程序入口地址送入CS:IP,由此开始执行中断服务程序。在8086系统中,允许引入256种类型中断源(类型码为0~255),相应有256个中断服务程序首址。这些地址就存放在中断入口地址表中。中断类型码分别为84H的中断源所对应的中断服务程序首址存放在H(4×84H=210H)开始的4个单元中。中断类型码分别为0FAH 的中断源所对应的中断服务程序首址存放在H(4×0FAH=3E8H)开始的4个单元中。13.
若在一个系统中有5个中断源,它们的优先排序为:1,2,3,4,5。它们的中断服务程序入口地址分别为LOOP1、LOOP2、LOOP3、LOOP4、LOOP5。试编写一中断服务程序,当有中断请求CPU响应时,能用软件查询办法转到优先权最高的中断源。【解】设中断请求寄存器地址为20H,中断服务程序如下:PUSH
;保护现场IN
AL,20HTEST
AL,80HJNE
AL,40HJNE
AL,20H ;执行1号中断服务程序53
AL,10HJNE
AL,08HJNE
LOOP5:::LOOP1:
::IRETLOOP2:
::IRETLOOP3:
::IRETLOOP4:
::IRETLOOP5:
::IRET14.
CPU如何获得中断类型码?【解】对于专用中断,中断类型码是自动形成的。几种类型码为:类型0、1、3、4。对于INT n指令,其类型码为指令中给定的n。对于外部非屏蔽中断请求,CPU自动提供中断类型号2。对于外部可屏蔽中断请求,CPU从数据线中获取外部设备的中断类型码,15.
简述中断控制器8259A的内部结构和主要功能。【解】8259A的内部结构见教材图7-11。它由中断请求寄存器IRR(INTERRUPT
Register)、优先权电路、中断服务寄存器ISR(IN―Service Register)、中断屏蔽寄存器IMR(Interrupt Mask Register)、数据总线缓冲器、读写电路、控制逻辑和级连缓冲/比较器组成。8259A的主要功能为:(1) 具有8级优先权控制,通过级连可扩展至64级优先权控制。(2) 每一级中断都可以屏蔽或允许。(3) 在中断响应周期,8259A可提供相应的中断向量号(中断类型号)。(4) 可通过编程来进行选择工作方式。16. 某系统中有5个中断源,它们从中断控制器8259A的IR0~IR4中以脉冲方式引进系统,54
它们的中断类型码分别为40H,41H,42H,43H和44H,中断入口分别为3500H,4080H,4505H,5540H和6000H。允许它们以完全嵌套方式工作,请编写相应的初始化程序,使CPU响应任何一级中断时,能正确地进入各自中断服务程序入口。【解】设在I/O地址空间中分配给8259A的端口地址为20H和21H。中断结束为EOI命令方式。边沿触发方式,缓冲方式。 ICW1的内容:13HA0
D6 D5 D4 识别位D3 边沿触发D2 调用地址间隔为8D1 单片D0
系统必须设ICW4。
系统无效,置0。ICW2
的内容:40HA0
中断类型D6 D5 D4 D3 D2 自动填入D1 D0 ICW4
的内容:0DHA0
D6 D5 D4 全嵌套方式D3 D2
D1 正常EOI结束D0 工作于系统未定义,置0。 缓冲方式/主根据系统要求初始化编程如下:MOV
20H,AL MOV
21H,AL MOV
;设置ICW4,全嵌套方式,缓冲方式,正常EIO;设置ICW2,类型码为40H(IR0)。;设置ICW1为边沿触发,单片8259A,需要ICW4。初始化完成后,8259A处于全嵌套工作方式,可以响应外部中断请求。根据操作要求,设置中断入口地址分别为3500H,4080H,4505H,5540H和6000H:17.
试编写出只有一片8259A的8086系统中8259A的初始化程序。8259A的地址为02C0H和02C1H,要求:(1)中断请求采用电平触发。(2)IRQ请求的中断类型是16。(3)采用缓冲器方式。(
4)采用普通的EOI命令。 【解】ICW1的内容:1BHA0D7
D6 D5 D4 D3 D2 D1 D0 55
系统无效,置0。 识别位 电平触发 调用地址间隔为8 单片 系统必须设ICW4。
ICW2的内容:10HA0
中断类型D6 D5 D4 D3 D2 自动填入D1 D0
ICW4的内容:0DHA0
D6 D5 D4 全嵌套方式D3 D2 D1 正常EOI结束D0
工作于系统}

我要回帖

更多关于 单片机计数初值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信