这个单标签的典型代表上的DS和ES分别代表什么

《微机原理的答案》 www.wenku1.com
微机原理的答案日期:
第二章 位微处理器习题解答1. 试说明CPU中有哪些寄存器?各有哪些用途?答:寄存器组有(1)数据寄存器,含AX、BX、CX、DX四个通用寄存器,用来暂时存放计算过程中所遇到的操作数,结果和其它信息。(2)指针及变址寄存器,含SP、BP、SI、DI四个十六位寄存器,它们可以像寄存器一样在运算过程中存放操作数只能以字为单位使用。还用来在段内寻址时提供偏移地址。(3)段寄存器,含CS、DS、SS、ES,用来专门存放段地址。(4)控制寄存器,包括IP和PSW两个16为寄存器。IP是指令指针寄存器,用来存放代码段中的偏移地址。PSW为程序状态字寄存器,由条件码标志和控制标志构成。条件码标志用来纪录程序运行结果的状态信息。包括OF、SF、ZF、CF、AF、PF。控制标志位有三个寄存器DF、IF、TF组成。2. 是说明CPU中标志位寄存器中各标志位的意义?答:OF溢出标志,在运算过程中,如操作数超出了机器能表示的范围则置1,否则置0。SF符号标志,运算结果为负时置1,否则置0。ZF零标志,运算结果为0置1,否则置0 。CF进位标志,记录运算是最高有效位产生的进位。AF辅助进位标志,记录第三位的进位情况。PF奇偶标志位,用来为机器中传送信息时可能产生的出错情况提供检验条件,当结果操作数中的1的个数为偶时置1。DF方向标志位,在串处理指令中控制处理信息的方向。当DF=1时,每次操作后变址寄存器减量,这样就使串处理从高地址向低地址方向处理。IF中断标志,当IF=1时,允许中断,否则间断中断。TF陷阱标志,用于单步操作方式,当TF为1时,每条指令执行完后产生陷阱,由系统控制计算机。当TF为0时,CPU正常工作不产生陷阱。3.哪些操作只能隐含使用某个段寄存器,而不能用其它段寄存器代替?哪些操作出隐含使用某个段寄存器外,还可以使用其它段寄存器?答:计算程序的地址隐含使用CS,正在执行的程序隐含使用SS,而数据的地址隐含使用ES和DS。4.系列违纪在存储器中寻找存储单元时,逻辑地址由哪两个部分组成的? 答:由段地址和偏移地址两部分构成。5.设IBM PC微机内存中某个单元的物理地址是12345H,试完成下列不同的逻辑地址表示:(1) 1234H:___H(2) ____H:0345H答:(1)1234H:05H (2) H6.假设某程序执行过程中,(SS)=0950H,(SP)=64H,试问该用户程序的堆栈底部物理地址是多少?答:(SS)*10H+(SP)=09564H7.设堆栈段寄存器(SS)=0E4BH,程序中设堆栈长度为200H个字节。试计算出堆栈底部字单元物理地址,堆栈指针SP初始值(即堆栈中没有数据时)和SP初始值指向的物理地址。 答:物理地址为:3E4B0H, SP的初始值为200H,指向的物理地址为:3E6B1H.。8.设某用户程序(SS)=0925H,SP=30H,(AX)=1234H,(DX)=5678H,问堆栈的地址范围是多少?如现有两条进展指令:PUSH AXPUSH DS试问两指令执行后,(SP)=?答:寻址范围:0H,SP减4为2CH。9.8086CPU与 8088CPU由哪些相同之处?又有哪些区别?答:他们内结构基本相同,不同之处仅在于8088有8条外部数据总线,因此为准16位。 8088有16条外部数据总线,两个CPU的软件完全兼容,程序的编制也完全相同。 10.8086CPU从功能上分为几部分?各部分由什么组成?各部分的功能是什么?答:8086CPU从功能上分外两大部分,一是执行部件(EU),二是总线接口部件(BIU)。 执行部件是由以下四部分组成:(1)4个通用寄存器AX,BX,CX,DX。(2)4个专用寄存器BP,SP,XI,DI。(3)标志寄存器FR。(4)算术逻辑部件ALU。功能是负责执行所以的指令,向总线接口部件(BIU)提供指令执行的结果数据和地址,并对通用寄存器和标志寄存器进行管理。总线接口部件(BIU)由以下部件组成:(1)四个段寄存器,代码段寄存器,数据段寄存器,附加段寄存器,堆栈段寄存器。(2)指令指针寄存器。(3)地址加法器。(4)指令领队列。功能:执行外部总线周期,负责存储器与I/O端口传送数据。也就是负责CPU与存储器和外设之间的信息交换。12.8086系统中的物理地址是如何的得到的?假如CS=2000H,IP=2100H,其物理地址是多少?答:8086系统的物理地址是将段地址乘10H,加上偏移地址。00H=22100H (物理地址)13 什么叫总线周期?一个总线周期包括多少时钟周期,什么情况下要插入TW等待周期?插入多少个TW取决于什么因素?答:CPU把总线接口部件BIU完成一次访问存储器或外设操作所需要的时间称为一个总线周期,它包括了四个时钟周期。当访问存储器或外设时,存储器或外设不能及时配合CPU传输数据时,存储器或外设通过“READY”信号在T3之前向CPU发出一个“数据未准备好”信号,CPU会在T3之前插入一个或多个等待时间周期。当存储器或外设准备好数据,通过“READY”发“准备好”信号,CPU接受此信号后,会自动脱离 TW状态进入T4状态。因此,插入多少个TW由“READY”信号决定。14 什么是最大模式?什么是最小模式?用什么方法将置于最大模式和最小模式?答:最小模式,即系统中只有一个微处理器,所有的总线控制信号都直接由,因此,系统总线控制电路被减到最小。最大模式,即系统里包括两个或多个微处理器,主处理器就是,其它均为协助主处理器工作的协处理器。它主要用于中等规模或大型的系统中。将的第33脚接地时,系统处于最大模式,接+5V时,为最小模式15 什么是地址锁存器?系统中为什么要用地址锁存器?锁存的是什么信息? 答:地址锁存器就是一个暂存器,它根据控制信号的状态,将总线上地址代码暂存起来。数据和地址总线采用分时复用操作方法,即用同一总线既传输数据又传输地址。当微处理器与存储器交换信号时,首先由CPU发出存储器地址,同时发出允许锁存信号ALE给锁存器,当锁存器接到该信号后将地址/数据总线上的地址锁存在总线上,随后才能传输数据。16 系统中的8286是什么器件?起什么作用?答:8286为总线驱动器(收发器,双向数据缓冲器),当一个系统中所含外设接口较多时,用来增强数据总线的驱动能力。17 系统用的时钟发生器产生哪些信号?答:时钟发生器8284A产生恒定的时钟信号(CLK),复位信号(RESET),准备就绪信号(READY)。18 的执行部件EU由多少个通用寄存器,多少个专用寄存器,几个标志寄存器和什么组成?答:执行部件由以下几部分组成:1、四个通用寄存器 AX BX CX DX;2、四个专用寄存器,即基数指针寄存器BP,堆栈指针寄存器SP,源变址寄存器SI,目的变址寄存器DI;3一个标志寄存器FR;4算术逻辑部件ALU。19 的指令队列长度分别为多少个字节?答:8086的指针队列为6个字节,8088的指针队列有4个字节。20 的16位寄存器中,有多少个寄存器可拆分为8位寄存器使用。它们分别是什么?它们又被统称为什么?答:在的16位寄存器中,有四个寄存器可拆分为八位寄存器使用,它们分别是AX,BX,CX,DX。统称为通用寄存器。21 PU从主存取出一条指令并执行该指令的时间称( ),它通常用若干个( )来表示,而后者又包括若干个( )。①指令周期 ②机器周期 ③时钟周期答:1-2-322 计算机时钟脉冲的频率称为什么?,其倒数又称为什么?答:计算机的时钟脉冲频率称为时钟频率,即主频。其倒数为时钟周期。22 计算机主频为8MHz,每个机器周期平均含两个时钟周期,每条指令平均有2.5个机器周期,则该机器的平均指令执行速度为多少MIPS?-6-6答:该机器执行一条指令所用时间为:1/8*10*2*2.5=5/8*10t;平均指令执行速度为:1/ (5/8)=1.6MIPS。24 的存储器可以寻址1MB的空间,在对I/O进行读写操作时,20位地址中只有哪些位是有效的?这样,I/O地址的寻址空间为多大?答:在对I/O进行读写操作时,20位地址中只有A0-A15有效,I/O地址的寻址空间为162B。25 指令队列的作用是什么?答:指令队列存放内存中取下的将被执行的下一条或下几条指令,使CPU执行完一条指令就可立即执行下一条,提高CPU的效率。26 8086CPU可访问的存储空间为1MB,实际上分为奇数存储体和偶数存储体两部分,对奇数存储体的选择信号是什么,对偶数存储体的选择信号是什么,对每个存储体单元的选择信号是什么?答:奇数存储体的选择信号为BHE,偶数存储体的选择信号为A0。对每个存储体内存储单元的选择信号是READY。27 8086有两种工作方式,即最小模式和最大模式,它由什么信号决定?最小模式的特点是什么?最大模式的特点是什么?答:8086的两种工作模式由MN/MAX信号决定。当接入+5V时,系统处于最小模式,只有一个微处理器,总线控制逻辑部件被减到最小。当接地时,系统处于最大模式,实现多处理器控制系统,主要应用于大中型系统。28 当M/IO=0,RD=0,WR=1时,CPU完成的操作是什么?答:CPU完成一个对I/O设备端口的读操作。29 在软件上是否完全兼容?答:内部都采用16位字进行操作及存储器寻址。因此两者软件完全兼容。
第三章 存储器技术习题解答1 半导体存储器从器件原理的角度可分为哪两种类型?答:半导体存储器从器件原理角度分为ROM和RAM两种。2 磁盘和磁带属于哪种类型的存储器?答:磁盘和磁带同属于外存储器。3 半导体静态RAM和半导体动态RAM分别靠什么原理存储信息?答:静态RAM:用一个触发器电路作为1个Bit的基本存储单元,每个触发器能置位存储1,或复位存储0。动态RAM:每Bit只需一个管子和一个电容,存放的信息是1还是0,决定于电容中是否储存电荷。4 为保证动态RAM中的内容不消失,需要进行哪一步操作?答:由于电容有漏放电现象,为保证RAM中的内容不消失,必须另外设计一种电路,定时(一般为2ms),使电容上泄放的电荷得到补充,即进行内存刷新。5 存储器片内的地址译码有哪两种方式?答:存储芯片内的地址译码有全地址译码和独立译码两种。6 存储器是计算机系统的记忆设备,它主要用来存储哪些东西?答:存储器用来存储地址、数据和程序。7 存储字长和存取周期分别指什么?答:存储字长是指存放在一个存储单元中的二进制代码个数。存取周期是指存储器进行连续读写操作所允许的最短时间间隔。8 和外存相比,内存的特点有哪些?答:和外存相比,内存的特点是容量小、速度快、成本高。9 某计算机主存容量为2048KB,这里的2048KB表示多少个字节?答:2048KB表示个Byte,即2(11)*2(10)=2(21)个。10 某计算机的主存为3KB,则内存地址寄存器需多少位就足够了?答:主存为3KB,则地址线有12条,所以内存地址寄存器需12位。11 若256KB的SRAM具有8条数据线,则它具有多少条地址线?答:具有18条地址线。12 计算机的内存可采用ROM、RAM、磁盘中的哪几种?EPROM指的又是什么?主存和CPU之间增加高速缓存的目的是什么?采用虚拟存储器的目的是什么?答:可采用ROM和RAM。EPROM指可编程并可擦除的ROM,兼有ROM和RAM的功能。由于主存储器的存/取时间比CPU慢一个数量级,从而严重影响了微型机的速度,而RAM线路的读写时间可与CPU的处理速度处于同一个数量级,因此在主存储器和CPU之间增加高速缓冲存储器Cache,以提高机器的速度。虚拟存储器的容量比实际物理上主存储器的容量大,软件可根据需要将所需的存储区域调入物理存储器,也可以提高处理速度。13 某以8088为CPU的微型计算机内存RAM区为00000H~3FFFFH,若采用6264、6或21256各需要多少片芯片?答: 采用bit)需要32片;采用6bit)需要8片;采用bit) 需要32片;采用2k*1bit)需要8片。14 利用全地址译码将6264芯片接在8088的系统总线上,其所占地址范围为BE000H~BFFFFH,试画连接图。解答:采用全地址译码连接图如下:8088系统15 试利用6264芯片,在8088系统总线上实现00000H~03FFFH的内存区域,试画连接电路图。 解答:采用全地址译码。 BUSD0D7 A0 A116 叙述EPROM的编程过程,说明EEPROM的编程过程。 答: PROM的编程有两种方式,即标准编程和灵巧编程两种方式。标准编程的过程为:使Vcc为+5v ,Vpp加上+21v 。而后,加上要编程的单元地址,数据线加上要写入的数据,使CE保持低电平,OE为高电平。当上述信号稳定后,在PGM端加上50±5ms的负脉冲。这样就将一个字节的数据写到了相应的地址单元中。重复上述过程,即可将要写入的数据逐一写入相应的存储单元中。灵巧编程方式要比标准方式快5倍左右。当加上 Vcc= 5v, Vpp=21v 后,对一个写入地址,用1ms编程脉冲进行编程,接着进行校验,如不成功,再加1 ms编程脉冲。最多可进行15次,若15次仍不能将数据正确写入,则认为芯片本身已损坏。若某一单元用X次1 编程脉冲已正确写入,校验到这种情况后,立即对该单元加入4倍 X的编程覆盖脉冲,则认为该单元编程已完成。重复上述过程,将所有要写入的单元编程。将数据写入EEPROM有两种方式,即字节方式和自动页写入。在对EEPROM编程时,可以在线操作。17 有2片6116,现欲将它们接到8088系统中去,其地址范围为40000H到40FFFH, 试画连接电路图。利用写入某数据并读出比较,若有错,则在DL中写入01H;若每个单元均对,则在DL写入EEH,试编写此检测程序。解答:连接电路图见下一页。18 若用全地址译码将EPROM 6)接在首地址为A0000H的内存区,试画出电. . .. . .路图。解答:电路图如下:A A AA 总 线信 号 19 第15题中,若8088的时钟频率为5MHz,6264芯片的读写时间均200 ns,试粗略估计该芯片能否直接使用。答:8088的时钟频率为5MHZ,则读写时间为200ns,与6264芯片的读写时间相同,若该芯8088系统片直接使用,容易出错。 17 连接电路图如下:
第四章 指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式:(1) AND AX,0FFH(2) AND BL,[OFFH](3) MOV DS,AX(4) CMP [SI],CX(5) MOV DS:[0FFH],CL(6) SUB [BP][SI],AH(7) ADC AX,0ABH[BX](8) OR DX,-35[BX][DI](9) PUSH DS(10) CMC答: 目的操作数 源操作数(1)寄存器直接寻址 立即数寻址(2)寄存器直接寻址 直接寻址(3)寄存器直接寻址 寄存器直接寻址(4)寄存器间接寻址 寄存器直接寻址(5)直接寻址 寄存器直接寻址(6)基址变址寻址 寄存器直接寻址(7)寄存器直接寻址 寄存器相对寻址(8)寄存器直接寻址 基址变址相对寻址(9)无 寄存器直接寻址(10)隐含寻址2.试分别指出下列各指令语句的语法是否有错,如有错,指明是什么错误。(1) MOV [BX][BP],AX(2) TEST [BP],BL(3) ADD SI,ABH(4) AND DH,DL(5) CMP CL,1234H(6) SHR [BX][DI],3(7) NOT CX,AX(8) LEA DS,35[SI](9) INC CX,1(10) PUSH 45[DI]答:(1)应将BP,BX其中之一该为SI或DI(2)正确(3)ABH改为0ABH(4)(5)是字操作,CL改为CX(6)移位数大于1时,应用CL(7)NOT指令只有一个操作数(8)LEA指令的源操作数应为一内存单元地址(9)此指令不用指出1(10)45改为45H3.下面两条指令执行后,标志寄存器中CF,AF,ZF,SF和OF分别是什么状态?MOV DL,86ADD DL,0AAH答:
= 1,CF=1 AF=1 ZF=1 SF=1 OF=14.在CPU中可用于作地址指针的寄存器有哪些?答:有BX,CX,DX,BP,SI,DI (IP,SP,)5.已知(DS)=09lDH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH。下列各指令或程序段分别执行后的结果如何?(1) MOV CL,20H[BX][SI](2) MOV [BP][DI],CX(3) LEA BX,20H[BX][SI]MOV AX,2[BX](4) LDS SI,[BX][DI]MOV [SI],BX(5) XCHG CX,32H[BX]XCHG 20H[BX][SI],AX答(1) (CX)=56F6H;(2) (09226H)=5678H;(3) (AX)=1E40H;(4) (1E4F6H)=0024H;(5) (09226H)=1234H,(AX)=5678H.6.已知(SS)=09l 5H,(DS)=0930H,(SI)=0A0H,(DI)=1C0H,(BX)=80H,(BP)=470H。现有一指令“MOV AX,OPRD”,如源操作数的物理地址为095C0H,试用四种不同寻址方式改写此指令(要求上述每个已知条件至少要使用一次)。答:(1)MOV AX,[BP](2)MOV AX,[BP+DI+80H](3)MOV AX,[DI+0100H]MOV AX,[SI+0220H](4)MOV AX,[02C0H]7.试按下列要求分别编制程序段:(1) 把标志寄存器中符号位SF置‘1’。(2) 寄存器AL中高低四位互换。(3) 由寄存器AX,BX组成一个32位带符号数(AX中存放高十六位),试求这个数的负数。(4) 现有三个字节存储单元A,B,C。在不使用ADD和ADC指令的情况下,实现(A)+(B)=>C。(5) 用一条指令把CX中的整数转变为奇数(如原来已是奇数,则CX中数据不变,如原来是偶数,则(CX)+1形成奇数)。答:(1)MOV AH, 80HSAHF(2 ) MOV BL, 0FHAND BL, ALSAL 4SHR 4XOR AL, BL(3 ) MOV DX, 7FHSUB AX, DXMOV DX, 0FFHSUB DX, BXMOV BX, DX(4 ) MOV AH, FFHMOV BL, [B]SUB AH, BLMOV BH, [A]SUB BH, AHMOV [C], BH(5 ) MOV AX, CXNOT AXTEST 01HJNZ NEXTHLTNEXT: INC CXHLT8.试给出下列各指令的机器目标代码:(1) MOV BL,12H[SI](2) MOV 12H[SI],BL(3) SAL DX,1(4) ADD 0ABH[BP][DI],1234H答: (1) 11111=8ADF;(2) C;(3) 0;(4) .9.执行下列指令后:STR1 DW ‘AB’STR2 DB 16DUP(?)CNT EQU $-STR1MOV CX,CNTMOV AX,STR1HLT寄存器CL的值是多少?寄存器AX的值是多少?答:寄存器CL的值为12H,寄存器AX的值为4241H。10.JMP FAR PTR ABCD(ABCD是符号地址)的转移方式是什么?答:JMP FAT PTR ABCD 的转移方式是段间直接转移.11.MOV AX,ES:[BX][SI]的源操作数的物理地址是多少(用CS、DS、ES、SS、BX、SI表示出即可)?答 :MOV AX,ES:[BX] [SI]的源操作数的物理地址是[ES]×10H+[BX]+[SI].12.运算型指令的寻址和转移型指令的寻址,其不同点在什么地方?答:运算型指令的寻址包括立即数寻址。寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址和基址加变址寻址方式。这些寻址方式中,CS,IP寄存器的内容不会发生变化。 转移型指令的寻址方式包括段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址。在后三种寻址方式中,CS,IP寄存器的内容发生改变。13.如果TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,当执行指令”MOV AX,TABLE”和”LEA AX,TABLE”后,(AX)中的内容分别为多少?答:执行MOV AX , TABLE后(AX)=1234H执行LEA AX, TABLE 后 (AX)=0032.14.当指令”SUB AX,BX”执行后,CF=1,说明最高有效位发生了什么现象?对无符号 数来说,操作结果发生了什么现象?答:执行指令SUB AX,BX后,CF=1,说明最高位发生了借位对无符号来说,操作结果发生了溢出。15.在1000H单元中有一条二字节指令JMP SHORT LAB,如果其中的偏移量分别为 30H、6CH、0B8H,则转向地址LAB的值分别为多少?答:转向地址LAB的值分别为:H+30H=10032HH+6CH=1006EHH+B8H=100BAH16.下面两个语句的区别在什么地方:X1 EQU 1000HX2=1000H答:“EQU”和“=”都可以作为赋值语句,但二者的区别是EQU伪操作中的表达式是不许重复定义的,而“=”伪操作则许重复定义。17.调用指令CALL可进行哪四种调用?答:调用指令CALL可进行段内直接调用,段内间接调用。段间直接调用。段间间接调用。18.(AL)=9AH,(BL)=0BCH,当分别进行下列指令运算后,请写出标志位ZF、PF、CF、 SF的内容:( P8050)(1) ADD AL,BL(2) SUB AL,BL(3) AND AL,BL(4) OR AL,BL(5) XOR AL,BL答:(1)ADD AL,BL1 0 0 1 1 0 1 0+)1 0 1 1 1 1 0 01,0 1 0 1 0 1 1 0 ∴ZF=0,PF=1 CF=1 SF=0(2)SUB AL,BL1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0—)1 0 1 1 1 1 0 0 —〉 +)0 1 0 0 0 1 0 01 1 0 1 1 1 1 0∴ ZF=0 PF=1 CF=1 SF=1(3)AND AL,BL1 0 0 1 1 0 1 0AND)1 0 1 1 1 1 0 0 ∴ ZF=0 PF=0 CF=0 SF=01 0 0 1 1 0 0 0(4)OR AL,BL1 0 0 1 1 0 1 0OR)1 0 1 1 1 1 0 0∴ ZF=0 PF=1 CF=0 SF=01 0 1 1 1 1 1 0(5)XOR AL,BL1 0 0 1 1 0 1 0XOR)1 0 1 1 1 1 0 0 ∴ ZF=0 PF=0 CF=0 SF=00 0 1 0 0 1 1 019.若(SP)=2800H,试用两种方法实现(SP)=27FEH.答:方法一:执行一次PUSH指令 PUSH CX方法二:执行一次PUSHF指令20.试简述LES REG,SRC所完成的操作?答:LES REG,SRC 是将SRC和SRC+1中的偏移量送到REG 寄存器,而将SRC+2和SRC+3中的段基址送ES段寄存器。21.关系操作符EQ、NE、LT、GT、LE、GE计算的结果为逻辑值,试问0FFFFH代表假,0代表真是否正确?答:0FFFFH代表真。0表示结果为假。22.堆栈存取操作是以字节为单位的.试分析当堆栈存入数据和从堆栈取出数据时SP的变化?答:当堆栈存入一个字时,(SP)<—SP—2从堆栈中取出一个字时(SP)<—SP+223.试编写汇编程序段完成以下功能:将1000个字符的字符串从内存的BUFFER1搬移到内存的BUFFER2中去。解答 LEA SI,BUFFER1LEA DI,BUFFER2MOV CX,1000CLDREP MOVSb24.试编写汇编程序段完成以下功能:将数据段中100个字的数据块BLOCK1搬移到同一个数据段的BLOCK2中去。解答: LEA SI,BLOCK1LEA DI,BLOCK2MOV CX,100CLDREP MOVSW25.试编写汇编程序段完成以下功能:比较DEST和SOURCE中的500个字节,找出第一个不相同的字节,如果找到,则将SOURCE中的这个数送AL中。解答: CLDLEA DI,DESTLEA SI,SOURCEMOV CX,500REPE CMPBJCXZ NEXTDEC SIMOV AL,BYTE PTR[SI]NEXT:HLT26.试编写汇编程序段完成以下功能:求最大值,若自BLOCK开始的内存缓冲区中,有100个带符号的数,希望找到其中最大的一个值,并将它放到MAX单元中。解答:MOV BX,OFFSET BLOCKMOV AX,[BX]MOV CX,100ADD BX,2F0:CMP AX,[BX]JGE F1MOV AX,BXF1:ADD BX,2JCXZ NEXTJMP F0MOV MAX,AXNEXT:HLT27.假定(SS)=2000H,(SP)=0100H,(AX)=2107H,执行指令PUSH AX后,存放数据21H的物理地址是多少?—原栈顶20100 21H200FFH 第五章 汇编语言程序设计习题解答1. 指出下列指令的错误:(1)MOV AH,BX(2)MOV [BX],[SI](3)MOV AX,[SI][DI](4)MOV MYDAT[BX][SI],ES:AX(5)MOV BYTE PTR[BX],1000(6)MOV BX,OFFSET MYDAT[SI](7)MOV CS,AX答:(1)MOV AH,BX AH 为八位,BX为16位(2)MOV [BX],[SI] 两个操作数不能都是存储单元(3)MOV AX,[SI][DI] 一个操作数中不能用两个变址寄存器(4)MOV MYDAT [BX][SI],E8:AX ESES 后应为一个变址寄存器,表示偏移量(5)MOV BYTE PTR[BX],1000BYTE 说明时BX进行字节操作。 而1000为字(6)MOV BX,OFFSET MYDAT [SI]OFFSET 为取某个地址的偏移量,故后面不应用[SI],而应是一个符号地址。(7)MOV 是数据寻址,不应用程序段寄存器CS.2.下面哪些指令是非法的?(假设OPl,OP2是已经用DB定义的变量)(1)CMP l5,BX(2)CMP OPl,25(3)CMP OPl,OP2(4)CMP AX,OPl答:(1) CMP 15,BX非法,两个操作数不能一个为字,一个为字节(2)CMP OP1,25 正确(3)CMP OP1,OP2 正确(4)CMP AX,OP1非法,两操作数不能一个为字,一个为字节3.假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么?(1)MOV BP,AL(2)MOV WORD_OP[BX+4*3][DI],SP(3)MOV WORD_OPl,WORD_OP2(4)MOV AX,WORD_OPl[DX](5)MOV SAVE_WORD,DS(6)MOV SP,SS:DATA_WORD[BX][SI](7)MOV [BX][SI],2(8)MOV AX,WORD_ OPl+WORD_OP2(9)MOV AX,WORD_ OPl-WORD_OP2+100(10)MOV WORD_ OPl,WORD_ OPl-WORD_OP2答:(1)MOV BP,AL非法,BP为16位 AL为八位(2)MOV WORD_OP[BX+4*3][DI] ,SP正确(3)MOV WORD_OP1 ,WORD_OP2非法,两个操作数不能都是变量(4)MOV AX , WORD_OP1[DX]非法,[DX]应改为[BX],[BP],[SI]或[DI],则为寄存器相对寻址。(5)MOV SAVE_WORD ,DS非法,未指明数据段地址DS的偏移量(6)MOV SP,SS:DATA_WORD[BX][SI]非法,SS与[BX],[SI]不匹配,SS的偏移量用SP(7)MOV [BX][SI] ,2正确(8) MOV AX,WORD_OP1+WORD_OP2 正确(9) MOV AX, WORD_OP1—WORD_OP2+100 正确(10)MOV WORD_OP1,WORD_OP1—WORD_OP2非法4.假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处:(1)ADD VAR1,VAR2(2)SUB AL,VAR1(3)JMP LAB[SI](4)JNZ VARl(5)JMP NEAR LAB答:(1) ADD VAR1,VAR2ADD指令中,目的操作数必须是寄存器或存储单元。(2)SUB AL,VAR1AL为8位的,而VAR为字变量16位(3)JMP LAB [SI]格式不对,LAB处应为一偏移量,而不是标号。(4)JNZ VAR1JNZ 为非零转移,应转移到某个程序段,故后面应为一个标号。(5)JMP NEAR LAB段内直接转移,格式应为 JMP NEAR PTR LAB 5.画图说明下列语句所分配的存储空间及初始化的数据值。BYTE-VAR DB ‘BYTE’,12,-12H,3DUP(0,?,2DUP(1,2),?)WORD-VAR DW 5DUP(0,1,2),?,-5,’BY’,’TE’, 256H(2)WORD-VARBY T E 12-12H 6.试列出各种方法,使汇编程序把5150H存入一个存储器字中。 解答:(1) DW 5150H;(2)DB 50H,51H;(3)DB ‘PQ’ 7.请设置一个数据段DATASG,其中定义以下字符变量或数据变量。FLD1B为字符串变量:‘personal computer’;FLD2B为十进制数字节变量:32;FLD3B为十六进制数字节变量:20;FLD4B为二进制数字节变量:;FLD5B为数字的ASCII字符字节变量:32654;FLD6B为10个零的字节变量;FLD7B为零件名(ASCII码)及其数量(十进制数)的表格:PART1 20PART2 50PART3 14FLD1W为十六进制数字变量:FFF0;FLD2W为二进制数字变量:;FLD3W为(7)中零件表的地址变量;FLD4W为包括5个十进制数的字变量:5,6,7,8,9;FLD5W为5个零的字变量;FLD6W为本段中字数据变量和字节数据变量之间的地址差。解答: DATASG SEGMENTFLD1B DB ‘personal computer’FLD2B DB 32DFLD3B DB 14HFLD4B DB BFLD5B DB 32654FLD6B DB 10DUP(0)FLD7B DB ‘PART1’,20D,‘PART2’,50D,‘PART3’,14DFLD1W DW 0FFFOHFLD2W DW BFLD3W DW [FLD7B]FLD4W DW 5,6,7,8,9FLD5W DW 5DUP(0)FLD6W DW FLD1W-FLD1BDATASG ENDS8.假设程序中的数据定义如下:PARTNO DW ?PNAME DB 16 DUP(?)COUNT DD ?PLENTH EQU $-PARTNIO问PLENTH的值为多少?它表示什么意义?解答:PLENTH代表着PARTNO至PLENTH的地址差,也即三段数据的字节数PLENTH=22。9.有符号定义语句如下:BUFF DB 1,2,3,‘123’EBUFF DB 0L EQU EBUFF-BUFF问L的值为多少?解答:L=610.假设程序中的数据定义如下:LNAME DB 30 DUP(?)ADDRESS DB 30 DUP(?)CITY DB 15 DUP(?)CODE-LIST DB 1,7,8,3,2(1)用一条MOVE指令将LNAME的偏移地址放入AX。(2)用一条指令将CODE-LIST的头两个字节的内容放入SI。(3)写一条伪操作使CODE-LENGTH的值等于CODE-LIST域的实际长度。解答:(1)MOVE AX,0FFSET LNAME;(2)MOVE SI,0701H;(3)DE-LENGTH EQU LENGTH CODE-LIST。 11.试写出一个完整的数据段DATA_SEG,它把整数5赋与一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后写出完整的代码段,其功能为:把DATA-_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。解答:DATA_SEG SEGMENTLENGTH DB 5DATA_LIST DW –1,0,2,5,4,5DUP(?)MAX DW ?MIN DW ?DATA_SEG ENDSCODE_SEG SEGMENTASSUME CS:CODE_SEG,DS:DATA_SEGSTART:MOV AX,DATA_SEGMOV DS,AXMOV SI,OFFSET DATA_LISTMOV AX,[SI]MOV BX,[SI]MOV CX,LENGTHXOR AX,AXXOR BX,BXCLCAGAIN:CMP AX,[SI]JG NEXT1MOV AX,[SI]NEXT1:CMP BX,[SI]JNG NEXT2MOV BX,[SI]NEXT2:JNZ AGAINMOV MAX,AXMOV MIN,BXCODE ENDSEND START12.给出等值语句如下:ALPHA EQU 100BETA EQU 25GAMMA EQU 2下列表达式的值是多少?(1)ALPHA*100+BETA(2)ALPHA MOD GAMMA+BETA(3)(ALPHA+2)*BETA-2(4)(BETA/3)MOD5(5)(ALPHA+3)*(BETA MOD GAMMA)(6)ALPHA GE GAMMA(7)BETA AND 7(8)GAMMA OR 3解答:(1)=10025;(2)=19;(3)=2548;(4)=3;(5)=103;(6)=0;(7)=01H;(8)=03H。13.对于下面的数据定义,三条指令分别汇编成什么?TABLEA DW 10 DUP(?)TABLEB DB 10 DUP(?)TABLEC DB ‘1234’┊┊MOVE AX,LENGTH TABLEAMOVE BL,LENGTH TABLEBMOVE CL,LENGTH TABLEC解答:MOVE AX,10MOVE BL,10MOVE CL,114.对于下面的数据定义,各条MOVE指令单独执行后,有关寄存器的内容是什么?FLDB DBTABLEA DW 20DUP(?)TABLEB DB ‘ABCD’MOVE AX,TYPE FLDBMOVE AX,TYPE TABLEAMOVE CX,LENGTH TABLEAMOVE DX,SIZE TABLEAMOVE CX,LENGTH TABLEB解答:AX=0001HAX=0002HCX=0014HDX=0028HCX=0001H。15.指出下列伪操作表达方式的错误,并改正之。(1)DATA_SEG SEG(2)SEGMENT ‘CODE’(3)MYDATA SEGMENT/DATA┆ENDS(4)MAIN_PROC PROC FAR┆END MAIN_PROCMAIN_PROC ENDP答:(1) DATA-SEG SEGMENT(2) CODE SEGMENT PARA 'CODE'(3) /DATA错。定义数据段应在代码段中用ASSUME。ENDS缺少‘MYDATA’。(4) 多余END,MAIN-PROC应删除。16.按下面的要求写出程序的框架(1)数据段的位置从0E000H开始,数据段中定义—个l00字节的数组,其类型属性既是字又是字节;(2)堆栈段从小段开始,段组名为STACK,(3)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值;(4)程序结束。答: DATA-SEG SEGMENTORG 0E000HBYTE-ARRAY LABLE BYTEWORD-ARRAY DW 50 DUP(?)DATA-SEG ENDSSTACK-SEG SEGMENT PARA 'STACK'STACK-SEG ENDSCODE-SEG SEGMENTASSUME CS:CODE-SEG,DS:DATA-SEG,SS:STACK-SEGORG 1000HSTART: MOV AX ,DATA-SEGMOV DS ,AXMOV AX ,STACK-SEGMOV SS ,AX..CODE-SEG ENDSEND START17.假设在数据段X_SEG、附加段Y_SEG和堆栈段Z_SEG中分别定义了字变量X,Y和Z。试编制一完整的程序计算X?X+Y+Z答: X-SEG SEGMENTX DW ?X-SEG ENDSZ-SEG SEGMENTZ DW ?Z-SEG EMDSY-SEG SEGMENTY DW ?Y-SEG ENDSCODE SEGMENTMAIN PROC FARASSUME ES:Y-SEG,CS:CODE,DS:X-SEG,SS:Z-SEGSTART PUSH DSSUB AX AXPUSH AXMOV AX ,Y_SEGMOV ES ,AXMOV AX,Z_SEGMOV SS,AXMOV AX,X_SEGMOV DS,AXMOV AX,DS:XMOV BX,ES:YADD AX BXJO OVERFLOWMOV BX ,SS:ZADD AX,BXJO OVERFLOWMOV DS:X,AXOVERFLOW :RETMAIN ENDPCODE ENDSEND START18.写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG段中的SUM中。其中AUGEND、ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为-15962。解答:TITLE SUMD_SEG SEGMENTAUGW LABEL WORDAUGEND DD 99251SUM DW 2 DUPL (?)D_SEG ENDSE_SEG SEGMENTADDW LABEL WORDADDEND DD -15962E_SEG ENDSC_SEG SEGMENTASSUME DS :D_SEG ,ES:E_SEG ,CS:C-SEGMAIN PROC FARSTART :PUSH DSMOVE AX,0PUSH AXMOV AX,D_SEGMOV DS ,AXMOV AX,E_SEGMOV ES,AXADDT :MOV AX,AUGWMOV BX,AUGW+2ADD AX, ES : ADDWADC BX, ES: ADDW+2MOV SUM ,AXMOV SUM+2,BXRETMAIN ENDPC_SEG ENDSEND START19.读下面程序段,请问:在什么情况下,本段程序的执行结果是AH=0?BEGIN: IN AL,5FHTEST AL,80HJZ BRCHlMOV AH,0JMP STOPBRCHl: MOV AH,0FFHSTOP: HLT解答:AL中的最高位为1时。20.读程序:START: IN AL,20HMOV BL,ALIN AL,30HMOV CL,ALMOV AX,0ADLOP: ADD AL,BLADC AH,0DEC CLJNZ ADLOPHLT请问: (1)本程序实现什么功能?(2)结果在哪里?解答:完成20H*30H,结果在AX中。21.请编一程序段完成AX*l0的任务(要求不准用乘法指令做)。解答: MOV BX,AXMOV CL 2SHL AX, CLADD AX,BXSHL AX ,122.编程序使:(1)AX寄存器低4位清零。(2)BX寄存器低4位置“1”。(3)CX寄存器低4位变反。(4)用TEST指令测试DL寄存器位3、位6是否同时为0,若是,将0送DL;否则l送DH。解答 :1,AND AX ,0FFF0H2,OR BX ,000FH3,XOR CX ,000FH4,TEST DL ,48HJZ LOOPMOV DH,1HLTLOOP :MOV DL ,0HLT23.编一程序段,完成符号函数(-128≤x≤127):1 (x.>0)y= 0 (x=0) -1 (x<0)假设x的值存放在DATAl中,y的值存放在DATA2中。解答: START :MOV AL ,DATA1AND AL,ALJGE BIGRMOV AL,0FFHMOV DATA2.ALHLTBIGR:JE EQULMOV AL,1MOV DATA2,ALHLTEQUL:MOV DATA2,ALHLT24.设AX寄存器中有一个16位二进制数,编一程序,统计AX中“l”的个数,统计结果送CX中。解答: START :MOV CX ,0LOOP: SUB AX,0JZ STPSAL AX,1JNC NODINC CXNOD:JMP LOOPSTP:HLT25.编一子程序利用XLAT指令把十六进制数转换成ASCII码。假设ASCII码存放在以 DAT1为首地址的数据区中,对应的16进制数放在以DAT2为首地址的数据区中,转换结果送以DAT3为首地址的数据区中。解答:MAIN :PUSH BXPUSH SIPUSH DIPUSH CXPUSH ALPUSH DSSTART:MOV BX,DATA1MOV SI ,DATA2MOV DI DATA3MOV CX ,16NEST:LODSBXLAT DATA1STOSBLOOP NESTPOP DSPOP ALPOP CXPOP DIPOP SIPOP BXRET26.(略)27.试分三种情况说明:当NUM字节单元中数据是什么情况时,TEMP字节单元分别是多少? NUM DB XXTEMP DB ?┆┆MOV AL,NUMTEST AL,99HJNE RESAND AL,99HJMP END0RES: JS NEINC ALJMP END0NE: DEC ALEND0: MOV TEMP,AL┆答:NUM字节单元中的数据是一个八位2进制数。当其第1、4、5、8位均为0时,将此数装入temp单元,若不满足此条件,则又分为两种情况,其最高位为1时(负数),将此数减1装入temp单元;其最高位为0时(正数),将此数加1装入temp单元。28.试编制一程序,把CHAR1中各小写字母分别转换为对应的大写字母,并存放在 CHAR2各字节单元中:CHAR1 DB ‘capitalize’CHAR2 DB $-CHAR1 DUP(?)解答:MOV CX ,0AHMOV SI ,0MOV AX , 1AHLOOP1: ADD AX ,CHAR1[SI]MOV CHAR2[SI], AXINC SILOOP LOOP129.试编制一程序,把DA_BYl字节单元中数据分解成三个八进制数,其高位八进制数存放在DA-BY2字节单元中,最低位存放在DA_ BY2+2字节单元中。DA_BY1 DB 6BHDA_BY2 DB 3 DUP(0)解答 : MOV AL ,DA-BY1+1SHR AL ,2MOV DA-BY2 ,ALMOV AL ,DA-BY1AND AL ,07H ; (0,111)MOV DA-BY2+2,AL30.试编制一程序,找出DA数据区中带符号的最大数和最小数。解答: MOV CX , LENGTHMOV BX ,0000HMOV DX ,0000HMOV SI ,0000HLOOP1: MOV AX , ADDRESS[SI]CMP AX ,80HJGE W1CMP AX ,BXJG W2INC SILOOP LOOP1HLTW1: CMP AX ,DXJGE W3JMP LOOP1W3: MOV DX ,AXJMP LOOP1W2: MOV BX ,AXJMP LOOP131.试编制一程序,统计出某数组中相邻两数间符号变化的次数。解答:MOV CX ,LENGTHMOV SI ,0MOV AX ,ADDRESS[SI]AND AX ,80HINC SIMOV BX ,ADDRESS[SI]AND BX ,80HSUB BX ,AX NEG BXCMP BX ,80HJG W1LOOP LOOP1HLTW1 INC DXJMP LOOP1HLT32.设某数据段已有N个学生的某科成绩(百分制),并按学号的次序存放在以STUD为首址各字单元的低字节中。现在要求按成绩的高低记入名次,并把名次填入成绩所在字单元的高字节中,各字单元的信息格式为:解答:START: MOV BX , OFFSET STUDMOV DX ,OFFSET STUD ; BX ,DX中放置成绩表的偏移地址 MOV CX , N—1 ;CX中放置的是要比较的次数MOV SI , 0 ;名次放在SI中LOOP1: MOV AL,[DX]LOOP2: MOV BX , [BX+2] ;取下一个同学的成绩CMP AL , [BX]JA NEXT ;如果比下一个同学成绩高则到NEXT即使名次加一DEC CX ;否则计数值减一JNE LOOP2 ;计数不为零再循环取下一个同学成绩 MOV [DX+1] ,SIHLTNEXT: ADD SI , 1 ;名次加一DEC CXJNE LOOP2MOV [DX+1],SI ;如果计数为零比较完毕,最后将名次放到与成绩相连的单元中去MOV DX , [DX+2] ;取下一个成绩去和其他N—1个数比较 LOOP LOOP1HLTEND START33.试编制程序,分别对NUM中各数统计出有多少个20,余下有多少个5,再余下有多少个2,再余下有多少个1。统计的各数分别存放在NUM20,NUM5,NUM2,NUM1的对应位置中,程序要求用主程序子程序形式编制,而且用两种参量传递方法分别编制主程序和子程序。数据段如下:DATA SEGMENTNUM DW 0133H,0D5FH,1234HCOUNT EQU ($-NUM)/TYPE NUMNUM20 DB COUNT DUP(0)NUM5 DB COUNT DUP (0)NUM2 DB COUNT DUP (0)NUM1 DB COUNT DUP (0)DATA ENDS解答:DADA SEGMENTNUM DW 0133H , 0D5FH,1234HCOUNT EQU ($-NUM)/TYPE NUMNUM20 DB COUNT DUP (0)NUM5 DB COUNT DUP(0)NUM2 DB COUNT DUP(0)NUM1 DB COUNT DUP(0)CMPNUM DB 20,5,2,1DATA ENDSCODE SEGENTASSUME DS:DATA ASSUME CS:CODEMAIN PROC FARSTART: MOV AX,DATAMOV DS ,AXMOV DX ,OFFSET NUM20MOV CX ,COUNTMOV BX ,OFFSET CMPNUMMOV SI ,0MOV DI , 0CALL CMPDATACMPDATA PROC NEARPUSH AXPUSH DXLOOP: MOV DX , [DI]LOOP1: MOV AX, [SI]CMP AX ,DXJE NEXTINE SILOOP LOOP1JMP AGAINNEXT: ADD [BX][SI] ,1INC SILOOP LOOP1AGAIN: MOV CX ,4ADD DI , COUNTLOOP LOOPHLTPUSH DXPUSH AXCMPDADT ENDPMAIN ENDPCODE ENDSEND START34.已知两个正整数BE1(1~14)和BE2(0~14),但是,BEl+BE2<15。试编制一程序,把DA_WORD字单元的内容从第BE1位开始,自左至右的BE2个位清零,其余各位保持不变。处理的数据放在RESU单元中。解答: MOV BL ,BE1MOV CX ,BE2MOV DX ,0LOOP: MOV AX ,1SAL AX, BLADD DX,AXDEC BXDEC CXJNZ LOOP ;此循环的目的是保证DX中的16位数的DE1位到其后BE2个位全部为一NOT DX ;将DX中的数取反,保证BE1位到BE2位个数全为零,其他为1 MOV BX, OFFSET DA-WORDAND [BX] , DX35.编写一条宏指令CLRB,完成用空格符将一字符区中的字符取代的工作。字符区首地址及其长度为变元。解答: CLRB MACRO n , cblockMOV CX , n ;长度为nMOV AL , ‘ ’ ;把空格送到AL中LEA DI, cblock ;DI中放字符区首地址REP STOSB ;重复操作直到CX=0ENDM36.某工厂计算周工资的方法是每小时的工资率RATE乘以工作时间HOUR,另外每工作满十小时加奖金3元,工资总数存放在WAG中,请将月工资的计算编写成一条宏指令WAGES,并展开宏调用:WAGES R1,42解答:宏定义:WAGES MACRO RATE,HOURMOV AL,HOURMUL RATEMOV BX,AXMOV AX,HOURDIV 10MUL 3ADD BX,AXMOV WAG,BXENDM宏调用:WAGES R1,42宏展开:MOV AL,42MUL R1MOV BX,AXMOV AX,42DIV 10MUL 3ADD BX,AXMOV WAG,BX37.给定宏定义如下:DIF MACRO AX, YMOV AX, XSUB AX, YENDMABSDIF MACRO V1,V2,V3LOCAL CONTPUSH AXDIF V1,V2CMP AX,0JGE CONTNEG AXCONT: MOV V3,AXPOP AXENDM试展开以下调用,并判定调用是否有效。(1)ABSDIF Pl,P2,DISTANCE(2)ABSDIF [BX],[SI],X[D1],CX(3)ABSDIF [BX][S1],X[BX][S1],240H(4)ABSDIF AX,AX,AX解答:(1)宏展开:+ PUSH P1+ MOV P1 , X+ SUB P1 ,P2+ CMP P1,0+ JGE ??0000+ NEG P1+??0000: MOV DISTANCE ,P1+ POP P1调用有效(2)宏展开:+ PUSH [BX]+ MOV [BX], X+ SUB [BX], [SI]+ CMP [BX], 0+ JGE ??0000+ NEG [BX]+??0000 MOV X[DI] , [BX]+ POP [BX](3)宏展开:+ PUSH [BX][SI]+ MOV [BX][SI] , X+ SUB [BX][SI],X[BX][SI]+ CMP [BX][SI] ,0+ JGE ??0000+ NEG [BX][SI]+??0000: MOV 240H [BX][SI]POP [BX][SI](4)宏展开:+ PUSH AX+ MOV AX , X+ SUB AX ,AX+ CMP AX ,0+ JGE ??0000+ NEG AX??0000: MOV AX AXPOP AX调用有效38.试编制宏定义,要求把存储器中的一个用EOT字符结尾的字符串传送到另一个存储区去。 解答: SEND MACRO SCHARS,DCHARSLOCAL NEXT,EXITPUSH AXPUSH SIMOV SI,0NEXT:MOV AX,SCHARS[SI]MOV DCHARS[SI],ALCMP AL,24HJZ EXITINC SIJMP NEXTEXIT:ENDM39.宏指令BIN_SUB完成多个字节数据连减的功能:RESULT ←(A-B-C-D-,,)要相减的字节数据顺序存放在首地址为OPERAND的数据区中,减数的个数存放在COUNT单元中,最后结果存入RESULT单元。请编写此宏指令。解答: BIN-SUB MARCO OPERAND , COUNT , RESULTMOV AX OPERAND+1LOOP 1: CMP COUNT ,0JNG EXITMOV BX OPERAND+2SUB AX ,BXDEC COUNTINC OPERANDLOOP LOOP1EXIT: MOV RESULT AXENDM40.请用宏指令定义一个可显示字符串GOOD:’GOOD STUDENTS:CLASSX NAME’,其中X和NAME在宏调用时给出。解答: MSGGEN MACRO LAB ,X, NAMELAB DB `GOOD:‘GOOD STUDENTS:CLASS&X &NAME’` LOOP PRINTITPRINTIT: MOV DL LAB+1 ;将ASCII代码串放入DLMOV AH ,2INT 21HDEC LABENDM缺4142.定义宏指令并展开宏调用。宏指令JOE把一串信息’MESSAGE NO.K’存入数据存储区XK中。宏调用为:I=0JOE TEXT,I┆JOE TEXT,IJOE TEXT,I解答:joe macro a,macro a,%j;j=j+1endmmary macro x,k;x&k db message no, &k;endm i=ojoe text ,i+ text0 db'message no.o'joe text , i+ text1 db 'message no.1'joe text, i+text db 'message no.2'43.大多数DOS功能调用都需要在AH寄存器中存放不同的功能码。请将这种功能调用定义成宏指令DOS21。再定义宏指令DISP完成显示字符的功能,其中可使用已定义的DOS21。然后展开宏调用DISP ’*’ 。解答:DOS21 MACRO NUMMOV AH,NUMINT 21HDISP ‘MACRO ZIFU’MOV DI,‘ZIFU’DOS21 02HENDM宏调用:DISP ‘*’宏展开:MOV DL,‘*’MOV AH,02HINT 21H44.宏指令STORE定义如下:STORE MACRO X, NMOV X+I,II=I+1IF I - NSTORE X,NENDIFENDM试展开下列调用:I=0STORE TAB,7解答:I=0store tab ,7mov tab,0I=1store tab,7+mov tab+1,1I=2store tab,7+ mov tab+2,2I=3store tab+3,3+ mov tab+3,3I=4store tab,7+ mov tab+4,4I=5store tab,5+ mov tab+5,5I=6store tab,7+ mov tab+6,645.试编写非递归的宏指令,使其完成的工作与44题的STORE相同。解答:store macro kmov tab+k,kendmhongdiaoyong i=orept 7store %ii=i+146.试编写一段程序完成以下功能,如给定名为X的字符串长度大于5时,下列指令将汇编10次。ADD AX, AX解答:rept macro x,rmov ax,oper1if x gt 5r=0rept 10r=r+1add ax ,axendm47.定义宏指令FINSUM:比较两个数X和Y,若X>Y则执行SUM←X+2*Y;否则执行SUM←2*X+Y解答: finsum macro x,y,mov bx ,xmov al,2if x gt ymul yadd bx,axmov dx, summov dx, bxif x lt ymov bx, xmul xmov dx,summov dx,bxendmaaa48.试编写一段程序完成以下功能:如变元X=’VT55’,则汇编MOV TERMINAL,0;否则汇编 MOV TERMINAL,1。解答:pre macro x,arg,terminalmov argifidn x,argmov terminal,0ifdif x,argmov terminal ,1endm49.对于DOS功能调用,所有的功能调用都需要在AH寄存器中存放功能码,而其中有一些功能需要在DX中放一个值。试定义宏指令DOS21,要求只有在程序中定义了缓冲区时,汇编为:MOV AH,DOSFUNCMOV DX,OFFSET BUFFINT 21H否则,无MOV DX,OFFSET BUFF指令。并展开以下宏调用:DOS21 01DOS21 0AH, IPFIELD解答: DOS21 MACRO DOSFUNC,BUFFMOV AH,DOSFUNCIF B〈BUFF〉INT 21HELSEMOV DX,OFFSET BUFF宏展开:DOS21 01MOV AH,0HINT 21HDOS21 0AH,IPFIEIDMOV AH,0AHMOV DX,IPFIELDINT 21H50.编写一段程序,使汇编程序根据SIGN中的内容分别产生不同的指令。如果(SIGN)=0,则用字节变量DIVD中的无符号数除以字节变量SCALE;如果(SIGN)=1,则用字节变量DIVD中的带符号数除以字节变量SCALE,结果都存放在字节变量RESULT中。解答:MOV AL,DIVDIFE SIGNMOV AH,0DIV SCALEELSECBWIDIV SCALEENDIFMOV RESULT,AL 第六章输入输出处理方法习题1.如果8251A设定为异步通信方式,发送器时钟输入端和接收器时钟输入端都连接到频率为19.2KHZ的输入信号,波特率因子为16,则波特率为( )。(A)1200 (B)2400 (C)9600 (D)19200答: A2.试分析,在数据通信中,比特率与波特率分别代表的含义?答:比特率指数据通信中信号频率每秒钟变化的次数;波特率指数据通信过程中每秒种传送的位数(bit/s),故 1波特=1位/秒。3.8255A工作在方式1时,端口A和端口B作为数据输入/输出使用,而端口C的各位分别作为端口A和端口B的控制信息和状态信息。其中作为端口A和端口B的中断请求信号的分别是端口C的()。(A)PC4和PC2 (B)PC5和PC1 (C)PC6和PC7 (D)PC3和PC0答: D4.在DMA传送过程中完成数据传送功能是由( )。(A) CPU执行从存储器读出的指令(B) CPU直接控制外部设备与存储器(C) DMAC执行从存储器读出的指令(D) 外部设备中的控制部件直接控制(E) DMAC的硬件直接控制答: E5.DAC0832是一个分辨率为(1),输入具有(2)功能的D/A转换器。(A)8位 (B)10位 (C)12位 (D) 单缓冲(E) 双缓冲 (F) 无缓冲答: A E6.在IBM PC/XT微机中8253-5定时器/计数器的三个通道的工作方式分别为:通道0工作在(1);通道1工作在(2);通道2工作在(3)。(A)方式0 (B)方式1 (C)方式2 (D)方式3 (E)方式4 (F)方式5答: D C D7.试分析:8251A能不能同时实现发送数据和接受数据的功能?答:8251A是可编程控制的串行接口芯片,对其方式字、命令字及状态字初始化后,规定其通信方工(同步/异步)及数据格式等,命令字来控制发/收,状态字控制何时可以收/发。其实现的是半双工通信方式,不能同时实现发送和接受数据的功能。8.当D/A转换器与CPU相连时,如果CPU的数据总线的位数小于D/A转换器的位数,这时需要采用什么结构?答:当CPU的数据总线的位数小于D/A转换器的位数时,即使采用的D/A转换器内部带有数据缓冲器,也要采用外加三态缓冲器或数据寄存器与CPU相联的结构,并且是两级缓冲,以消除由于两次传送数据而产生的尖峰。9.ADC0809与CPU相连接时,其模拟输入通道的地址由CPU提供。为了确保它对输入信号的可靠转换,需要在它们之间加上什么东西?答:为了确保对输入信号的可靠转换,需在ADC0809 的ADDA~ADDC和CPU之间加一级地址锁存器或三态锁存器。10.试分析:在异步串行通信工作状态下,通信双方是否需要同步?答:需要同步。异步串行传送是指传送的每一个字符是随机出现在数据流中的,即是把每一个字符看作一个独立的传送单位,字符之间的间隔是随机的、任意的。但是,在一个字符内部的各个二进制位是同步传送的。收发双方对字符的同步是通过在字符格式中设置起始位和停止位来实现的11.简述8086CPU对中断的响应和处理过程。答:8086对各类中断的响应不完全相同,主要区别在于如何获得中断类型码。A. 可屏蔽中断的响应过程。首先必须满足中断允许标志IF置1,当没有内部中断,非屏蔽中断(NMI=0)和总线请求(HOLD=0)时,外设向中断控制器8259A发出中断请求,经8259A处理,得到相应的中断类型码,并向CPU申请中断(INTR=1)。⑴等待当前指令结束,CPU发出中断响应信号。⑵8259A连续(两个总周期)接收到两个INTA 的负脉冲的中断响应信号,则通过数据总线将中断类型码送CPU,CPU把中断类型码乘4作为中断矢量表的地址指针。⑶CPU保护断点,将状态标志字PSW及当前的CS和IP内容压栈。⑷清IF和TF标志为0。⑸查中断矢量表,取中断处理程序首地址,将其分别置入IP和CS中,程序转入执行中断处理程序。B. 非屏蔽中断的响应过程:非屏蔽中断请求在NMI加入,等待当前指令执行结束,CPU优先响应NMI中断请求,其中断类型码由硬件决定类型为2,无须从外部引入,其余响应过程与可屏蔽中断相同。C. 内部中断响应操作:内部中断响应的共同点是:⑴中断类型码由指令码给定或硬件决定,无须外部逻辑输入;⑵无INTA 信号响应周期;⑶不受IF控制;⑷除单步中断 外,其它内部中断响应优先于外部中断,响应过程与非屏蔽中断类似。12.8086可引入哪些中断,它们是如何引入的?答:8086具有256种不同中断类型的能力。中断源可来自CPU内部或外部设备,可由硬件 或软件产生。A.非屏蔽中断:8086的两条外部中断线是非屏蔽中断NMI和可屏蔽中断INTR。NMI是边缘触发方式,要求高电平有效。一般用在如电源断电等紧急事件中,优先权较高,请求信号不受标志位IF的影响。NMI中断类型码规定为2。B.INTR可屏蔽中断请求是高电平有效的另一外部硬件中断源,高电平保持时间应维持到当前指令结束。在8086中它不自中断控制器8259A,其外部电路所产生的中断的优先级别由8259A管理产生。CPU只根据标志位IF的状态决定是否响应INTR。C.内部中断:8086的内部中断产生的过程完全与硬件电路无关,是CPU根据软件中某条指令或软件对PSW中的标志设置而产生的。内部中断可分为两大类型:一类是内部已硬件设置好的类型0~类型4,它们依次为除法出错、单步中断、NMI、断点中断和溢出中断;另一类是8086的中断系统中有一条两字节的中断指令INT n。n 即为中断类型码,CPU根据中断类型码即可找到中断服务程序入口。13.中断入口地址表的功能是什么?已知中断类型码分别为84H和FAH,它们的中断入口在中断入口地址表的什么位置上?答:中断入口地址表又称中断矢量表,它是中断矢量类型码与该中断类型相对应的中断服务程序入口之间的连接表,它设置在系统RAM最底端1024个单元内。中断矢量表共有256种中断类型码,每个类型码占用4个字节。其中低两个字节为中断服务程序入口地址的偏移地址,置入IP;高两位字节为服务程序的段基址置入CS。于是可通过这4个字节的值即可找到该中断类型的中断服务程序入口。中断类型码84H 中断入口在中断矢量表的210H中断类型码FAH 中断入口在中断矢量表的368H14.为什么在主程序和中断服务程序中都要安排开中断指令?如果开中断指令安排在中断服务程序的末尾,那么将产生什么后果。如果要实现中断嵌套,则开中断指令应如何设置?答: 开中断指明CPU允许中断,主程序中在开中断之前要屏蔽本级和低级中断,预防干扰,而后开中断允许处理高级中断请求。在中断处理之后也要开中断,允许任何中断请求。如果没有开中断,更高级中断请求无法响应。在中断服务期间,把该中断的断点保存后在开中断,表示响应更高级中断请求,然后进入中断服务程序,执行中断服务程序,在恢复断点之前关中断,之后又开中断,又可响应更高级中断。15.简述中断控制器8259A的内部结构和主要功能。答: 8259芯片内部结构包括八个部分:1、数据总线缓冲器:是一个双向八位三态缓冲器,由它构成8259与CPU之间的数据接口,是8259与CPU交换数据的必经之路。2、读/写控制电路:用来接收来自CPU的读/写控制命令和片选控制信息。3、级联缓冲/比较器:在多片8259级联使用,构成主从关系。4、中断请求寄存器(IRR):是一个八位寄存器,用来存放由外部输入的中断请求信号IR0-IR7。5、中断服务寄存器(ISR):是一个八位寄存器,用来记录正在处理的中断请求。6、中断屏蔽寄存器(IMR):是一个八位寄存器,用来存放各级中断请求的屏蔽信息。7、优先权判别器(PR)用来识别各中断请求的优先级别。8、控制电路:是8259A内部的控制器,根据中断请求寄存器IRR的置位情况和优先权判别器PR与判定结果向8259A 内部其他部件发控制信号,并向CPU 发中断请求信号 INT 和接收中断响应信号INTA 控制8259A 进入中断服务状态。16.8259A对中断优先权的管理方式有哪几种?各是什么含义?答: ①完全嵌套方式:ISR寄存器中某位置“1”,表示CPU正在处理这一级中断请求,8259A允许比它级别高的中断请求进入,禁止与它同级或低级中段请求进入。IR引入的中断请求有固定的中断级别,R0最低,R7最高。②自动循环方式:IRN –IR0优先级别不固定。每当任何一级中断被处理完,它的优先级别就被改变为最低,而将最高级赋给比它低一级的中断请求。③中断屏蔽方式:由CPU在任何时候都可安排一条清除中断指令。1) 普通屏蔽方式,将IMR中某一位或某几位置“1”,可将相应级的中断请求屏蔽掉。2) 特殊屏蔽方式,当CPU正在处理某级中断时,要求仅对本级中断进行屏蔽,而允许其他优先比它高或低的中断进入系统。17.某系统中设置三片8259A级联使用,一片为主8259A;两片为从8259A;它们分别接入主8259A的IR2和IR6端。若已知当前主8259A和从8259A的IR3上各接有一个外部中断源,它们的中断类型码分别为A0H,B0H和C0H,已知它们的中断入口均在同一段中,其段基址为2050H,偏移地址分别为11A0H,22B0H和33C0H,所有中断都采用电平触发方式、完全嵌套、普通EOI结束,请(1)画出它们的硬件连接图;(2)编写全部初始化程序。解答:初始化程序:START:MOV AL ,19HMOV DX,偏移地址(主)OUT DX,ALMOV AL,0A0HMOV DX,奇地址(主)OUT DX,ALMOV AL,44HOUT DX,ALMOV AL,11HOUT DX,ALMOV AL,11HOUT DX,ALMOV AL,0B3HOUT DX,ALMOV AL,22HMOV DX,偶地址(主)OUT DX,ALMOV AL,19HMOV DX,偶地址(从1)OUT DX,ALMOV AL,0B0HMOV DX,奇地址(从1)OUT DX,ALMOV AL,02HOUT DX,ALMOV AL,11HOUT DX,ALMOV AL,0F7HOUT DX,ALMOV DX,偶地址(从1)MOV AL,22HOUT DX,AL从2:MOV AL,19HMOV DX,偶地址(从2)OUT DX,ALMOV AL,0C0HMOV DX,奇地址(从2)OUT DX,ALMOV AL,06HOUT DX,ALMOV AL,11HOUT DX,ALMOV AL,0F7HOUT DX,ALMOV DX,偶地址(主)MOV AL,22HOUT DX,ALSTIHH: HLTJMP 11H18.可编程计数/定时器芯片8253有几个通道?各采用几种操作方式?简述这些操作方式的主要特点。答:有0,1,2三个通道,各通道有六种工作方式,以完成定时,计数,脉冲发生器等多种功能。(1)工作方式0:计数结束中断方式(2)工作方式1:可编程单脉冲发生器(3)工作方式2:速率波发生器(4)工作方式3:方波发生器(5)工作方式4:软件触发方式(6)工作方式5:硬件触发方式19.某系统中8253芯片的通道0~通道2和控制字端口号分别为FFF0H~FFF2H,定义通道0工作在方式2,CLK0=5MHz,要求输出OUT0=lkHz方波;定义通道l工作在方式4, 用OUT0作计数脉冲,计数值为1000,计数器计到0,向CPU发中断请求,CPU响应这一中断后继续写入计数值1000,重新开始计数,保持每1秒钟向CPU发出一次中断请求,请编写初始化程序,并画出硬件连接图。解答:STT:MOV DX,0FF0HMOV AL,34HOUT DX,ALMOV DX,通道0端口地址MOV AX,1388HOUT DX,ALMOV AL,AHOUT DX,ALMOV DX,0FFF1HMOV AL,78HOUT DX,ALMOV DX,通道1端口地址MOV AX,2710HOUT DX,ALMOV AL,AHOUT DX,ALMOV DX,0FFF2HMOV AL,B1HOUT DX,ALMOV DX,通道2端口地址MOV AX,1000HOUT DL,ALMOV AL,AHOUT DX,AL对8259A初始化(略)HH:HLTJMP HH20.什么叫DMA传送方式?DMA控制器8257的主要功能是什么?答:DMA传送方式就是用DMA控制器来接管CPU对总线的控制权。在存储器与局速外设之间建立直接进行数据块传送与高速通路。主要功能有三个(1)DMA读操作—读存储器送外设(2)DMA写操作—对外设写存储器(3)DMA校验操作—通道不进行数据传送操作,只是完成校验操作。21.某8086系统中使用8257完成从存储器到外设端口的数据传送任务,若已知通道0的地址寄存器、终点计数器、方式寄存器端口地址分别为置EEE0H,EEElH和EEE8H,要求通过通道0将存储器中偏移地址为1000H~10FFH的内容传送到显示器输出,请编写初始化程序。 解答:ST57:MOV DX,0EEE8HMOV AL,41HOUT DX,ALMOV DX,0EEE0HMOV AX,1000HOUT DX,ALMOV AL,AHOUT DX,ALMOV DX,0EEE1HMOV AL,0FFHOUT DX,ALHLT22.某8086系统中使用8257完成从存储器到存储器的数据传送,已知源数据块首地址的偏移地址值为1000H,目标数据块首地址的偏移地址值为l050H,数据块长度为100字节。请编写初始化程序,并画出硬件连接图。解答:STS7:MOV DX,方式寄存器端口MOV AL,41HOUT DX,ALMOV DX,通道0地址寄存器端口MOV AX,1000HOUT DX,ALMOV AL,AHOUT DX,ALMOV DX,方式寄存器端口MOV AL,42HOUT DX,ALMOV DX,通道1地址寄存器端口MOV AX,1050HIN DX,ALMOV AL,AHIN DX,ALMOV DX,通道0终点计数器端口MOV AL,64HOUT DX,ALHLT23.编一系统初始化程序,由8259A的IR0~IR4共五个中断源,中断类型码为4BH,4CH,4DH,4EH,4FH。8259A端口地址为80H、81H。允许它们以完全嵌套方式工作。解答:STT: MOV AL,11HMOV DX,80HOUT DX,ALMOV AL,4BHMOV DX,81HOUT DX,ALMOV AL,01HOUT DX,ALMOV AL,0D0HOUT DX,ALMOV AL,20HMOV DX,80HOUT DX,ALHLT24.用编程,使扬声器发出600Hz的可听频率,击任一键停止。(其中主时钟—9为1.9318MHz,一个时钟周期为888.2229×10秒。)解答:STACK SEGMENT PARA STACK’STACK’DB 256 DUP(0)STACK ENDSDATA SEGMENT PARA PUBLIC’DATA’FREG DW 周方波计数值DATA ENDSCODE SEGMENT PART PUBLIC’CODE’START PROC FARASSUME CS:CODE,DS:DATAPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXIN AL,61HOR AL,3OUT 61H,ALMOV AL,0B6HOUT 43H,ALMOV BX,FREGMOV AL,BLOUT 42H,ALMOV AL,BHOUT 42H,ALMOV AH,0INT 16HIN AL,61HAND AL,0FCHOUT 61H,ALRETSTART ENDPCODE ENDSEND START25.用8253产生一个可编程采样速率的A/D子系统,要求通过8253的三个计数器,计数器0工作在方式2、计数器1工作在方式l,计数器2工作在方式3。设它们的三个初始计数值分别设为X,Y和Z(X,Y,Z小于256)。时钟频率设为F,用OUT0产生脉冲作为ADC的启动转换信号。GATE1和GATE2引线输入一个由低电平到高电平的跳变启动信号,作为数模转换器在YZ/F秒时间内以每秒F/X个样本速率进行量化输入操作。设8253端口地址为0040H,0042H,0044H,0046H,写出8253的初始化程序。解答:MOV AL,14HOUT 46H,AL ;设置计数器0为方式2MOV AL,XOUT 40H,AL ;置计数器0初值MOV AL,73HOUT 46H,AL ;设置计数器 1为方式1MOV AX,YOUT 42H,ALMOV AL,AHOUT 42H,ALMOV AL,96HOUT 46H,AL ;置计数器2为方式3MOV AL,ZOUT 44H,AL26.设8253控制端口地址为203H,定时器0地址为200H,定时器l地址为201H,编程序将定时器0设为方式3(方波)、定时器l为方式2(分频),定时器0的输出脉冲作为定时器l的时钟输入,CLK0连接总线时钟4.77MHz,定时器1输出OUT1约为40Hz。解答:TIM-CTL EQU 203H ;控制口地址TIMER0 EQU 200H ;计数器/定时器0口地址TIMER1 EQU 201H ;计数器/定时器1口地址MODE03 EQU 36H ;方式字,定时器0工作于方式3MODE12 EQU 74H ;方式字,定时器1工作于方式2DATA SEGMENTMESS DB’8253A TIMER0 IN MODE3!COUNT=2000H’,0AH,0DHDB’8253A TIMER1 IN MODE2!COUNT=0FH’,0AH,0DH,’$’DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXCLI ; 关中断MOV DX,TIM-CTLMOV AL,MODE03 ; 设置定时器0,工作于方式3OUT DX,ALMOV DX,TIMER0MOV AL,00 ; 定时器0置初值低位为00HOUT DX,ALMOV AL,20H ; 定时器0置初值,高位为20HOUT DX,ALMOV DX,TIM-CTLMOV AL,MODE12 ; 定时器1,工作于方式2OUT DX,ALMOV DX,TIMER1 ; 定时器1置初值低位为0FHMOV AL,0FHOUT DX,ALMOV AL,00 ; 定时器置初值高位为00HOUT DX,ALSTI ; 开中断MOV DX,OFFSET MESS ;显示提示信息MOV AH,09INT 21HRETMAIN ENDPCODE ENDSSTART END27.编一初始化程序,使8255A的PC5端输出一个负跳变。如果要求PC5端输出一个负脉冲则初始化程序又是什么情况?解答:初始化程序:MOV AL,0BH;PC5置“1”控制字→ALMOV DX,××××××11B;控制口地址→DXOUT DX,AL;置“1”控制字→控制寄存器MOV AL,0AH;PC5置“0”控制字→ALOUT DX,AL;置“0”控制字→控制寄存器如果要求PC5输入一个负脉冲则再加两条指令MOV AL,0BHOUT DX,AL28.设8251A的控制和状态端口地址为52H,数据输入/输出口地址为50H(输出端口未用),输入50个字符,将字符放在BUFFER所指的内存缓冲区中。请写出这段的程序。解答:MOV AL,OUT 52H,;设置模式因子,异步方式,波特新因子为16,用7个数据位,2个停止位,偶校验MOV AL,35HOUT 52H,;设置控制字,使发送器和接收器启动,并清除出错指示位MOV DI,0;变址寄存器初始化MOV CX,50;共50个字符BEGIN:IN AL,52HTEST AL,读取状态字,测试RXRDY位,是否为1,如为0表示未收到字符,故继续读取状态并测试JZ BEGININ AL,50;读取字符MOV DX,MOV [DX+DI],;将字符送入缓冲区INC DIIN AL,52H;读取状态字TEST AL,38H/偶校验错误和超越错误,如有则转出错处理程序。LOOP BEGIN;如没有错再接收下一个字符。JMP EXIT;如输入满50个字符,结束ERROR:CALL ERR-OUT;调用出错处理程序EXIT:,,29.设状态端口地址为86H,数据端口地址为87H,外部输入信息准备好状态标志为D7=1.请用查询方式写出读入外部信息的程序段。解答:POLL:IN AL,86H;从状态端口输入状态信息TEST AL,80H;检查READY是否是1JE POLL;为准备好,循环IN AL,87H;准备好,从数据端口输入数据30.设状态端口地址为76H,数据端口地址为75H,外设是否准备好信息由D7位传送,D7=l为准备好,D7=0为未准备好(忙),请用查询方式写出CPU向外部传送数据的程序段。解答:POLL:IN AL,76H;从状态端口输入状态信息TEST AL,80H;检查忙标志位JNE POLL;忙等待MOV AL,DATA;从缓冲区取数据OUT 75H,AL;从数据端口输出31.什么是A/D、D/A转换器?答: 把模拟量信号转换成数字量的器件为模/数转换器,简称为A/D转换器。把数字量信号转换成模拟量的器件为数/模转换器,简称为D/A转换器。32.A/D和D/A转换器在微型计算机应用中起什么作用?答:微型计算机只能对二进制数字形式表示的信息进行运算和处理,其运算和处理的接果也是数字量,但用微机进行自动测量、监控等系统中遇到的变量大部分是模拟量,这些模拟量必须转变成计算机能够接收的数字量,这个过程为模/数转换,完成这个转换的装置为模/数转换器(ADC)。反之计算机运算、处理的结果也不能直接去控制执行部件,因为各种执行部件要求的控制信号一般也是模拟量,因此需要将计算机输出的数字量控制信号转变成执行部件所需的模拟量,这个转换过程为数/模转换,完成这个转换的装置为数/模转换器(ADC)。33.D/A转换器的主要参数有哪几种?参数反映了D/A转换器什么性能?答:D/A转换器的主要参数有:1) 分辨率:最小输入电压与最大输出电压之比。也可用输入数字量的位数来表示。2) 转换精度:①当满刻度数字量输入时,模拟量输出的实际值与理论值之差(绝对精度)。②在转换范围内,对应于任一数字量输入,其模拟量输出的实际值与理论之字差。3) 建立时间:输入数字量为满刻度时(各位全1),从输入加上到输出模拟量达到满刻度值或满刻度值的某一百分比(如90%)所需的时间。若输出形式是电流,其D/A转换器的建立时间很短;若输出形式是电压,其D/A转换器的主要建立时间是输出运算放大器所需要的时间。34.A/D转换器的主要参数有哪几种?参数反映了A/D转换器什么性能?答: A/D转换器的主要参数有:1) 分辨率:转换器对输入电压微小变化响应能力的量度。由于分辨率与转换器的位数有直接关系,所以也常以A/D转换位数表示分辨率。2) 精度:A/D转换器的精度是指数字量所对应的模拟输入量的实际值与理论值之间的差值(绝对精度)。在整个转换范围内,任一个数所对应的实际模拟输入电压与理论输入电压的差(相对精度)。3) 转换时间:完成一次A/D转换所需要的时间,称为A/D转换电路的转换时间。35.分辨率和精度有什么区别?答:转换精度和分辨率是两个根本不同的概念。转换精度取决于构成转换器的各个部件的误差和稳定性,而分辨率取决于转换器的位数。36.DAC 0832有哪几种工作方式?每种工作方式适用于什么场合?每种方式用什么方法产生的?答: 三种工作方式:1) 单缓冲方式:此方式只适用于只有一路模拟量输出或几路模拟量非同步输出的情况。采用的方法是:控制输入寄存器和DAC寄存器同时接收数据,或者只用输入寄存器而把DAC寄存器接成直通方式。2) 双缓冲方式:此方式适用于多个DAC0832同时输出的情况。采用的方法是:先分别使这些DAC0832的输入寄存器接收数据,再控制这些DAC0832同时传送数据到DAC寄存器以实现多个D/A转换同步输出。3) 直通方式:此方式适用于连续反馈控制线路中,方法是数据不通过缓冲器,即WR1、WR2、XFER、CS均接地,ILE接高电平。此时必须通过I/O接口与CPU连接,以匹配CPU与D/A的连接。37.ADC把模拟量信号转换为数字量信号,转换步骤是什么?转换过程用到什么电路?答: 转换步骤分为四步:即采样、保持、量化和编码。采样和保持在采样保持电路中进行量化和编码在ADC中进行。38.ADC与微处理器接口的基本任务是什么?答: ADC与微处理器接口的基本任务是:向ADC转发启动转换信号;向CP提供转换结束信号,把转换好的数据送入微处理器.39.ADC中的转换结束信号(EOC)起什么作用?答: ADC中的EOC信号的作用是当ADC转换完毕时,EOC为“1”。所以EOC可以作中断请求信号,EOC可以作为被查询状态信号。40.如果0809与微机接口采用中断方式,EOC应如何与微处理器连接?程序又有什么改进? 答: 连接方案:可采用直接与CPU INTR脚连接,或通过8259A接 CPU。设ADC0809的端口号为PORTAD,则在指令OUT PORTAD,AL执行后,A/D转换器开始转换,转换结束时EOC发一个高电平为转换结束,此信号产生中断请求,CPU响应中断后,去执行中断处理程序,去转换结果IN AL,PORTAD,此时M/IO,RD有效,CPU获得转换结果。 本文由(www.wenku1.com)首发,转载请保留网址和出处!
免费下载文档:

我要回帖

更多关于 ES代表 的文章

 

随机推荐