第一篇:微机原理与接口技术 顾晖 习题参考答案
微机原理与接口技术 答案
目录
第1章习题答案......................................................................................2 第2章习题答案......................................................................................2 第3章习题答案......................................................................................5 第4章习题答案......................................................................................8 第5章习题答案....................................................................................20 第6章习题答案....................................................................................29 第7章习题答案....................................................................................29 第8章习题答案....................................................................................30 第9章习题答案....................................................................................33 第10章习题答案..................................................................................37 第11章习题答案..................................................................................40
第1章习题答案
1.计算机硬件的基本组成部分有哪些?简述各部分的功能 答:
计算机硬件的基本组成部分有:运算器、控制器、存储器、输入设备和输出设备五大组成部分;
运算器功能:完成各种算术运算或逻辑运算;
控制器功能:发出各种控制信息,使计算机各部件协调工作; 存储器功能:存储程序和数据;
输入设备:将程序和数据输入的部件; 输出设备:将结果数据输出的部件。2.简述微型计算机系统的组成。4分 答:
以微型计算机为核心,配以鼠标、键盘等外围设备、电源、接口电路,以及控制计算机工作的软件构成微型计算机系统。3.简述总线控制逻辑的任务。答:
主板与外部设备之间的数据传输必须通过系统总线,所以系统总线包含的信号线必须满足下列各种输入/输出操作的需要:① 访问分布于主板之外的存储器;② 访问I/O接口;③ 适应外部中断方式;④ 适应存储器直接与外部设备交换信息。总线控制逻辑的任务就是产生和接受这些操作所需要的信号。
4.简述冯·诺依曼的“程序存储和程序控制”原理。答:
计算机有运算器、控制器、存储器、输入设备和输出设备五大部分组成,计算机内部采用二进制数据的格式表示数据和指令。程序将事先保存在内存储器中,计算机在工作时,不需要操作人员干预,自动逐条取出指令并执行。5.简述微型计算机系统的启动过程。4分 答:
CPU首先执行主板上BIOS中的自检程序;执行引导装入程序,依次搜寻硬盘、光盘等;读出引导记录,装入引导程序;由引导程序将操作系统装入内存;执行操作系统。6.BIOS是什么?简述系统BIOS代码完成的工作。答:
BIOS是Basic Input Output System的缩写,指的是基本输入输出系统"。它是一组固化到计算机ROM芯片上的程序,保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。7.答:略。2 第2章习题答案
1.答:
为了区别所使用的数制,一般用以下两种书写格式表示:
① 用括号将数字括起,后面加数制区分,数制用下标的形式给出;
② 用后缀区分,二进制数、十进制数、八进制数、十六进制数的后缀分别为字母B(或b)、D(或d)、O(或o)或Q(或q)、H(或h)。
例如:十六进制数56.78可以表示成(56.78)16或56.78H; 十进制数56.78可以表示成(56.78)10或56.78D。2.答:
123D采用十进制,0AFH采用十六进制,77Q采用八进制,1001110B采用二进制。3.答:
字长为8位的二进制数原码表示的最大值:127,最小值:-127;补码表示的最大值:127,最小值:-128。
字长为16位的二进制数原码表示的最大值:32767,最小值:-32767;补码表示的最大值:32767,最小值:-32768。
4.把下列十进制数分别转换为二进制数和十六进制数。2分
1)125
2)255
3)72
4)5090 答:
(1)125D=0111 1101B=7DH(2)255D=1111 1111B=FFH(3)72D=0100 1000B=48H(4)5090D=0001 0011 1110 0010B=13E2H 5.答:
(1)1111 0000B=240D=F0H(2)1000 0000 B =128D =80H(3)1111 1111 B =255 D =FFH(4)0101 0101B=85D=55H 6.答:
(1)FFH=255D=1111 1111B(2)ABCDH=43981D=1010 1011 1100 1101B(3)123H=291D=0000 0001 0010 0011B(4)FFFFH=65535D=1111 1111 1111 1111B 7.答:
(1)8位时(16)原=0001 0000 ;(16)补=0001 0000;
16位时(16)原=0000 0000 0001 0000 ;(16)补=0000 0000 0001 0000;(2)8位时(-16)原=1001 0000 ;(-16)补=1111 0000;
16位时(-16)原=1000 0000 0001 0000 ;(-16)补=1111 1111 1111 0000;(3)8位时(+0)原=0000 0000;(+0)补=0000 0000;
16位时(+0)原=0000 0000 0000 0000;(+0)补=0000 0000 0000 0000; 3(4)8位时(-0)原=1000 0000 ;(-0)补=0000 0000;
16位时(-0)原=1000 0000 0000 0000;(-0)补=0000 0000 0000 0000;(5)8位时(127)原=0111 1111;(127)补=0111 1111;
16位时(127)原=0000 0000 0111 1111;(127)补=0000 0000 0111 1111;(6)8位时-128超过原码表示的范围;(-128)补=1000 0000;
16位时(-128)原=1000 0000 1000 0000;(-128)补=1111 1111 1000 0000;
(7)8位时(121)原=0111 1001 ;(121)补=0111 1001;
16位时(121)原=0000 0000 0111 1001;(121)补=0000 0000 0111 1001;(8)8位时(-9)原=1000 1001 ;(-9)补=1111 0111;
16位时(-9)原=1000 0000 0000 1001;(-9)补=1111 1111 1111 0111; 8.实现下列转换
2分
1)[X]原=10111110,求[X]补
2)[X]补=11110011,求[-X]补 3)[X]补=10111110,求[X]原
4)[X]补=10111110,求[X]反 答:
(1)[x]补=1100 0010;(2)[-x]补=0000 1101;(3)[x]原=1100 0010;(4)[x]反=1011 1101。9.答:
(1)A>B;(2)A<B 10.答:
(1)溢出;(2)13H;(3)溢出;(4)EDH;(5)EDH。11.完成下列8位二进制数的逻辑运算
1分
1)11001100∧10101010
2)11001100∨10101010 3)11001100○+10101010
4)10101100∧10101100 5)10101100 ○+10101100
6)10101100∨10101100 7)~10101100 答:
(1)1000 1000;(2)1110 1110;(3)0110 0110;(4)1010 1100;(5)0000 0000;(6)1010 1100;(7)=0101 0011。12.答:
(1)30H=48,字符为‘0’;(2)39H=57,字符为‘9’;(3)42H=66,字符为‘B’;(4)62H=98,字符为‘b’;(5)20H=32,字符为空格;(6)7H=7,字符为报警符;
13、答: 十进制 49 123 7 62 压缩BCD码 0100 1001B 0001 0010 0011B 0000 0111B 0110 0010B 非压缩BCD码
0000 0100 0000 1001B 0000 0001 0000 0010 0000 0011B 0000 0111B 0000 0110 0000 0010B ASCII码 3439H
313233H 37H 3632H 4 第3章习题答案
1.(1)答:
物理地址:物理地址(PA)是20位无符号二进制数,是CPU访问存储器的实际地址。每个存储单元对应一个物理地址。8086存储空间的物理地址范围是:00000H~FFFFFH。逻辑地址:采用分段结构的存储器中,把通过段地址和偏移地址来表示的存储单元的地址称为逻辑地址,记为:段地址:偏移地址。
段地址:8086规定各逻辑段从节的整数边界开始,即段首地址二进制值的低4位是0000,把段首地址的高16位称为段基址或段地址。
偏移地址:把某一存储单元相对于段地址的段内偏移量称为偏移地址(也称有效地址EA)。段地址和偏移地址都是是16位无符号二进制数。(2)答:
时钟周期:计算机的“时钟”是由振荡源产生的、幅度和周期不变的节拍脉冲,每个脉冲周期称为时钟周期,又称为T状态或T周期,时钟周期是微机系统工作的最小时间单元。总线周期:当CPU访问存储器或输入/输出端口时,需要通过总线进行读或写操作,这个过程称为总线周期(Bus Cycle)。总线周期是利用总线完成一次读/写所需要的时间。
指令周期:执行一条指令所需要的时间称为指令周期(Instruction Cycle)。指令周期由1个或多个总线周期组成。
解释下边名词:(3)最小模式、最大模式 1分 答:
最小模式:也称为单处理器模式,是指系统中只有一片8086微处理器,所连接的存储器容量不大、片子不多,所要连接的I/O端口也不多,系统的控制总线就直接由CPU的控制线供给,从而使得系统中的总线控制电路减到最少。最小模式适用于较小规模的系统。
最大模式:相对于最小模式而言,适用于中、大型规模的系统。系统中有多个微处理器,其中一个是主处理器8086,其他的处理器称为协处理器,承担某方面专门的工作。需要增加一片8288来对8086CPU发出的控制信号进行变换和组合,以得到对存储器或I/O端口的读/写信号和对锁存器、总线收发器的控制信号。2.答:
EU:负责指令的执行,即从总线接口部件BIU的指令队列取指令,指令执行后向BIU送回运算结果,同时把运算结果的状态特征保存到标志寄存器中。
BIU:负责CPU与存储器、I/O设备之间的数据传送。BIU完成以下操作:取指令送给指令队列、配合执行部件从指定的内存单元或者外设端口中取数据、将数据传送给执行部件或者把执行部件的操作结果传送到指定的内存单元或外设端口中。
8086的BIU和EU在很多时候可以并行工作,使得取指令、指令译码和执行指令这些操作构成操作流水线。
① 当指令队列中有两个空字节,且EU没有访问存储器和I/O接口的要求时,BIU会自动把指令取到指令队列中。
② 当EU准备执行一条指令时,它会从指令队列前部取出指令执行。在执行指令的过程中,如果需要访问存储器或者I/O设备,那么EU会向BIU发出访问总线的请求,以完成访问存储器或者I/O接口的操作。如果此时BIU正好处于空闲状态,那么,会立即响应EU的总线请求;但如果BIU正在将某个指令字节取到指令队列中,那么,BIU将首先完成这个取指令操作,然后再去响应EU发出的访问总线的请求。
③ 当指令队列已满,而且EU又没有总线访问时,BIU便进入空闲状态。5 ④ 在执行转移指令、调用指令和返回指令时,下面要执行的指令就不是在程序中紧接 着的那条指令了,而BIU 往指令队列装入指令时,总是按顺序进行的。在这种情况下,指 令队列中已经装入的指令就没有用了,会被自动消除。随后,BIU 会往指令队列中装入另一
个程序段中的指令。3.答:
地址信号是CPU 发送给内存或I/O 设备的,所以地址线是单向的;
数据信号可以从CPU 发送给内存或I/O 设备,也可以从内存或I/O 设备发送给CPU,故而数据线是双向的。4.答:
8086CPU 中有14 个寄存器。它们是:4 个16 位的通用寄存器:AX、BX、CX、DX 和 8 个8 位的通用寄存器:AH、AL、BH、BL、CH、CL、DH、DL;指针和变址寄存器SP、BP、SI、DI;4 个16 位的段寄存器CS、DS、SS 和ES;标志寄存器FR;指令指针寄存器 IP。功能略。
5.将十六进制数5678H和以下各数相加,试求叫法运算的结果及进算后标志寄存器中6个状态标志的值,用十六进制数表示运算结果。2分 1)7834H 2)1234H 3)8765H 答:
(1)加法运算的结果为:CEACH;CF=0,PF=1,AF=0,ZF=0,SF=1,OF=1;(2)加法运算的结果为:68ACH;CF=0,PF=1,AF=0,ZF=0,SF=0,OF=0;(3)加法运算的结果为:DDDDH;CF=0,PF=1,AF=0,ZF=0,SF=1,OF=0。
6.8086CPU可寻址的存储器地址范围是多少?可寻址的I/O端口地址范围是多少?2分 答:
8086CPU 可寻址的存储器地址范围是00000H~FFFFFH; 可寻址的I/O 端口地址范围是0000H~FFFFH。7.答:
由于8086CPU 提供20 位地址,但8086 中可用来存放地址的寄存器,如IP、SP、BX、SI 等都是16 位的,只能直接寻址64KB。为了寻址1MB 存储空间,8086CPU 采用了典型的 存储器分段技术,即将整个存储器空间分为许多逻辑段,每个逻辑段的容量小于或等于64KB。分段后,对存储器的寻址操作不再直接用20 位的物理地址,而是采用段地址加段内偏移地 址的二级寻址方式。8.答:
将AH的内容送存储单元的操作过程中:M / IO 1,WR 0,RD 1,DT / R 1; 将I/O 端口的内容送AL的操作过程中:M / IO 0,WR 1,RD 0,DT / R 0。9.答:
BHE A0 有效的数据引脚 操 作 0 0 6
AD15~AD0(一个总线周期同时访问奇体和偶 体,从奇地址单元读/写字数据的高8 位,从偶地 址单元读/写字数据的低8 位)从偶地址读/写一个 字 6 1 0 AD7~AD0 从偶地址读/写一个 字节
0 1 AD15~AD8 从奇地址读/写一个 字节 0 1 1 0 AD15~AD8(第一个总线周期从奇字数据的低8 位)
AD7~AD0(第二个总线周期从偶地址单元读/写 字数据的高8 位)从奇地址读/写一个 字
10.简述8086系统复位后各寄存器的状态。2分 答:
8086 系统复位后,指令指针(IP)为0000H;CS 寄存器为FFFFH,其他寄存器为0000H; 指令队列清空。
11.简述8086系统中为什么一定要有地址锁存器?需要所存哪些信息? 2分 答:
8086 的A19/S6~A16/S3 和AD15~AD0 是复用信号,需要地址锁存器将地址信息保存 起来,为外接存储器或外设提供地址信息。需要锁存的信号是:地址信号及BHE 信号。
12.8086CPU基本的总线周期包括几个时钟周期? 1分 答:
8086CPU 一个基本的总线周期包含4 个时钟周期:T1、T2、T3 和T4。
在T1 状态,M/ IO有效,指示CPU 访问的是存储器还是外设,之后CPU 往多路复用
总线上发出地址信息,以指出要寻址的存储单元或外设端口的地址。在T1 状态,CPU 还必 须在ALE 引脚上输出一个正脉冲作为地址锁存信号。BHE信号也在T1 状态送出,它用来 表示数据传送的字宽。
在T2 状态,CPU 从总线上撤销地址,使总线的低16 位浮空,置成高阻状态,为传输 数据作准备。总线的最高4 位(A19~A16)用来输出本总线周期的状态信息。读信号RD或 写信号WR在T2 状态变为有效,指示CPU 将进行哪种操作(读或写)。
在T3 状态,多路总线的高4 位继续提供状态信息,而多路总线的低16 位上出现由CPU 读出的数据或者CPU 从存储器或端口写入的数据。
在T4 状态和前一个状态的交界处,CPU 对数据总线进行采样,获得数据,总线周期结 束。
13.什么情况下需要插入TW周期?应该插入多少个TW取决于什么因素? 2分
答:
在有些情况下,外设或存储器速度较慢,不能及时地配合CPU 传送数据。这时,外设 或存储器会通过“READY”信号线在T3 状态启动之前向CPU 发一个“数据未准备好”信 号,于是CPU 会在T3 之后插入1 个或多个附加的时钟周期TW。取决与外设或存储器速度。14.答:
两种操作时序的不同之处发生在T1 和T2 状态。
① 在T1状态,读周期:DT/R应输出低电平;写周期:DT/R应输出高电平。
② 在T2 状态,读周期:RD有效,而WR无效,AD15~AD0 为高阻态;写周期:RD 变为无效,而写信号WR变为有效,AD15~AD0 在地址撤销之后立即送出要写入存储器或 外设端口的数据。7 15.答:
在最小模式下,读信号RD、ALE 和DT/R、DEN等信号直接由CPU 给出; 在最大模式下,总线控制器8288 根据 2 1 S ,S 和
0 S 状态信号产生读信号MRDC和IORC,ALE 和DT/R、DEN 也是由8288 发出的,而且DEN 信号的极性与CPU 在最小模式下发 出的DEN信号正好相反。8 第4章习题答案
1.什么叫寻址方式?8086CPU支持哪几种寻址方式? 2分 答:
指令中关于如何求出操作数有效地址的方法称为寻址方式。
8086CPU支持多种寻址方式,根据操作数的类型及来源大致分为3类:数据寻址、转移地址寻址和I/O寻址。2.答:
8086汇编指令可以采用7种基本的数据寻址方式:①立即寻址;②寄存器寻址;③直接寻址;④寄存器间接寻址;⑤寄存器相对寻址;⑥基址变址寻址;⑦相对基址变址寻址。与存储器寻址方式(后5种)相比,寄存器寻址方式最快。
3.内存寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用某个段寄存器指出段地址,指令中应该如何表示? 2分 答:
如果指令中没有用前缀说明操作数存放在哪个段,则操作数默认存放在数据段。
8086系统允许操作数存放在代码段、堆栈段或附加段。此时,就需要在指令中利用前缀指明段超越。例如: MOV ES:[1225H],AX 4.在8086系统中,设DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,BP=0100H,VAR的偏移量为0600H,请指出下列指令的目标操作数的寻址方式,若目标操作数为存储器操作数,请计算它们的物理地址是多少? 2分
1)MOV BX,12 2)MOV [BX],12 3)MOV ES:[SI],AX 4)MOV VAR,8 5)MOV [BX][SI],AX 6)MOV 6[BP][SI],AL 7)MOV [100H],DX 8)MOV 6[BX],CX
9)MOV VAR+5,AX 答:
(1)寄存器寻址方式
(2)寄存器间接寻址方式,PA=10300H(3)寄存器间接寻址方式,PA=20200H(4)直接寻址方式,PA=10060H(5)基址变址寻址方式,PA=10500H(6)相对基址变址寻址方式,PA=12300H(7)直接寻址方式,PA=11000H(8)__________寄存器相对寻址方式,PA=10306H(9)直接寻址方式,PA=10065H 5.判断指令对错。如果是错误的,请说明原因答。2分 1)XCHG CS,AX ×
2)MOV [BX],[1000H] × 3)XCHG BX,IP × 4)PUSH CS √ 5)POP CS × 6)IN BX,DX √
7)MOV BYTE[BX],1000 × 8)MOV CS,[1000H] × 9)MOV BX,OFFSET VAR[SI] √ 10)MOV AX,[SI][DI] ×
11)MOV COUNT[BX][SI],ES:AX × 6.试述以下指令的区别。2分
1)MOV AX,3000H 与 MOV AX,[3000H] 2)MOV AX,MEM 与 MOV AX,OFFSET MEM 3)MOV AX,MEM 与 LEA AX,MEM 4)JMP SHORT L1 与 JMP NEAR PTR L1 5)CMP DX,CX 与 SUB DX,CX 6)MOV [BP][SI],CL 与 MOV DS:[BP][SI],CL 答:
(1)源操作数的寻址方式不同。MOV AX,3000H指令的源操作数采用的是立即数寻址方式,MOV AX,[3000H]指令的源操作数采用的是直接寻址方式。(2)指令执行后,AX的值不同。MOV AX,MEM指令执行后,AX得到的是MEM单元的内容,而MOV AX,OFFSET MEM指令执行后,AX得到的是MEM单元的地址。(3)指令不同。MOV AX,MEMMOV AX,MEM指令执行后,AX得到的是MEM单元的内容,而LEA AX,MEM指令执行后,AX得到的是MEM单元的地址。
(4)转移的类型不同。JMP SHORT L1指令实现的是段内转移,而JMP NEAR PTR L1指令实现的是段间转移。
(5)指令的执行结果不同。CMP DX,CX指令执行后,DX的值不变,而SUB DX,CX指令执行后,DX的值是两寄存器值的差。
(6)操作数所在段不同。MOV [BP][SI],CL指令访问的是堆栈段的存储单元,而MOV DS:[BP][SI],CL指令访问的是数据段的存储单元。7.答:
(1)MOV BYTE PTR [BP],200指令执行后,(58200H)=200H(2)MOV WORD PTR [BX],2000指令执行后,(22400H)=2000H 8.答:
当前栈顶地址是:FE00H:2010H;执行PUSH BX指令后,栈顶地址变为:FE00H:200EH,栈顶2字节内容是:3457H。9.答:
(1)(DX)=3C62H,CF=1(2)(DX)=03C6H,CF=0(3)(DX)=18A0H,CF=1(4)(DX)=2BC6H,CF=0(5)(DX)=18B7H,CF=1(6)(DX)=BCC5H,CF=0 10.答:(AX)CF ZF OF SF PF(1)134EH 0 0 0 0 1(2)0821H 0 0 0 0 1(3)F142H 1 0 0 1 1(4)0A69 1 0 10
0 1 1(5)F596--(6)0A69 0 0 0 0 1 11.设AX和BX是符号数,CX和DX是无符号数,若转移目标指令的标号是NEXT,请分别为下列各项确定CMP和条件转移指令。5分
1)CX值超过DX转移 2)AX值未超过BX转移 3)DX为0转移 4)CX值等于小于DX转移 答:
(1)CMP CX,DX JA NEXT(2)CMP AX,BX JNA NEXT(3)CMP DX,0 JZ NEXT(4)CMP CX,DX JBE NEXT 12.阅读分析下列指令序列 ADD AX,BX JNO L1 JNC L2 SUB AX,BX JNC L3 JNO L4 JMP L5 若AX和BX的初值分别为以下5种情况,则执行该指令序列后,程序将分别转向何处(L1-L5中的哪一个)?
1)AX=14C6H, BX=80DCH 2)AX=0B568H,BX=54B7H 3)AX=42C8H, BX=608DH 4)AX=0D023H,BX=9FD0H 11
5)AX=9FD0H, BX=0D023H 答:
(1)程序转向L1。(2)程序转向L1。(3)程序转向L2。(4)程序转向L5。(5)程序转向L5。13.答:
因为普通运算指令执行的是二进制数的运算,而BCD码是十进制数,所以,需要对运算结果进行十进制调整。
在做BCD码的加、减和乘法运算时,十进制调整指令放在运算指令之后;而作BCD码的除法运算时,在运算指令之前用十进制调整指令对被除数进行调整。14.答: MOV Cl,3 10 SHR bx,cl 15.答:(略)16.答: 17.答:
DATA SEGMENT COUNT=100H ORG 1000H D_DATA DB COUNT DUP(?)ORG 2170H S_DATA DB COUNT/5 DUP(1,2,3,4,5)DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,S_DATA LEA DI,D_DATA MOV CX,COUNT REP MOVSB MOV AL,1 MOV CX,COUNT LEA DI,D_DATA AGAIN: CMP BYTE PTR [DI],AL JNZ NEXT MOV BYTE PTR [DI],' ' NEXT: 12
INC DI LOOP AGAIN EXIT: MOV AH,4CH INT 21H CODE ENDS END START 11 18.答: 19.答: CODE SEGMENT ASSUME CS:CODE START: MOV AX,5678H MOV DX,1234H NOT AX NOT DX ADD AX,1 ADC DX,0 EXIT: MOV AH,4CH INT 21H CODE ENDS END START;本程序未考虑溢出的情况。DATA SEGMENT A1 DW 5050H A2 DW ?;存A1的反码 A3 DW ?;存A1的补码 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,A1 NOT AX MOV A2,AX INC AX MOV A3,AX EXIT: MOV AH,4CH INT 21H CODE ENDS END START 13 20.答: 21.答:
DATA SEGMENT;AT 5000H ORG 3481H DAT DB 12H DB ?,?,? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,DAT NEG AL MOV DAT+1,AL MOV AL,DAT XOR AL,00001111B MOV DAT+2,AL MOV AL,DAT OR AL,11110000B MOV DAT+3,AL EXIT: MOV AH,4CH INT 21H CODE ENDS END START COUNT=1000 DATA SEGMENT ORG 1000H DAT DB 10 DUP(12H,-5,-3,0,-128,56H,98H,4,128,200)ORG 2000H MINDAT DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,DAT MOV CX,COUNT DEC CX MOV AL,[SI] NEXT: INC SI 14
CMP AL,[SI] JLE ISMIN MOV AL,[SI] ISMIN: LOOP NEXT MOV MINDAT,AL EXIT: MOV AH,4CH INT 21H CODE ENDS END START 13 22.答: DATA SEGMENT STRING1 DB 'hELLO!' COUNT1=$-STRING1 STRING2 DB 'hEL1O!' COUNT2=$-STRING2 IM DB 'MATCH$' NM DB 'NOT MATCH$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,STRING1 LEA DI,STRING2 MOV CX,COUNT1 MOV BX,COUNT2 CMP CX,BX JNZ DISPNOTMATCH NEXT: MOV AL,[SI] MOV AH,[DI] CMP AL,AH JNZ DISPNOTMATCH INC SI INC DI LOOP NEXT ISMATCH: MOV DX,OFFSET IM MOV AH,9 INT 21H 15
JMP EXIT DISPNOTMATCH: MOV DX,OFFSET NM MOV AH,9 INT 21H EXIT: MOV AH,4CH INT 21H CODE ENDS END START 14 23.答: 24.答: DSEG SEGMENT DATA DB 5,6,7,8 DW ? DATA2 DB 1,10,100,20 DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV DX,0 MOV CX,4 LEA SI,DATA LEA DI,DATA2 NEXT: MOV AL,[DI] MOV BL,[SI] CALL DOMUL ADD DX,AX INC DI INC SI LOOP NEXT MOV WORD PTR DATA+4,DX EXIT: MOV AH,4CH INT 21H DOMUL PROC MUL BL RET DOMUL ENDP CODE ENDS 16
END START MOV CX,100 MOV AX,SEG LIST MOV DS,AX MOV AX,SEG BLK MOV ES,AX LEA SI,LIST ADD SI,CX LEA DI,BLK ADD DI,CX STD REP MOVSB 15 25.答:
JMP SHORT LAB指令是一条双字节指令。这条指令取出后,(IP)=0102H,转移目标的偏移地址=(IP)+位移量。所以,转移目标的物理地址=(CS)╳16+(IP)+位移量。(1)转移目标的物理地址=(CS)╳16+0158H(2)转移目标的物理地址=(CS)╳16+0182H(3)转移目标的物理地址=(CS)╳16+017AH(4)转移目标的物理地址=(CS)╳16+01E2H 26.答: DSEG SEGMENT BUFFER DW 8 DB '12345678' DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV CX,BUFFER SAR CX,1 LEA SI,BUFFER MOV DI,SI ADD DI,2 AGAIN: ADD SI,2 MOV AL,[SI] AND AL,0FH SAL BYTE PTR [SI+1],1 SAL BYTE PTR [SI+1],1 SAL BYTE PTR [SI+1],1 SAL BYTE PTR [SI+1],1 OR AL,BYTE PTR [SI+1] 17
MOV [DI],AL INC DI LOOP AGAIN EXIT: MOV AH,4CH INT 21H CODE ENDS END START DSEG SEGMENT ORG 10H DAT DB 10 DB ? DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV AL,DAT MOV BL,AL SAL BL,1 ADD AL,BL MOV CL,2 SAL BL,CL ADD AL,BL MOV DAT+1,AL EXIT: MOV AH,4CH INT 21H CODE ENDS END START 16 27.答: 28.答: 29.答: DSEG SEGMENT ORG 10H DAT DB 10H,20H DB ?,? DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG START: MOV AX,DSEG 18
MOV DS,AX MOV AL,DAT MOV AH,DAT+1 MOV CL,3 SAR AX,CL MOV DAT+2,AL MOV DAT+3,AH EXIT: MOV AH,4CH INT 21H CODE ENDS END START DSEG SEGMENT BLOCK DW 8 DUP(10H,20H,-3,-9)DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG START: MOV AX,DSEG MOV DS,AX LEA SI,BLOCK MOV CX,32 AGAIN: MOV AX,[SI] CMP AX,0 JNS NEXT NEG AX MOV [SI],AX NEXT: INC SI INC SI LOOP AGAIN EXIT: MOV AH,4CH INT 21H CODE ENDS END START 17 DSEG SEGMENT ORG 3030H DAT DW 1234H,-1234H,?,? DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG 19
START: MOV AX,DSEG MOV DS,AX MOV AX,DAT MOV BX,DAT+2 IMUL BX MOV DAT+4,AX MOV DAT+6,DX EXIT: MOV AH,4CH INT 21H CODE ENDS END START 18 第5章习题答案
1.答:
标号是指令的符号地址,可用作控制转移指令的操作数。标号具有3种属性:段属性、偏移属性和类型属性。2.答:
变量是存储单元的符号地址。
变量具有3种属性:段属性、偏移属性和类型属性。3.答:
伪指令语句,也称指示性语句,是不可执行语句,汇编后不产生目标代码,它仅仅在汇编过程中告诉汇编程序如何汇编源程序。
宏是一个以宏名定义的指令序列。一旦把某程序段定义成宏,则可以用宏名代替那段程序。在汇编时,要对宏进行宏展开,即把以宏名表示的地方替换为该宏对应的指令序列的目标代码。宏指令可以看成指令语句的扩展,相当于多条指令语句的集合。4.答:
汇编语言表达式中有如下运算符:算术操作符、逻辑操作符、移位操作符、关系操作符、数值回送操作符和属性操作符。
操作符所完成的运算在汇编阶段进行。5.答: 略。
6.按下列要求,写出各数据定义语句 2分
1)DB1为10H个重复的字节数据序列:1,2,5个3,4。2)DB2为字符串‟STUDENTS‟。
3)DB3为十六进制数序列:12H,ABCDH。
4)用等值语言给符号COUNT赋值DB1数据区所占字节数,该语句写在最后。答:(1)DB1 DB 10H DUP(1,2, 5 DUP(3),4)(2)DB2 DB 'STUDENT'(3)BD3 DW 12H,0ABCDH
(4)COUNT EQU DB2-DB1 7.答:
第一个OR表示该指令是OR指令,在程序运行时,该OR操作被执行。第二个OR是逻辑操作符OR,在汇编时,OR运算被执行。
8.对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么? 4分 PREP DB ? TABA DW 5 DUP(?)TABB DB „NEXT‟ TABC DD 12345678H 1)MOV AX,TYPE PREP 2)MOV AX,TYPE TABA 3)MOV CX,LENGTH TABA 4)MOV DX,SIZE TABA 5)MOV CX,LENGTH TABB 6)MOV DX,SIZE TABC 答:
(1)(AX)=1(2)(AX)=2(3)(CX)=5(4)(DX)=0AH(5)(CX)=1(6)(DX)=4 9.设数据段DSEG中符号及数据定义如下,试画出数据在内存中的存储示意图。4分 DSEG SEGMENT DSP=100 SAM=DSP+20 DAB DB „/GOTO/‟,0DH,0AH DBB DB 101B,19,‟a‟.RADIX 16 CCB DB 10 DUP(?)EVEN DDW DW „12‟,100D,333,SAM.RADIX 10 EDW DW 100 LEN EQU $-DAB DSEG ENDS 答:略。10.答: 19 11.答: 12.答: DSEG SEGMENT STRING DB 'NEXT123DF$' DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG START: 21
MOV AX,DSEG MOV DS,AX LEA SI,STRING MOV CX,0 AGAIN: MOV AL,[SI] CMP AL,'$' JZ NEXT INC CX INC SI JMP AGAIN NEXT: MOV DX,CX MVDAT: MOV [SI]+2,AL DEC SI MOV AL,[SI] LOOP MVDAT MOV [SI]+2,AL MOV WORD PTR [SI],DX EXIT: MOV AH,4CH INT 21H CODE ENDS END START DSEG SEGMENT STRING DB 'It is FEB&03' COUNT=$-STRING DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG START: MOV AX,DSEG MOV DS,AX LEA SI,STRING MOV CX,COUNT AGAIN: MOV AL,[SI] CMP AL,'&' JNZ NEXT MOV AL,' ' MOV [SI],AL NEXT: INC SI 22
LOOP AGAIN EXIT: MOV AH,4CH INT 21H CODE ENDS END START DSEG SEGMENT BLOCK DB 4,5,-2,7,8,9,2,1,0AH,1BH,87H,23H,44H,33H,45H,28H,0DH,8EH,66H,22H COUNT=$-BLOCK DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG START: MOV AX,DSEG MOV DS,AX 20 13.答:(3)(4)(2)(5)(1)(6)1B50H 1000H 1A70H 150BH 上表左侧的序号,表示对应操作完成后SP指向的栈顶的位置。14.设计以下子程序:
1)将AX中的4位BCD码转换为二进制码,放在AX中返回。
2)将AX中无符号二进制数(<9999D)转换为4位BCD码串,放在AX中返回。3)将AX中有符号二进制数转换为十进制数ASCII码字符串,DX和CX返回串的偏移地址和长度。(4分)答: SUB1 PROC MOV BX,AX MOV CL,4 ROL BX,CL MOV AX,BX AND AX,000FH MOV CX,1000 MUL CX;千位在DX,AX,有效值在AX中 PUSH AX MOV CL,4 ROL BX,CL MOV AX,BX AND AL,0FH MOV CL,100 23
MUL CL;百位在AX POP CX ADD AX,CX;千百位在AX PUSH AX MOV CL,4 ROL BX,CL MOV AX,BX AND AL,0FH MOV CL,10 MUL CL;十位在AX POP CX ADD AX,CX;千百十位在AX MOV CL,4 ROL BX,CL AND BX,0FH ADD AX,BX RET SUB1 ENDP SUB2 PROC MOV DX,0 MOV CX,1000 DIV CX;千位数字在AX中 MOV BX,AX MOV CL,4 ROR BX,CL;千位数字移至BX的高4位 MOV AX,DX MOV CL,100 DIV CL;百位数字在AL中 OR BH,AL;千百位置BH MOV AL,AH MOV AH,0 MOV CL,10 DIV CL;十位数字在AL中,个位在AH中 MOV CL,4 SAL AL,CL MOV BL,AL;十位数字置BL高4位 OR BL,AH;十位个位置BL MOV AX,BX RET SUB2 ENDP SUB3 PROC PUSH BX MOV BX,0 LEA DI,ASCNUM 24
CMP AX,0 JNS CHG NEG AX MOV BYTE PTR [DI],'-' JMP NEXT CHG: N5: MOV AL,AH MOV AH,0 MOV CL,10 DIV CL CMP BX,0 JNZ N6 CMP AL,0 JZ N7 MOV BX,2 15.答: 16.答: 17.答:略。18.答:略。CODE SEGMENT ASSUME CS:CODE START: MOV AH,1 INT 21H CMP AL,'a' JB NOCHG CMP AL,'z' JA NOCHG SUB AL,20H NOCHG: MOV DL,AL MOV AH,2 INT 21H EXIT: MOV AH,4CH INT 21H CODE ENDS END START;键盘输入的成绩以逗号分割;输入完毕按回车结束 DSEG SEGMENT STRING DB 40,?,40 DUP(?)CJ DB 10 DUP(?)25
S6 DB ? S7 DB ? S8 DB ? S9 DB ? S10 DB ? DSEG ENDS CODE SEGMENT ASSUME CS:CODE,DS:DSEG START: MOV AX,DSEG MOV DS,AX LEA DX,STRING MOV AH,10 INT 21H LEA DI,CJ LEA SI,STRING+2 MOV BH,0 MOV AL,0 AGAIN: MOV BL,[SI] CMP BL,',' JZ NEXT CMP BL,0DH JZ NEXT SUB BL,30H MOV CL,10 MUL CL ADD AL,BL INC SI JMP AGAIN NEXT: MOV [DI],AL INC DI MOV AL,0 INC BH INC SI CMP BL,0DH JNZ AGAIN TJ: LEA DI,CJ TJ1: MOV AL,[DI] CMP AL,100 JZ ADDS10 26
CMP AL,90 JAE ADDS9 CMP AL,80 JAE ADDS8 CMP AL,70 JAE ADDS7 CMP AL,60 JAE ADDS6 ADDS10: INC S10 JMP TJNEXT ADDS9: INC S9 JMP TJNEXT ADDS8: INC S8 JMP TJNEXT ADDS7: INC S7 JMP TJNEXT ADDS6: INC S6 TJNEXT: INC DI DEC BH JNZ TJ1 EXIT: MOV AH,4CH INT 21H CODE ENDS END START 24 19.答: 20.答: 21.答: 22.答: MOV BX,X CMP BX,Y JG SET1 JZ SET0 MOV AL,-1 JMP EXIT SET1: MOV AL,1 JMP EXIT 27
SET0: MOV AL,0 EXIT: … LEA SI,STR1 LEA DI,STR2 MOV CX,COUNT NEXT: MOV BX,[SI] CMP BX,[DI] JNZ NOEQ INC SI INC DI LOOP NEXT MOV AX,0FFFFH JMP EXIT NOEQ: MOV AX,SI EXIT: …
DATA SEGMENT LINTAB DW 12,-5,33,21,9 COUNT DW($-LINTAB)/2 KEYBUF DW 21 ADDR DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA DI,LINTAB MOV CX,COUNT MOV AX,KEYBUF REPNZ SCASW JNZ SET1 SUB DI,2 MOV ADDR,DI JMP EXIT SET1: MOV ADDR,0FFFFH EXIT: MOV AX,4C00H INT 21H CODE ENDS END START DATA SEGMENT BUF DB 100 COUNT DB ? DB 100 DUP(?)MESS1 DB 'NUMBER:$' 28
MESS2 DB 'LETTER:$' MESS3 DB 'LENGTH:$' DATA ENDS MOV DL,0AH MOV AH,2 INT 21H;换行显示 MOV AH,9 LEA DX,MESS3 INT 21H 25 23.答: DATA SEGMENT STRING DB 'HELL MY MASM!' COUNT=$-STRING DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BX,0 26 27 第6章习题答案
略。
第7章习题答案
1.半导体存储器的分类如下:
2.什么是RAM和ROM?RAM和ROM各有什么特点?2分
随机存取存储器RAM,又称为读/写存储器,其每个存储单元的内容可以随时按需要进行读/写操作。RAM主要用来保存各种输入/输出数据、中间结果、与外存交换的信息,也可作堆栈使用。而ROM的内容只能读出,不能写入或改写,一般用来存放固定的程序和数据。
3.半导体存储器的主要技术指标:存储容量、读/写速度(存取时间和存储周期)、可靠性。4.8086CPU和存储器连接时要考虑哪些方面的因素?(2分)
8086CPU和存储器连接时要考虑:存储芯片数,AB、DB和一些控制信号的连接,奇、偶片的设置,地址译码方式等。
5.常用的存储器地址译码方式有哪些?(2分)
常用的存储器地址译码方式有:全地址译码、部分地址译码、线选法。6.在8086系统中,若用1024*1位的RAM芯片组成16K*8位的存储器,需要多少芯片?系统地址
总线中有多少位参与片内寻址?多少位用作芯片选择信号?(2分)
需要(16k8)/(10241)=128片,CPU地址线中片内寻址10位,片外4位。7.
第8章习题答案
1.简述I/O 接口的功能。(2分)
I/O 接口的功能:对输入/输出数据进行缓冲和锁存、对信号的形式和数据的格式进行变 换、对I/O 端口进行寻址、提供联络信号等。
2.CPU与外设之间的数据传输方式有哪些?简要说明各自的含义。(2分)
CPU与外设之间的数据传输方式有程序控制方式(无条件传输方式和程序查询方式)、中断方式、DMA、通道控制和I/O处理器。
无条件传输方式:CPU不需要了解外设状态,直接与外设传输数据,适用于按钮开关、发光二极管等简单外设与CPU的数据传送过程。
程序查询方式:CPU与外设传输数据之前,先检查外设状态,如果外设处于“准备好”状态(输入设备)或“空闲”状态(输出设备),才可以传输数据。
中断方式:外设在数据准备好之后再通知CPU,这样,CPU在没接到外设通知前只管做自己的事情,只有接到通知时才执行与外设的数据传输工作。
DMA:直接存储器存取方式,将外设与内存间建立起直接的通道,CPU不再直接参加外设与内存间的数据传输,而是在系统需要进行DMA传输时,将CPU对地址总线、数据总线及控制总线的管理权交由DMA控制器进行控制。
通道控制和I/O处理器:主CPU启动通道工作,通道控制器即从主存或通道存储器中取出相应的程序,控制数据的输入/输出。
3.什么是端口?通常有哪几类端口?I/O端口的寻址方式有哪两种?在80X86系统中,采用哪一种?(2分)
每个I/O接口内部一般由3类寄存器组成,CPU与外设进行数据传输时,各类信息在接口中进入不同的寄存器,一般称这些寄存器为I/O端口。包括数据端口、状态端口、控制端口。端口寻址方式有存储器映像的I/O寻址、I/O映像的I/O寻址。80X86系统采用后者。
4.M/:低电平,ALE:高电平,:低电平;输入时DT/为低电平,为低电平有效;输出时DT/为高电平,为低电平有效。
5.在输入/输出电路中,为什么常常要使用锁存器和缓冲器?(2分)在外设接口电路中,经常需要对传输过程中的信息进行锁存或缓冲,所以需要锁存器和缓冲器。6.
DATA SEGMENT AT 2000H ORG 2000H BUF DB 100 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: MOV AX,DATA
MOV DS,AX LEA SI,BUF MOV CX,100 INPUT: MOV DX,0FFE2H IN AL,DX;读状态端口
TEST AL,01H;测输入状态D0位 JZ INPUT;未“准备好”转INPUT MOV DX,0FFE0H;读取输入字符 IN AL,DX MOV [SI],AL;输入字符存缓冲区 INC SI 30 LOOP INPUT MOV AH,4CH;返回DOS INT 21H CODE ENDS END START 7. LED0 IOW LED1 LED7 OE G Q0 74LS373 D0~D7 Q1 Q7.....Y ≥1 D0~D7 CODE SEGMENT ASSUME CS:CODE MAIN PROC FAR START: PUSH DS MOV AX,0 31
PUSH AX MOV DX,200H;设I/O 端口为200H AGAIN: MOV AH,1;读键盘缓冲区字符 INT 16H CMP AL,1BH;若为“Esc”键,则退出 JZ EXIT MOV AL,0FFH;灯全亮 OUT DX,AL;输出控制LED MOV BX,5;向子程序传递参数,实现50ms 软延时 CALL DELAY;子程序DELAY 实现10ms 延时 NOT AL;灯全灭
MOV BX,2;向子程序传递参数,实现20ms 软延时 CALL DELAY JMP AGAIN EXIT: RET MAIN ENDP DELAY PROC NEAR PUSH CX WAIT0: MOV CX,2801 WAIT1: LOOP WAIT1 DEC BX JNZ WAIT0 POP CX 31 RET DELAY ENDP CODE ENDS END START 8.
CODE SEGMENT ASSUME CS:CODE MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AX MOV DX,200H;设I/O端口为200H MOV CL,01H;设置输出初值
AGAIN: MOV AH,1;读键盘缓冲区字符 INT 16H CMP AL,1BH;若为“Esc”键,则退出 JZ EXIT MOV AL,CL OUT DX,AL;输出控制LED MOV BX,50;向子程序传递参数,实现0.5s软延时
CALL DELAY;子程序DELAY实现10ms延时 ROL CL,1;循环左移1位 JMP AGAIN EXIT: RET MAIN ENDP DELAY PROC NEAR PUSH CX WAIT0: MOV CX,2801 WAIT1: LOOP WAIT1 DEC BX JNZ WAIT0 POP CX RET DELAY ENDP CODE ENDS END START 32 第9章习题答案
1.答:
可编程芯片具有灵活的多种工作方式,其工作方式的设置通过软件编程实现。2.答:
8255A的内部结构如图9-1所示,它由数据总线缓冲器,数据端口A、端口B和端口C,A组和B组控制电路和读/写控制逻辑4部分组成。
3.8255A有几种工作方式?简述各种工作方式的特点。(2分)答:
8255A有方式0、方式
1、方式2三种工作方式。8255A方式0是基本输入/输出方式。在方式0下,每一个端口都可作为基本的输入或输出口,端口C的高4位和低4位以及端口A、端口B都可独立地设置为输入口或输出口。方式1是单向选通输入/输出方式。8255A在工作方式1时,把3个数据端口分为A、B两组,分别称为A组控制和B组控制。此时,端口A和端口B仍作为数据的输入或输出口,而端口C作为联络控制信号,被分成两部分,一部分作为端口A和端口B的联络信号,另一部分仍可作为基本的输入/输出口。8255A方式2是双向选通输入/输出方式,只有端口A可以工作于方式2。8255A端口A工作于方式2时,可使8255A与外设进行双向通信,可采用查询方式或中断方式进行传输。4.答:通过JMP AGAIN指令实现循环检测。5.答:
软件定时和硬件定时。软件定时是通过执行一段循环程序来实现的。通过调整循环次数可以控制定时间隔的长短。其特点是:不需要专用硬件电路、成本低,但是耗费CPU的时间,降低了CPU的工作效率。硬件定时是采用定时/计数器或单稳延时电路实现的。其特点是:定时时间长、使用灵活而且不占用CPU的时间,适用范围广。6.答:
由于8253的读/写操作对系统时钟没有特殊的要求,因此它几乎可以应用于任何一种微处理
器系统中,可作为可编程的方波频率发生器、分频器、实时时钟、事件计数器或单脉冲发生器等。每片8253定时/计数器有3个独立的16位计数通道,每个计数通道最高计数速率可达2.6MHz。每个计数器可编程设定6种工作方式,使用时可以根据需要选择其中的一种工作方式。每个计数通道可按二进制或十进制来计数。
7.8253有几种工作方式?简述各种工作方式的特点。(2分)答:
8253的每个计数器都有6种工作方式:方式0~方式5。采用方式0工作方式,8253可完成计数功能,且计数器只计一遍。方式1是硬件触发单稳态方式,采用这种工作方式可在输出端OUT输出单个负脉冲信号,脉冲的宽度可通过编程来设定。采用方式2可产生连续的负脉冲信号,可用作频率发生器。采用方式3可产生连续的方波信号, 可用作方波发生器。方式4是软件触发的选通方式。采用方式4可产生单个负脉冲信号,负脉冲宽度为一个时钟周期,由OUT指令触发。方式5是硬软件触发的选通方式。采用方式5可产生单个负脉冲信号,负脉冲宽度为一个时钟周期。由GATE的上升沿触发。
8.8253初始化编程时需要遵循的原则是什么?(2分)答:
因此8253在初始化编程时,必须遵守两条原则:
① 在对某个计数器设置初值之前,必须先写入控制字;
② 在设置计数初始值时,要符合控制字的规定,即只写低位字节,还是只写高位字节,还是高、低位字节都写(分两次写,先低字节后高字节)。
9.答:
8253初始化编程步骤是:先写控制字到8253的控制端口,再写计数器初值到相应的计数器端口。
10.试按如下要求分别编写初始化程序,已知8253计数器0—2和控制端口地址依次为200H~203H。
1)使计数器1工作在方式0,仅用8位二进制数计数,计数初值为120.2)使计数器0工作在方式1,按BCD码计数,计数值为2011。
3)使计数器2工作在方式2,按二进制数计数,计数值为F050H。(4分)答:
(1)MOV DX,203H MOV AL,50H OUT DX,AL MOV DX,201H MOV AL,120 OUT DX,AL(2)MOV DX,203H MOV AL,33H;00110011B OUT DX,AL MOV DX,200H MOV AX,2011H OUT DX,AL MOV AL,AH OUT DX,AL(3)MOV DX,203H 34
MOV AL,B4H;10110100B OUT DX,AL MOV DX,202H MOV AX,0F050H OUT DX,AL MOV AL,AH OUT DX,AL 11.答:
8253初始化程序段:
MOV AL,36H;方式控制字00110110B=36H OUT 43H,AL;将控制字送入8253A控制端口43H,即控制寄存器中MOV AX,11932;初值送AX寄存器
OUT 40H,AL;将初值的低8位输出计数通道0端口40H MOV AL,AH;初值的高8位送AL寄存器
OUT 40H,AL;将初值的高8位输出计数通道0端口40H 中断服务程序在第十章学完后再做,参考程序如下: 在主程序中数据段定文变量N: N DB 100 M DB 01H 中断服务程序: INT_SER PROC PUSH AX PUSH DX 34 DEC N JNZ RENT MOV N,100 MOV DX,350H XOR M,01H MOV AL,M OUT DX,AL POP DX POP AX RENT: IRET INT_SER ENDP 12.答:参考程序段:
MOV AL,31H;方式控制字00110001B=31H MOV DX,403H OUT DX,AL MOV DX,400H MOV AX,1000H OUT DX,AL MOV AL,AH OUT DX,AL 35
LEA BX, VALUE MOV AL,01H MOV DX,403H OUT DX,AL MOV DX,400H IN AL, DX MOV CL,AL IN AL, DX MOV CH,AL MOV [BX],CX INC BX INC BX CMP CX,0 JNZ LOP1 „„
13.答:参考程序段: „„
MOV AL ,90H MOV DX,203H OUT DX,AL AGAIN:MOV DX,200H IN AL,DX TEST AL,03H;JZ EXIT 35 TEST AL,01H JZ DIAP_1 TEST AL,02H JZ DIAP_2 JMP AGAIN DIAP_2:MOV AL,06H MOV DX,201H OUT DX,AL JMP AGAIN DIAP_1:MOV AL,3FH MOV DX,201H OUT DX,AL JMP AGAIN EXIT: „„
14.什么是同步通信方式?什么是异步通信方式?(2分)答:
根据在串行通信中数据定时和同步的不同,串行通信方式分为同步串行通信和异步串行通信。
同步传送要求对传送的每一位在收发两端保持严格同步,发送端、接收端使用同一时钟源以保证同步。
异步串行通信中的异步是指发送端和接收端不使用共同的时钟,也不在数据中传送同步信号,但接收方与发送方之间必须约定传送数据的帧格式和波特率。15.什么是双工,半双工和单工通信方式?(1分)答:
双工通信方式,两设备之间有两根传输线,对于每一个设备来讲都有专用的一条发送线和一条专用的接收线,实现双向数据传送。
半双工通信方式数据可从设备1发送到设备2,此时设备1是发送方,设备2是接收方;也可以从设备2发送到设备1,此时设备2是发送方,设备1是接收方。但某一设备不能同时接收和发送数据。
单工方式,数据只能向单一方向传送,只能从设备1发送到设备2,设备1是发送方,设备2是接收方。
16.采用异步串行传输方式时,每个字符对应1个起始位、7个信息位、1个奇/偶校验位和1个停止位,如果波特率为1200bps,则每秒能传输的最大字符数是多少?(2分)答:每秒能传输的最大字符数为:1200/(1+7+1+1)=120字符/s 17.利用一个异步串行传输系统传送文字资料,系统的速率为9200bps,待传送的资料为2000字符,设系统不用校验位,停止位只用1位,每个字符用8位,问至少需要多少时间才能传完全部资料?(1分)
答:至少需要时间为:2000*(1+8+1)/9600≈2.1秒 18.答:略。(参照第十二章)19.答:初始化程序: MOV AL,0DAH OUT 0C2H,AL;设置方式选择命令字 MOV AL,37H OUT 0C2H,AL;36 第10章习题答案
1.答:
采用中断传送方式。而采用了中断方式,CPU可以进行其它的工作,只在外设准备好数据发出中断请求之后,才予以响应,暂时中断当前工作转去执行传送数据,传送完成后又返回执行原来的程序,这样就大大地提高了计算机系统的效率。2.什么是中断?什么是中断源?中断源有哪几种类型?(2分)答
计算机在执行正常程序的过程中,系统内发生任何非寻常的或非预期的急需处理事件,处理器就暂时中断正在执行的正常程序,而转去执行相应的事件处理程序。当处理完毕后,CPU再返回到被暂时中断的程序,接着往下继续执行,这个过程称为中断。
产生中断请求的设备或事件称为“中断源”。从中断源来看,中断一般可分为三类: 由计算机硬件异常或故障引起的中断,也称为内部异常中断。由程序中执行了中断指令引起的中断,也称为软中断。
外部设备(如输入输出设备)请求引起的中断,也称为外部中断或I/O中断。
3.答:
中断技术是十分重要而复杂的技术,由计算机的软、硬件共同完成,称之为中断系统。一个完整的中断系统应具备如下功能。(1)设置中断源(2)中断源识别(3)中断源判优(4)中断嵌套
(5)中断处理与返回
4.8086中断分哪两类?8086可处理多少种中断?(2分)答:
Intel 80X86系列微机有一个灵活的中断系统,中断可分为外部中断(或硬件中断)主要是外部设备的请求引起的和内部中断(或软件中断)由指令的执行引起的。可以处理256种中断源,每个中断源都有对应的中断类型码(0~255)供CPU识别。5.8086系统在什么时候、什么条件下可以响应一个外部INTR中断请求?中断向量表位于存储器的什么位置?中断向量表里存放的内容是什么?(4分)答:
当外设通过屏蔽中断请求信号向微处理器提出中断请求时,微处理器在当前指令执行结束后,判断有无中断请求,CPU对可屏蔽中断请求的响应是有条件的,它受中断允许标志位IF的控制。当IF=1时,允许CPU响应INTR请求;当IF=0时,禁止CPU响应INTR请求。
8086系统把中断向量表安排在内存地址00000H~003FFH区域(1K),每四个连续字节存放一个中断向量,其中高地址2个字节单元放段地址(CS),低地址2个字节单元中放偏移地址(IP)。6.可屏蔽中断和非屏蔽中断有什么区别?(2分)答:
当外设通过非屏蔽中断请求信号向微处理器提出中断请求时,微处理器在当前指令执行结束后,就立即无条件的予以响应,这样的中断就是不可屏蔽中断。由NMI引脚出现上升沿触发,高电平维持2个T。不受中断允许标志IF的限制,中断类型号固定为2。由外部设备产生,从CPU的INTR端引入高电平触发。CPU对可屏蔽中断请求的响应是有条件的,它受中断允许标志位IF的控制。当IF=1时,允许CPU响应INTR请求;当IF=0时,禁止CPU响应INTR请求。可屏蔽中断用于CPU与外设进行数据交换。CPU响应时送出两个INTA脉冲,外设则送出中断类型码到CPU。7.答: 37 1)用传送指令直接装入 CLI;IF=0, 关中断 MOV AX, 0;ES指向0段 MOV ES, AX MOV BX, 0AH?4;向量表地址送BX MOV AX, OFFSET INT-P;中断服务子程序的偏移地址送AX MOV ES:WORD PTR[BX], AX;中断服务子程序的偏移地址写入向量表 MOV AX, SEG INT-PA;中断服务子程序的段基址送AX MOV ES:WORD PTR[BX+2],AX;中断服务子程序的段基址写入向量表 STI;IF=1,开中断 …
2)用DOS系统功能调用装入法
CLI;IF=0,关中断
MOV AL, 0AH;中断类型号40H送AL MOV DX, SEG INT-PA;中断服务子程序的段基址送DS MOV DS, DX MOV DX, OFFSET INT-PA;中断服务子程序的偏移地址送DX MOV AH,25H;25H功能调用 INT 21H STI;IF=1,开中断 …
8.答:
CPU在响应中断后,都要保护现场和断点,然后转入相应的中断服务程序。因此,中断操作要解决的一个首要问题就是:找到与中断源相对应的中断服务子程序的入口地址。在8086系统中,是通过采用中断类型号和中断向量的办法来解决这个问题。对于可屏蔽中断,在中断响应周期的第二个总线周期中,由中断控制器给出中断服务子程序的入口地址(即将中断处理程序所在段的段地址及第一条指令的有效地址),装入CS与IP两个寄存器。一旦装入完毕,中断服务程序就开始执行。
9.中断服务程序的入口处为什么常常要使用开中断STI指令?(1分)答:
CPU响应中断后,发出中断响应信号的同时将状态标志寄存器FR的内容压入堆栈保护起来,然后将FR中的中断标志位IF与陷阱标志位TF清零,从而自动关闭外部硬件中断,以避免在中断过程中或进入中断服务程序后受到其他中断源的干扰。只有中断处理程序中出现开中断指令STI时,才一允许CPU接收其他设备的中断请求。10.答:
Intel 8259A的主要功能有:
可管理具有8级优先权的中断源,通过级联可扩充至管理64级优先权的中断源。通过编程对每一级中断源都可实现屏蔽或允许。
在中断响应周期,8259A能向 CPU提供相应的中断向量,从而能迅速地转至中断服务程序。11.8259A支持哪两种中断触发方式?(1分)答:有边沿触发和电平触发两种触发方式。
12.单片8259A能够管理多少级可屏蔽中断?若用8片级联,能管理多少级可屏蔽中断?(2分)答:单片8259A能管理8级可屏蔽中断,8片级联可管理64级可屏蔽中断。13.答:初始化编程,在中断系统进入正常运行之前,通过设置初始化命令字Initialization 38 Command Word(ICW)来预置工作方式,初始化命令字有4个(ICWl~ICW4)14.答:
8259A的编程包含两个部分,第一部分为初始化编程,在中断系统进入正常运行之前,通过设置初始化命令字Initialization Command Word(ICW)来预置工作方式,初始化命令字有4个(ICWl~ICW4)。第二部分为工作方式编程Operation Command Word(OCW),通过对8259A写操作命令字(OCW1~OCW3),来实现8259A运行中的操作控制,OCW可以在8259A被初始化之后的任何时候被使用。
15.答:中断向量表的入口地址为: 20H *4=0080H 中断向量表的内容为:以物理地址为4FE20H的段、偏移地址组合,其中低二位字节为偏移地址、高二位字节为段地址。
16.答:
MOV AL,00010011B OUT 80H,AL MOV AL,00100000B OUT 81H,AL MOV AL,00000011B OUT 81H,AL 39 第11章习题答案
1.答:DAC0832 的工作方式(1)直通方式(2)单缓冲方式(3)双缓冲方式 2.答:
DAC0832 是CMOS 工艺制成的8 位双缓冲型D/A 转换器,其逻辑电平与TTL 电平相
兼容。内部阶梯电阻网络形成参考电流,由输入二进制数控制8 个电流开关,CMOS 的电 流开关漏电很小保证了转换器的精度。DAC0832 使用单一电源,功耗低,建立时间为1s。输入数据为8 位并行输入,有两级数据缓冲器及使能信号、数据锁存信号等,与CPU 接口 方便。3.答:
D/A 转换器在微机控制系统中作用:将计算机处理后的数字量结果转换成模拟量,然后 控制执行部件;和A/D 转换器在微机控制系统中作用:将工业设备的模拟量转换成数字量 便于计算机计算和处理。4.答:
模拟量是连续的信号,采样可以将时间上连续变化的信号,转换为时间上离散的信号,即将时间上连续变化的模拟量转换为一系列等间隔的脉冲,脉冲的幅度取决于输入模拟量的 大小。
5.答:分辨率;转换精度;建立时间;线性度;温度系数;输入代码;输出电平6.答:量程;分辨率;量化误差;转换误差;转换精度;转换时间 7.答:
MOV DX, 24C0H AGANT: MOV AL, 128;方波高电平
OUT DX, AL;转换数据送D/A 的数据口
CALL DELAY;调用延时子程序段,也可用几条NOP 指令 MOV AL, 0;方波低电平
OUT DX, AL;转换数据送D/A 的数据口 CALL DELAY JMP AGANT DELAY PROC;软件延时子程序 MOV CX,10 DELAY1:LOOP DELAY1 RET DELAY ENDP
t V 2.5V 40 8.答:
L1:MOV CX, 256;256 个数字量 MOV AL, 0;初值
MOV DX, 24C0H;24C0H 为0832 的端口地址 L2: OUT DX, AL;三角波形上升段 CALL DELAY;调用延时子程序 INC AL LOOP L2 MOV CX, 256 MOV AL, 255;初值 MOV DX, 400H L3: OUT DX, AL;三角波形下降段 CALL DELAY DEC AL LOOP L3 JMP L1 t V 5V-5V 9.答:
DATA SEGMENT BUF DB 20 DUP(?);预留20 字节空间,存放采样后结果DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,10010001B;8255A 初始化 MOV DX,206H OUT DX,AL MOV AL,00H MOV DX,204H OUT DX,AL;START、ALE=0 41 MOV BX,OFFSET BUF;BUF是数据区首地址
MOV CX,20;CX中是采样次数 MOV AL,05H MOV DX,202H OUT DX,AL;通过PB2~PB0选中采样通道IN5 AGAIN: MOV AL,0FH MOV DX,206H OUT DX,AL;通过PC7使ALE=1 MOV AL,0DH MOV DX,206H OUT DX,AL;通过PC6使START=1 MOV AL,00H MOV DX,204H;START、ALE=0 WAIT0: IN AL,DX;循环检测PC口的PC0(即EOC信号)AND AL,01H JNZ WAIT0;若EOC为低,则开始转换
WAIT1: IN AL,DX;继续循环检测PC口的PC0(即EOC信号)AND AL,01H JZ WAIT1;若EOC为高,则转换结束,可以读数据 MOV DX,200H IN AL,DX;从PA口输入数据 MOV [BX],AL;存入内存 INC BX LOOP AGAIN;循环20次采样 RET CODE ENDS END START 第12章习题答案
略。
第二篇:微机原理与接口技术习题答案10章
第10章 定时/计数器8253应用设计
1.试分析 8255A方式0、方式1和方式2的主要区别,并分别说明它们适合于什么应用场合。
答:方式0是基本的输入/输出,端口A、B、C都可以作为输入输出端口。适用于CPU与非智能I/O设备的数据传输;
方式1是有联络信号的输入/输出,端口A、B都可以设定成该方式,此时三个端口的信号线分成了A、B两组,PC7~PC4用作A组的联络信号,PC3~PC0用作B组的联络信号。适用于高速CPU与低速I/O设备的数据传输;
方式2是双向传输,只有A组端口可以设定成该方式,PC6~PC7用作输出的联络信号,PC4~PC5用作输入的联络信号,PC3用作中断请求信号。适用于双机之间数据的并行传送。
2.8255A的A组设置成方式1输入,与CPU之间采用中断方式联络,则产生中断请求信号INTRA的条件是 STBA=
,IBFA=
,INTEA=。
3.如果8255A的端口地址为300H~303H,A组和B组均为方式0,端口A为输出,端口B为输入,PC3~PC0为输入,PC7~PC4为输出,写出8255A的初始化程序段;编程实现将从端口C低4位读入的值从高4位送出。解: MOV DX,303H
MOV AL,10000011B OUT DX,AL MOV DX,302H IN AL,DX MOV CL,4 SHL AL,CL OUT DX,AL 4.在实际应用中经常需要检测设备的状态,并进行指示。在8086最小方式系统下,有一片8255A,其分配的端口地址为8F00H~8F07H中的奇地址,外部设备产生的状态有16个(K15~K0),要求采用4个发光二极管来指示开关量中“1”的个数。(1)画出8255A - 0 - 的连接图;(2)编写程序段实现连续检测并显示。解:(1)
8086D8~D158255D0~D7RDRDWRA2A1M/IOBHEA15A11A10A9A8A0A14A13A12A7A6A5A4A3PA0PA1......WRA1PA716位开关量(K15~K0)A0PB0PB1PB7......VCCCSPC3PC2PC1PC0
(2)MOV DX,8F07H
MOV AL,10010010B;端口A、B方式0输入,端口C方式0输出 OUT DX,AL NEXT:
L2:
MOV DX,8F03H;从端口B读取高8位开关量 IN AL,DX XCHG AL,AH MOV DX,8F01H;从端口A读取低8位开关量 IN AL,DX MOV BX,AX XOR AL,AL MOV CX,16 CLC SHL BX,1
- 1 -
L1:
JNC L1 INC AL LOOP L2 MOV DX,8F05H;从端口C送出 OUT DX,AL JMP NEXT;进行下一次检测
5.利用IBM PC系统机的总线槽,开发由一片8255A构成的子系统,8255A端口地址为260H~263H,编程实现产生如图10.20所示的8个信号(各个信号的节拍不必严格相等)。
Y0Y1Y7„
图10.20 要求产生的信号波形
解:8355A与IBM PC机总线的连接框图如下:
可将8255A的端口A作为要产生的信号的输出端口,设定为方式0输出,端口B和端口C不做使用,均设定为方式0输出。程序段如下:
MOV
DX,263H
;设定8255A的工作方式
- 2 -
MOV
AL,10000000B
OUT
DX,AL
MOV
DX,260H
;产生指定信号
XOR
AL,AL
OUT
DX,AL REP:
MOV
AL,80H
MOV
CX,7 REP1:
OUT
DX,AL
SAR
AL,1
LOOP REP1
MOV
CX,8 REP2:
SHL
AL,1
OUT
DX,AL
LOOP REP2
JMP
REP
6.在实际应用中,经常会遇到要求输入多个数据量,这时需要用到多路开关,如图10.21表示八选一的逻辑框图及其真值表。现有8组16位开关量数据(无符号数),要求通过一片8255A(端口地址为260H~263H)分时输入到CPU(8088最小方式系统)中,并找出它们中的最大值,并通过4个发光二极管指示其序号(灯亮表示“1”)。画出8255A的连接图,并编程实现。
解:由于开关量是16为数据,故可以将8255A的PA端与PB端设定为方式0,分别读取开关量的低八位和高八位,以PC低三位端口的控制八选一电路的输出依次从X0到X7,- 3 -
八选一x0x1x2x3x4x5x6x7ys0s1s2s2s1s00 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1yx0x1x2x3x4x5x6x7图10.21 八选一逻辑电路使用PC端口的高八位输出最大开关量的序号(该序号为1~8),控制发光二极管的亮灭以码指示序号。连接图如下:
程序段如下:
MOV DX,263H
MOV AL,10011010B;设定工作方式,PA,PB均工作于方式0,PA、PB为输入,PC为输出
OUT
DX,AL
MOV
CX,8
XOR
BX,BX
MOV
SI,0
;SI表示输入开关量的序号 ST1:
MOV
DX,262H
OUT
DX,SI
MOV
DX,260H
;将开关量数据的低八位写入AL
IN
AL,DX
MOV
DX,261H
;将开关量数据的高八位写入AH
IN
AH,DX
- 4 -
CMP
BX,AX
JA
NEXT
MOV
BX,AX
;将当前最大值保存在BX中
INC
SI
PUSH
SI
;将当前最大值的序号压栈 NEXT:
INC
SI
LOOP
ST1
POP
SI
XOR
AX,AX
MOV
AX,SI
MOV
CL,4
ROL
AL,CL
MOV
DX,262H
OUT
DX,AL
;最大值的序号出栈
;将最大值的序号(4位)移至AL的高四位 的高四位输出最大值序号 - 5 -
;PC
第三篇:微机原理与接口技术习题答案2
第2章 8086 CPU结构与功能
1.微处理器内部结构由哪几部分组成?阐述各部分的主要功能。解:微处理器内部结构由四部分组成:
(1)算术逻辑运算单元ALU:完成所有的运算操作;
(2)工作寄存器:暂存寻址信息和计算过程中的中间结果;
(3)控制器:完成指令的读入、寄存和译码,并产生控制信号序列使ALU完成指定操作;
(4)I/O控制逻辑:处理I/O操作。
2.微处理器级总线有哪几类?各类总线有什么作用? 解:微处理器级总线有三类:
(1)数据总线:传送信息;
(2)地址总线:传送地址码;
(3)控制总线 传送控制信号。
3.为什么地址总线是单向的,而数据总线是双向的?
解:地址码只能由CPU生成。而数据需要在CPU和存储器之间传输。4.8086/8088微处理器内部有哪些寄存器?其主要作用是什么?
解:8086CPU内部有14个16位寄存器,其中8个通用寄存器(4数据寄存器AX、BX、CX、DX,4地址指针/变址寄存器SI、DI、SP、BP),4个段寄存器(CS、DS、ES、SS),2个控制寄存器(指令指针IP,微处理器状态字PSW)。
应该注意的是:可以在指令中用作为地址指针的寄存器有:SI、DI、BP和BX;在微处理器状态字PSW中,一共设定了9个标志位,其中6个标志位用于反映ALU前一次操作的结果状态(CF,PF,AF,ZF,SF,OF),另3个标志位用于控制CPU操作(DF,IF,TF)。
5.如果某微处理器有20条地址总线和16条数据总线:
(1)假定存储器地址空间与I/O地址空间是分开的,则存储器地址空间有多大?
(2)数据总线上传送的有符号整数的范围有多大? 解:(1)存储器地址空间为:2201MB
1(2)有符号数范围为: 2~21,即 -32768~32767 6.将十六进制数62A0H与下列各数相加,求出其结果及标志位CF、AF、SF、ZF、OF
15和PF的值:
(1)
1234H;(2)
4321H;(3)
CFA0H;(4)
9D60H 解:(1)
74D4H
CF=0 AF=0 SF=0 ZF=0 OF=0 PF=1
(2)
A5C1H CF=0 AF=0 SF=1 ZF=0 OF=1 PF=0
(3)
3240H
CF=1 AF=0 SF=0 ZF=0 OF=0 PF=0
(4)
0000H
CF=1 AF=0 SF=0 ZF=1 OF=0 PF=1 7.从下列各数中减去4AE0H,求出其结果及标志位CF、AF、SF、ZF、OF和PF的值:
(1)1234H;(2)5D90H;(3)9090H;(4)EA04H 解:(1)
C754H
CF=1 AF=0 SF=1 ZF=0 OF=0 PF=0(2)
12B0H
CF=0 AF=0 SF=0 ZF=0 OF=0 PF=0(3)
45B0H
CF=0 AF=0 SF=0 ZF=0 OF=1 PF=0
(4)
9F24H
CF=0 AF=0 SF=1 ZF=0 OF=0 PF=1 9.写出下列存储器地址的段地址、偏移地址和物理地址:(1)2134:10A0;(2)1FA0:0A1F;(3)267A:B876 解:物理地址=段地址*10H+偏移地址
(1)段地址:2134H,偏移地址:10A0H,物理地址:223E0H(2)段地址:1FA0H,偏移地址:0A1FH,物理地址:2041FH(3)段地址:267AH,偏移地址:B876H,物理地址:32016H 10.给定一个数据的有效地址为2359H,并且(DS)=490BH,求该数据的物理地址。解:物理地址=段地址*10H+偏移地址
物理地址=490BH +2359H = 4B409H 11.如果在一个程序段开始执行之前,(CS)=0A7F0H,(IP)=2B40H,求该程序段的第一个字的物理地址。
解:物理地址=段地址*10H+偏移地址
物理地址=CS*10H+IP = AAA40H 12.IBM PC有哪些寄存器可用来指示存储器的地址? 解:变址寄存器SI,DI,堆栈指针SP,BP,另外还有BX。
第四篇:微机原理与接口技术习题答案4
第4章 汇编语言程序设计
1.已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。解:BUF
BUFR
MOV CX, N LEA SI, BUF LEA DI, BUFR ADD DI,CX DEC DI L1: MOV AL,[SI] MOV [DI],AL INC SI DEC DI LOOP L1
2.利用移位、传送和相加指令实现AX的内容扩大10倍。
解:将扩大后的结果放在DX:AX中,注意到10×AX=8×AX+2×AX。XOR SHL RCL DX,DX AX, 1 DX, 1 DB “BONJOUR_BELLE” DB 100 DUP(?)MOV BX,AX MOV SHL RCL SHL RCL CX,DX AX, 1 DX, 1 AX, 1 DX, 1 ADD ADC AX, BX DX, CX 3.在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,则再编写程序实现将其按递减关系排列。解:VAR DW 1236,-432,3900 XOR SI,SI MOV AX,VAR[SI] CMP AX, VAR[SI+2] JAE L1 XCHG AX, VAR[SI+2] L1:
CMP AX, VAR[SI+4] JAE L2 XCHG AX, VAR[SI+4] L2: MOV VAR[SI], AX MOV AX,VAR[SI+2] CMP AX, VAR[SI+4] JAE L3 XCHG AX, VAR[SI+4] L3:
MOV VAR[SI+2], AX 4.编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=10110110 10011001B。解:利用移位指令完成。
L1: SHR AL,1 RCR DX,1 XOR DX,DX MOV CX,8
SHR BL,1 RCR DX,1 LOOP L1 5.在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:
(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;
(2)当两数均为奇数时,两个变量的内容不变;(3)当两数均为偶数时,两数缩小一倍后存入原处。
解:当VAR1为奇数时,不论VAR2的奇偶性,这两个单元的内容均不变;只有当VAR1为偶数时,如果VAR2为奇数,则VAR1与VAR2内容交换;如果VAR2为偶数,则两数缩小一倍后存入原处。DATA SEGMENT
VAR1
DB 28
VAR2 DB 36 DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA START: MOV AX, DATA MOV DS,AX MOV ES, AX MOV AL,VAR1 MOV BL,VAR2 TEST AL,1 JZ EVEN1 JMP OVER
EVEN1:
TEST BL,1
JZ
EVEN2
MOV VAR1,BL MOV JMP VAR2,AL OVER EVEN2:
SHR MOV SHR MOV AL,1 VAR1,AL BL,1 VAR2,BL
OVER:
MOV AH,4CH MOV AL,0 INT ENDS END START 21H CODE
6.已知在字变量VAR1、VAR2和VAR3中保存有3个相同的代码,但有一个错码,编写程序段找出这个错码,并将它送到AX,其地址送SI;如果3个代码都相同,则在AX中置-1标志。解:在数据段中定义:
VAR1 DW 5A34H VAR2 DW 5A35H VAR3 DW 3A34H
在代码段中编写程序段:
MOV AX,-1 MOV BX,VAR1 CMP BX,VAR2 JZ
L2 CMP BX,VAR3 JZ
L1 MOV AX,BX LEA SI,VAR1 JMP OVER L1: MOV AX,VAR2 LEA SI,VAR2 JMP OVER L2: CMP BX,VAR3 JZ
OVER MOV AX,VAR3 LEA SI,VAR3 OVER: 7.分析下列程序段的功能:
MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 解:程序段完成DX:AX组成的32位无符号数左移4位,低位补零(也即除以16)。8.下列程序段执行后,求BX寄存器的内容:
MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL 解:实际上完成BX内容循环右移2位,因此,BX寄存器的内容为C02DH。9.下列程序段执行后,求BX寄存器的内容:
MOV CL,5 MOV BX,7D5CH SHR BX,CL 解:完成BX内容逻辑右移5位,因此,BX寄存器的内容为03EAH。10.将BUFFERS中N个字按相反顺序传递到BUFFERT中。解:
LEA SI,BUFFERS LEA DI,BUFFERT MOV CX,N ADD DI,N ADD DI,N SUB DI,2 L1: MOV AX,[SI] MOV [DI],AX ADD SI,2 SUB DI,2 LOOP L1 11.数组ARRAY中存放有一组字型数据,前两个字节存放数据长度(5的倍数)。为给这个数组中的数据进行加密保护,每5个数据取出一个数据进行加密处理:奇数位进行取反,偶数位不变,例如对数据0110 1100 1011 0001B加密后变成1100 0110 0001 1011B,编写加密程序encrpytion 和解密程序 unencrpytion。
解:约定从第一个数据开始,每5个数据为一组,每组中的第一个数据采取加密/解密处理。由于加密算法采用的是取反操作,解密算法也采用取反操作,因此解密和解密算法是同一个程序。
ENCRPYTION PROC NEAR LEA SI,ARRAY
XOR DX,DX
MOV AX,[SI]
MOV BX,5
DIV BX
MOV CX, AX
ADD SI, 2 L1:
MOV AX, [SI]
XOR AX,0AAAAH
MOV [SI], AX
ADD SI,10
LOOP L1
RET ENCRPYTION ENDP
13.设BUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值(存入AX)和最大值(存入DX)。
解:BUF存放有N个无符号数的程序如下: MOV CX,N-1 LEA SI,BUF MOV AX,[SI] MOV DX,AX ADD SI,2 L1: CMP AX,[SI] JBE NOCHG1 XCHG AX,[SI] NOCHG1: CMP DX,[SI] JAE NOCHG2 XCHG DX,[SI] NOCHG2: ADD SI,2 LOOP L1 如果BUF中存放的是有符号数,则只需要将程序中的两行内容修改:
JBE NOCHG1 JAE NOCHG2
改成:JLE NOCHG1 改成:JGE NOCHG2
14.设BUFFER中存放有N个无符号(第1个字节存放缓冲区的长度),编程实现将其中的0元素抹去,并更新其长度。
解:设BUFFER中存放的是字节型数据。采用双指针方法:SI为读指针,DI为写指针,从低地址开始,内存中读出一个字节,如果不为0,则写入内存;如果为0,则不进行写操作。
LEA SI, BUFFER XOR CX,CX MOV CL, [SI] INC SI MOV DI, SI XOR BH,BH XOR AL,AL L1: CMP [SI],AL JZ L2 MOV BL,[SI] MOV [DI],BL INC DI INC BH L2: INC SI LOOP L1 MOV BUFFER,BH 16.编写一个子程序实现统计AL中1的个数,然后检测出字节型缓冲区BUF中0和1个数相等的元素个数。
解:统计AL中1的个数,只需将AL右移,移出的一位内容进行累加,子程序为: COUNTBYTE PROC NEAR
PUSH AX
PUSH CX
MOV CX,8
XOR BL,BL COU1:
SHR AL,1
ADC BL,0
LOOP COU1
POP CX
POP AX
RET COUNTBYTE ENDP 在此基础上,可以检测出字节型缓冲区BUF中0和1个数相等的元素个数,即一个字节中有4个1。设BUF中有N个字节型数据,结果保持在BH中。
MOV CX,N LEA SI, BUF XOR BH,BH L1: MOV AL,[SI] CALL COUNTBYTE CMP BL,4 JNZ L2 INC BH L2: INC SI LOOP L1
19.在缓冲区BUFFER中,第1个字节存放数组的长度(<256),从第2个字节开始存放字符的ASCII码,编写子程序完成在最高位给字符加上偶校验。解:STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)
TOP LABEL BYTE STACK ENDS
DATA SEGMENT BUFFER DB 3
DB 'ABC'
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DI,BUFFER
XOR CX,CX
MOV CL,[DI]
INC DI
CALL SETEVEN
MOV AH,4CH
MOV AL,0
INT 21H SETEVEN
PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DI SETEVEN1:
MOV AL,[DI]
CALL COUNTBYTE
;加偶校验子程序
;返回DOS;首字节为字符串长度;字符串
AND BL,01H
JZ SETEVEN2
OR AL,80H
MOV [DI],AL SETEVEN2:
INC DI
LOOP SETEVEN1
POP DI
POP CX
POP BX
POP AX
RET SETEVEN
ENDP COUNTBYTE PROC NEAR
PUSH AX
PUSH CX
MOV CX,8
XOR BL,BL COU1:
SHR AL,1
ADC BL,0
LOOP COU1
POP CX
POP AX
RET COUNTBYTE ENDP CODE ENDS
END START 20.编写程序完成求多位数(N个字)的绝对值。21.已知斐波那契数列的定义为:F1数列前n项的子程序。
1,F21,FiFi1Fi2(i3),编写求该解:设奖斐波那契数列存放在字变量RESULT中。在数据段中定义
RESULT DW 100H DUP(?)
在代码段中编写子程序 FIBONACCI PROC NEAR
XOR DI,DI
MOV RESULT[DI],1
;前两个数为1
MOV RESULT[DI+2],1
ADD DI,4
MOV CX,N L1:
MOV AX, RESULT[DI-4]
ADD AX, RESULT[DI-2]
MOV RESULT[DI],AX
ADD DI,2
LOOP L1
RET FIBONACCI ENDP
22.编写程序实现循环显示10条信息,保存每条信息的变量分别为INFOM1~INFORM10。解:在数据段中定义变量:
TABLE DW INFORM1, INFORM2, INFORM3, INFORM4, INFORM5
DW INFORM6, INFORM7, INFORM8, INFORM9, INFORM10 在代码段中编写程序段:
MOV XOR MOV MOV CX,10 SI,SI DX,TABLE[SI] AH,9 L1:
INT ADD CALL LOOP 21H SI,2 WAIT L1 这里,WAIT为延时子程序,用于在显示信息之间的停顿。
23.编写程序实现将包含20个数据的数组ARRAY分成两个数组:正数数组ARRAYP和负数数组ARRAYN,并分别将这两个数组中数据的个数显示出来。
解:先编写一个子程序DISPALD,完成以3位十进制数形式显示出AL的内容。
DISPALD PROC NEAR PUSH AX PUSH CX PUSH DX XOR AH,AH MOV CL,100 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV AL,AH XOR AH,AH MOV CL,10 DIV CL PUSH AX MOV DL,30H ADD DL,AL MOV AH,2 INT 21H POP AX MOV DL,30H ADD DL,AH MOV AH,2 INT 21H POP DX POP CX POP AX RET DISPALD ENDP
在此基础上,根据题目要求,需要用到3个指针:SI指向源数组ARRAY,DI指向正数数组ARRAYP,BX指向负数数组ARRAYN。
MOV XOR LEA LEA LEA MOV AND JS MOV INC INC JMP MOV INC INC INC CX,20 DX,DX SI,ARRAY DI,ARRAYP BX,ARRAYN AL,[SI] AL,AL L2 [DI],AL DI DL L3 [BX],AL BX DH SI L1:
L2:
L3:
LOOP MOV CALL MOV CALL L1 AL,DL DISPALD AL,DH DISPALD 24.编写程序实现求缓冲区BUFFER的100个字中的最小偶数(存入AX)。解:设BUFFER中存放的是有符号数。
L1:
L2: MOV CX,100 LEA SI,BUFFER MOV AX, 7FFFH AND WORD PTR [SI],1 JNZ L2 CMP [SI],AX JGE L2 MOV AX,[SI] ADD SI,2 LOOP L1
225.编写程序实现求级数1解:BL用于存放项数。
22n2的前n项和刚大于2000的项数n。
STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)TOP LABEL WORD STACK ENDS DATA SEGMENT
DB 100H DUP(?)DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
MOV BL,1
MOV CX,0 COUNT:
MOV AL, BL
MUL BL
ADD CX,AX
CMP CX,2000
JA EXIT
INC BL
JMP COUNT EXIT:
26.定义一条宏指令,实现将指定数据段的段地址传送到段寄存器ES或DS的功能。解:
27.定义一条宏指令,实现从键盘中输入一个字符串(利用INT 21H的09号功能)。28.定义一条宏指令,实现在屏幕上输出回车、换行。29.利用其它指令完成与下列指令一样的功能:
(1)REP MOVSB;
(3)REP STOSB;
解:设DF=0(1)
L1: MOV AL,[SI]
MOV ES:[DI],AL INC INC SI DI
(2)REP LODSB;(4)REP SCASB。
LOOP L1(2)
L1: MOV AL,[SI] INC SI LOOP L1(3)
L1: MOV ES:[DI],AL
INC DI LOOP L1(4)
L1: MOV AL,[SI]
CMP AL,ES:[DI] INC INC SI DI LOOP L1 30.设在数据段中定义了:
STR1 DB ‘ASSEMBLE LANGUAGE’ STR2 DB 20 DUP(?)利用字符串指令编写程序段实现:
(1)从左到右将STR1中的字符串传送到STR2;(2)从右到左将STR1中的字符串传送到STR2;(3)将STR1中的第6个和第7个字节装入DX;
(4)扫描STR1字符串中有无空格,如有则将第一个空格符的地址传送到SI。解: STR1中有17个字符(含一个空格),设DS和ES均指向STR1和STR2所在的段。(1)
CLD MOV LEA LEA REP MOV LEA LEA CX,17 SI,STR1 DI,STR2 MOVSB CX,17 SI,STR1 DI,STR2(2)
ADD DEC MOV MOV DEC INC LOOP LEA MOV MOV LEA MOV CMP JZ INC LOOP SI,CX SI AL,[SI] [DI],AL SI DI L1 SI,STR1 DX,[SI+6] CX,17 SI,STR1 AL,20H [SI], AL L2 SI L1 L1:
(3)
(4)
L1:
L2:
31.设在数据段中定义了:
STRING DB ‘Today is Sunday & July 16, 2000’
编写程序实现将STRING中的’&’用’/’代替。解:STRING中保存了30个字符。
MOV LEA MOV CMP JNZ MOV INC LOOP CX,30 SI,STRING AL,’&’ [SI],AL L2 BYTE PTR [SI],’/’ SI L1 L1:
L2:
32.分析下列程序段完成的功能:
MOV CX,100 LEA SI,FIRST LEA DI,SECOND REP MOVSB 解:将缓冲区FIRST中100个字节传送到SECOND中。33.分析下列程序段:
LEA DI,STRING MOV CX,200 CLD MOV AL,20H REPZ SCASB JNZ FOUND JMP NOT_FOUND 问:转移到FOUND的条件。
解:在缓冲区STRING中搜索非空格字符,如果有非空格则转到FOUND,如果200个单元中都是空格,则转到NOT_FOUND。
34.设在数据段的变量OLDS和NEWS中保存有5个字节的字符串,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行程序。解:设DS和ES均指向字符串OLDS和NEWS所在的段。CLD MOV
35.编程实现将STRING字符串中的小写字母变换成大写字母。解:设STRING中的字符个数为N。
LEA LEA REPZ JNZ CX,5 SI,OLDS DI,NEWS CMPSB NEW_LESS
MOV LEA MOV AND INC CX,N SI,STRING AL,5FH [SI],AL SI L1:
LOOP L1 36.设在数据段中定义了:
STUDENT_NAME DB 30 DUP(?)STUDENT_ADDR DB 9 DUP(?)STUDENT_PRINT DB 50 DUP(?)编写程序实现:
用空格符清除缓冲区STUDENT_PRINT; 在STUDENT_ADDR中查找第一个’_’字符; 在STUDENT_ADDR中查找最后一个’_’字符;
如果STUDENT_NAME中全为空格符,则STUDENT_PRINT全存入’*’;
将STUDENT_NAME传送到STUDENT_PRINT的前30个字节中,将STUDENT_ADDR传送到STUDENT_PRINT的后9个字节中。
37.(上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:
数据1 <原序号> 数据2 <原序号> „„
38.(上机题)按同余法产生一组随机数N(1 Total <总人数> A: <人数1> B: <人数2> C: <人数3> D: <人数4> E: <人数5> F: <人数6> 39.(上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择: (1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: <原字符串>例如:abcdgyt0092 <新字符串> ABCDGYT0092 按任一键重做;按Esc键返回主菜单。 (2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字 0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示: <原字符串> The maximum is <最大值>. 按任一键重做;按Esc键返回主菜单。 (3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示: <原数值串> <新数值串> 按任一键重做;按Esc键返回主菜单。 (4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器 HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时 间:HH:MM:SS。 按任一键重新对时;按Esc键返回主菜单。 (5)按数字键“5”,结束程序的运行,返回操作系统。解: ※主程序的编程思路: 此程序共5个功能,可采用跳转表法来实现多路分支结构程序设计。现将这5个程序段,各程序段的首地址分别标号为G1,G2,G3,G4,G5。将5个程序段的入口地址做成表TABLE放入数据段,程序根据给定的参数计算出欲转入的程序段的首地址在TABLE中的位置后,取出该地址,跳转至该程序段。 首先,通过调用子程序MENU,设置显示器,并输出提示文档。接着,读取‘1’-‘5’之间的ASCII表示数。然后,通过跳转表TABLE实现由输入参数转入相应的程序段。由于表中按“字”存放数据,则每个数据的位移量是:0、2、4、6、8。对于输入参数N,计算位移量的公式是N=(N-1)*2。 当输入‘1’时,跳转到标号G1。调用子程序CHGLTR,完成将输入字符串中的小写字母变换成大写字母。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G1; 当输入‘2’时,跳转到标号G2。调用子程序MAXLTR,完成在输入字符串中找最大值。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G2; 当输入‘3’时,跳转到标号G3。调用子程序SORTNUM,完成输入数据组的排序。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G3。 当输入‘4’时,跳转到标号G4。调用子程序TIMCHK,完成时间的显示。用户按键,若为ESC,则转到主程序段首调用MENU,否则,转到标号G4。 当输入‘5’时,跳转到标号G5。结束程序的运行,返回操作系统。其流程框图见图3-1。 第1章 1.1 微处理器、微型计算机和微型计算机系统三者之间有什么不同? 解: 把CPU(运算器和控制器)用大规模集成电路技术做在一个芯片上,即为微 处理器。微处理器加上一定数量的存储器和外部设备(或外部设备的接口)构成了 微型计算机。微型计算机与管理、维护计算机硬件以及支持应用的软件相结合就形 成了微型计算机系统。 1.2 CPU在内部结构上由哪几部分组成?CPU应该具备哪些主要功能? 解: CPU主要由起运算器作用的算术逻辑单元、起控制器作用的指令寄存器、指 令译码器、可编程逻辑阵列和标志寄存器等一些寄存器组成。其主要功能是进行算 术和逻辑运算以及控制计算机按照程序的规定自动运行。 1.3微型计算机采用总线结构有什么优点? 解: 采用总线结构,扩大了数据传送的灵活性、减少了连线。而且总线可以标准 化,易于兼容和工业化生产。 1.4数据总线和地址总线在结构上有什么不同之处?如果一个系统的数据和地址合用 一套总线或者合用部分总线,那么要靠什么来区分地址和数据? 解: 数据总线是双向的(数据既可以读也可以写),而地址总线是单向的。 8086CPU为了减少芯片的引脚数量,采用数据与地址线复用,既作数据总线也作为 地址总线。它们主要靠信号的时序来区分。通常在读写数据时,总是先输出地址 (指定要读或写数据的单元),过一段时间再读或写数据。 1.8在给定的模型中,写出用累加器的办法实现15×15的程序。 DEC H JP NZ,LOOP HALT 第 2章 作业 答案 2.1 IA-32结构微处理器直至Pentillm4,有哪几种? 解:80386、30486、Pentium、Pentium Pro、PeruiumII、PentiumIII、Pentium4。 2.6IA-32结构微处理器有哪几种操作模式? 解: IA一32结构支持3种操作模式:保护模式、实地址模式和系统管理模式。操 作模式确定哪些指令和结构特性是可以访问的。 2.8IA-32结构微处理器的地址空间如何形成? 解: 由段寄存器确定的段基地址与各种寻址方式确定的有效地址相加形成了线性地 址。若末启用分页机制,线性地址即为物理地址;若启用分页机制,则它把线性地 址转为物理地址。 2.15 8086微处理器的总线接口部件由哪几部分组成? 解: 8086微处理器中的总线接口单元(BIU)负责CPU与存储器之间的信息传 送。具体地说,BIU既负责从内存的指定部分取出指令,送至指令队列中排队 (8086的指令队列有6个字节,而8088的指令队列只有4个字节);也负责传送执 行指令时所需的操作数。执行单元(EU)负责执行指令规定的操作。 2.16段寄存器CS=120OH,指令指针寄存器IP=FFOOH,此时,指令的物理地址为 多少? 解: 指令的物理地址=12000H+FFOOH=21FOOH 第3章 作 业答案 3.1分别指出下列指令中的源操作数和目的操作数的寻址方式。 (1)MOV SI, 30O (2)MOV CX, DATA[DI] (3)ADD AX, [BX][SI] (4)AND AX, CX (5)MOV[BP], AX (6)PUSHF 解: (l)源操作数为立即寻址,目的操作数为寄存器寻址。 (2)源操作数为变址寄存器加位移量寻址,目的操作数为寄存器寻址。 (3)源操作数为基址加变址寻址,目的操作数为寄存器寻址。 (4)源操作数和目的操作数都为寄存器寻址。 (5)源操作数为寄存器寻址,目的操作数为寄存器间接寻址。 (6)为堆栈操作。 3.2试述指令MOVAX,2000H和MOV AX,DSz[2000H]的区别。 解:前一条指令是立即寻址,即把立即数2000H传送至寄存器AX。后一条指令 是直接寻址,是把数据(DS)段中的地址为200OH单元的内容传送至寄存器AX。 3.3写出以下指令中内存操作数的所在地址。 (1)MOV AL, [BX+10] (2)MOV [BP+10], AX (3)INC BYTEPTR[SI十5] (4)MOV DL, ES:[BX+SI] (5)MOV BX,[BP+DI+2] 解: (1)数据段BX+10单元。 (2)堆栈段BP+10单元。 (3)数据段SI+5字节单元。 (4)附加段(ES段)BX+SI单元。 (5)堆栈段BP+DI+2单元。 3.4判断下列指令书写是否正确。 (1)MOV AL, BX (2)MOV AL, CL (3)INC [BX] (4)MOV 5, AL (5)MOV [BX],[SI] (6)M0V BL, OF5H (7)MOV DX, 2000H (8)POP CS (9)PUSH CS 解: (l)不正确,AL与BX数据宽度不同。 (2)正确。 (3)不正确,因为不明确是增量字节还是字。 (4)不正确,立即数不能作为目的操作数。 (5)不正确,因为不明确要传送的是字节还是字。 (6)正确。 (7)正确。 (8)不正确,CS不能作为:pop指令的操作数。 (9)不正确,CS不能作为PUSH指令的操作数。 3.5设堆钱指针SP的初值为1000H,AX=2000H,BX=3000H,试问: (1)执行指令PUSHAX后SP的值是多少? (2)再执行PUSHBX及POPAX后,SP、AX和BX的值各是多少? 解: (1)SP=OFFEH。 (2)SP=OFFEH;AX=3000H,BX=3000H。 3.6要想完成把[3000H]送[2000H]中,用指令: MOM[200OH],[300OH] 是否正确?如果不正确,应该用什么方法实现? 解:不正确。 正确的方法是: MOV AL, [300OH] MOV [2000H],AL 3.7假如想从200中减去AL中的内容,用SUB200,AL是否正确?如果不正确,应该 用什么方法? 解:不正确。 正确的方法是: MOV BL, 200 SUB BL,AL 3.8试用两种方法写出从8OH端口读入信息的指令。再用两种方法写出从4OH口输 出10OH的指令。 解: (1)IN AL, 80H (2)MOV DX,8OH IN AL, DX (3)MOV,AL,lOOH OUT40H,AL 4)MOV AL,10OH MOV DX,4OH OUT DX,AL 3.9假如:AL=20H,BL=1OH,当执行CMPAL,BL后,问: (1)AL、BL中的内容是两个无符号数,比较结果如何?影响哪儿个标志位? (2)AL、BL中的内容是两个有符号数,结果又如何,影响哪几个标志位? 解: (l)AL=2OH,BL=1OH,O=0,S=0,Z=0,A=0,P=0,C=0。 (2)因为两个都是符号正数,其结果与(l)相同。 3.10若要使AL×10,有哪几种方法,试编写出各自的程序段? 解: (1)使用乘法指令: MOVBL,10 MULBI,(2)使用移位指令: SHLAL,1 MOVBL,AL SHLAL,2 ADDAL,BL (3)使用加法指令: ADDAL,AL MOVBL,AL ADDAL,AL ADDAL,AL ADDAL,BL 3.118086汇编语言指令的寻址方式有哪几类?哪种寻址方式的指令执行速度最快? 解:寻址方式分为:立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻 址方式。其中,寄存器操作数寻址方式的指令执行速度最快。 3.12在直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如 果要用某个段寄存器指出段地址,指令中应该如何表示? 解: 默认的数据访问,操作数在DS段;堆栈操作在SS段;串操作源操作数(SI)在DS段, 目的操作数(DI)在ES段;用BP作为指针在SS段。如果要显式地指定段地址,则在操 作数中规定段寄存器。例如: MOVAX,ES:(BX+10H) 3.13在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么如何确定 段地址? 解: 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,段地址是 隐含约定的,也就是隐含地选择段寄存器。如操作类型为指令,则指定代码段寄 存器CS,如操作类型为堆栈操作,则指定堆找段寄存器SS,…,如表3-1中所示。 当需要超越约定时,通常用段替代前缀加冒号“:”来表示段超越,它允许程序设 计者偏离任何约定的段。 例如: MOV ES:〔BX],AX 这时数据将从寄存器EAX传送至附加段中由EBX寻址的存储单元,而不是传送 到数据段中。 3.14采用寄存器间接寻址方式时,BX、BP、SI、DI分别针对什么情况来使用?这4个 寄存器组合间接寻址时,地址是怎样计算的?请举例说明。 解: 在寄存器间接寻址方式下,BX和BP作为间址寄存器使用,而SI、DI作为 变址寄存器使用。除BP间址默认的段为堆栈段,其他的都默认为数据段。它们 都可以单独使用,或加上偏移量或组合使用。如: [BX+n] LBP+n] [SI+n] [DI+n] [BX+SI+n] [BX+DI+n] [BP+SI+n] [BP+DI+n] 3.15设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作: MOVBYTEPTR[BP],200 MOVWORDPTR[BX],2000 解:前一条指令是把立即数(应是字节)200,传送至堆栈段(BP的默认段〉偏移 量由BP规定的字节单元,地址为:52000H+620OH=58200H 第二条指令是把立即数.2000,传送至数据段(BX的默认段)偏移量由BX规定的字单元,地址为:21000H+1400H=22400H。 3.16使用堆钱操作指令时要注意什么问题?传送指令和交换指令在涉及内存操作数 时应该分别要注意什么问题? 解:使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。但堆栈 固定在堆栈段且只能由SP指向。且堆栈操作要修改堆核指针。MOV指令不能实 现内存单元间的数据传送。XCHG指令是交换,有一个操作数必须是寄存器。 3.17下面这些指令中哪些是正确的?哪些是错误的?若是错误的,请说明原因。 (1)XCHG CS, AX (2)MOV[BX], [1000] (3)XCHGBX, IP (4)PUSHCS (5)POP CS (6)IN BX, DX (7)MOVBYTE[BX],100O (8)MOVCS,[1000] 解: (l)错误,CS不能交换。 (2)错误,MOV指令不能在内存间传送。 (3)错误,IP不能交换。 (4)错误,CS可以作为PUSH指令的操作数。 (5)错误,CS可以作为POP指令的操作数。 (6)错误,IN指令的目的操作数是累加器。 (7)错误,目的操作数是字节单元。 (8〉错误,CS不能作为MOV指令的目的操作数。 3.18 以下是格雷码的编码表,O 0000 0001 0011 0010 0110 0111 0101 0100 1100 请用换码指令和其他指令设计一个程序段,以实现由格雷码向ASCII码的转换。 解: MOVBX,TABLE MOVSI,ASCII_TAB MOVAL,0 MOVCX,10 TRAN:XLATTABLE MOVDL,AL ADDDL,30H MOV[SI],DL INCAL LOOPTRAN 3.19使用乘法指令时,特别要注意先判断是用有符号数乘法指令还是用无符号数乘 法指令,这是为什么? 解:因为有符号数和无符号数,其数的乘法是一样的。但结果的符号取决于两 个操作数的符号。 3.20字节扩展指令和字扩展指令一般用在什么场合?举例说明。 解:主要用于字节相除和字相除之前,把被除数扩展为两倍宽度的操作数。 3.21 什么叫BCD码?什么叫组合的BCD码?什么叫非组合的BCD码?8086汇编语言在对 BCD码进行加、减、乘、除运算时,采用什么方法? 解:BCD码为十进制编码的二进制数。组合的BCD数是把两位BCD加在一个字节 中,高位的在高4位。非组合的BCD码是把一位BCD数放在一个字节的低4位,高4位 为0。8086在BCD加、减和乘法运算以后用BCD调整指令把结果调整为正确的BCD 数。在BCD除法之前先用BCD调整指令再做除法.3.22用普通运算指令执行BCD码运算时,为什么要进行十进制调整?具体地讲,在 进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整 指令? 解:因为8086指令把操作数作为二进制数进行二进制运算,要得到正确的BCD结 果,需要进行调整。在加、减、乘法指令之后加上BCD调整指令,而在除法指令 之前先用BCD调整指令再用除法指令。 第4章 作业答案 4.1在下列程序运行后,给相应的寄存器及存储单元填入运行的结果: MOV AL, 1OH MOV CX, 100OH MOV BX, 2000H MOV [CX],AL XCHGCX,BX MOV DH, [BX] MOV DL, 01H XCHGCX, BX MOV [BX],DL HLT 解:寄存器及存储单元的内容如下: AL=1OH BL=OOH BH=2OH CL=OOH CH=1OH DH=1OH (10O0H)=lOH (200OH)=0lH 2.要求同题4.1,程序如下: MOV AL, 50H MOV BP, 100OH MOV BX, 200OH MOV[BP],AL MOV DH, 20H MOV[BX],DH MOV DL, OlH MOV DL, [BX] MOV CX, 300OH HLT 解:寄存器及存储单元的内容如下: AL=5OH BL=OOH BH=20H CL=OOH CH=30H DL=20H DH=2OH BP=100OH (10OOH)=5OH (20OOH)=20H 4.3自1000H单元开始有一个100个数的数据块,若要把它传送到自200OH开始的存 储区中去,可以采用以下3种方法实现,试分别编制程序以实现数据块的传送。 (l)不用数据块传送指令 (2)用单个传送的数据块传送指令 (3)用数据块成组传送指令。 解: (1) LEA SI, 1OOOH LEA DI, 200OH MOV CX, 100 L1: MOV AX, [SI] MOV[DI],AX LOOPLl HLT (2) LEASI,100OH LEADI,2000H MOVCX,100 CLD L1: MOVSB LOOP L1 HLT (3) LEASI, 100OH LEADI, 200OH MOVCX, 100 CLD REP MOVSB HLT 4.4 利用变址寄存器,编写一个程序,把自1000H单元开始的100个数传送到自1070H 开始的存储区中去。 解: LEASI,100OH LEADI,1070H MOVCX,100 CLD REP MOVSB HLT 4.5要求同题4.4,源地址为2050H,目的地址为2000H,数据块长度为50.解: LEASI,205OH LEADI,200OH MOVCX,50 CLD REPMOVSB HLT 4.6编写一个程序,把自100OH单元开始的100个数传送'至105OH开始的存储区中 (注意:数据区有重叠)。 解: LEASI, 100OH LEADI,1050H ADDSI, 63H ADDDI, 63H MOVCX, 100 STD REPMOVSB HLT 4.7在自0500H单元开始,存有100个数。要求把它传送到1000H开始的存储区中,但在传送过程中要检查数的值,遇到第一个零就停止传送。 解: LEA SI, 050OH LEA DI, 10OOH MOV CX, 100 N1: MOV AL, [SI] CMP AL, 0 JZ N2 MOV[DI],AL INC SI INC DI LOOPN1 N2: HLT 4.14若在0500H单元中有一个数 (1)利用加法指令把它乘2,且送回原存储单元(假定X×2后仍为一个字节); (2)X×4; (3)X×10(假定X×l0≤255).解: (1)LEA BX, 050OH MOV AL, [BX] ADD AL, AL MOV[BX],AL (2)LEA BX, 0500H MOV AL, [BX] ADD AL, AL ADD AL, AL MOV[BX],AL (3)LEABX, 050OH MOVAL, [BX] ADDAL, AL MOVDL, AL ADDAL, AL ADD AL,AL ADDAL, DL MOV[BX],AL 第 5 章 作业答案 5.1 总线周期的含义是什么?8086/8088CPU的基本总线周期由几个时钟组成?如果 一个CPU的时钟频率为8MHz,那么,它的一个时钟周期是多少?一个基本总线周期是多 少?如果主频为5MHz呢? 解:CPLI访问总线(从内存储器或I/0端口读/写字节或字)所需的时间称为总线周期。8086/8088CPU的基本总线周期由4个时钟组成。若CPU的时钟频率为8(5)MHz,时 钟周期为1/8MHz=125(1/5MHz=2O)ns,基本总线周期为4×125(200)ns=500(800)ns 5.2在总线周期的TI、T2、T3、T4状态,CPU分别执行什么动作?什么情况下需要插入 等待状态Tw?Tw在哪儿插入?怎样插入? 解: 下面以存储器读为例进行说明。 在Tl周期:输出地址信号、地址锁存允许信号、内存或I/O端口访问控制信号; 在T2周期:CPIJ开始执行数据传送操作,此时,8086CPU内部的多路开关进行切换,将 地址/数据线AD15~AD0上的地址撤销,切换为数据总线,为读写数据作准 备。8288总线控制器发出数据总线允许信号和数据发送/接收控制信号 DT/R允许数据收发器工作,使数据总线与8086CPU的数据线接通,并控制数 据传送的方向。同样,把地址/状态线A19/S6~A16/S3切换成与总线周期有 关的状态信息,指示若干与周期有关的情况。 在T3周期:开始的时钟下降沿上,8086CPU采样READY线。如果READY信号有效(高电平),则在T3状态结束后进人TA状态。在T4状态开始的时钟下降沿,把数据总线上的数据读入CPU或写到地址选中的单元。在T4状态:结束总线周期。如果访问的是慢速存储器或是外设接口,则应该在Tl状态输出的地址,经过译码选中某个单元或设备后,立即驱动READY信号到低电平。8086CPU在T3状态采样到READY信号无效,就会插入等待周期Tw,在Tw 状态CPU继续采样READY信号;直至其变为有效后再进人T4状态,完成数据传送,结束总线周期。在T4状态,8086CPU完成数据传送,状态信号S2 ~S0。变为无操作的过渡状态。在此期间,8086CPU结束总线周期,恢复各信号线 的初态,准备执行下一个总线周期。 第6章 作 业 答 案 6.1 若有一单板机,具有用8片2114构成的4KBRAM,连线如图创所示。 若以每1KBRAM作为一组,则此4组RAM的基本地址是什么?地址有没有重叠区?每一组的地址范围为多少? 解:RAM的基本地址为: 第一组 OOOOH~03FFH 第二组 4000H~43FFH 第三组 8000H~83FFH 第四组 COOOH~C3FFH 地址有重叠区。每一组的地址范围为OOOH~3FFH(1024个字节)。 6.4若要扩充1KBRAM(用2114片子),规定地址为8000H~83FFH,地址线应该如何 连接? 解:扩充lKBRAM至规定地址8000H~83FFH,其地址线的低10位接芯片,高6位地址 (Al5~A10=100000)产生组选择信号。 第7 章 作 业 答 案 7.1 外部设备为什么要通过接口电路和主机系统相连? 解: 因为外部设备种类繁多,输入信息可能是数字量、模拟量或开关量,而且输 入速度、电平、功率与CPU差距很大。所以,通常要通过接口电路与主机系统 相连。 7.4 CPU和输入输出设备之间传送的信息有哪几类? 解:CPU和输入输出设备之间传送的信息主要有3类。 (l)数据 在微型计算机中,数据通常为8位、16位或32位。 (2)状态信息 在输入时,有输入设备的信息是否准备好;在输出时有输出设备是否有空,若输 出设备正在输出信息,则以忙指示等。 (3)控制信息 例如,控制输入输出设备启动或停止等。 7.9设一个接口的输入端口地址为0100H,状态端口地址为0104H,状态端口中第5位 为1表示输入缓冲区中有一个字节准备好,可以输入。设计具体程序以实现查询式 输入。 解: 查询输入的程序段为: POLl: IN AL, 0104H ANDAL,20H JZ POLl IN AL, 0100H 第 8 章作 业 答 案 8.1在中断响应过程中,8086CPU向8259A发出的两个RT互信号分别起什么作用? 解: CPU发出的第一个INTA脉冲告诉外部电路,其提出的中断请求已被响应,应准备将类型号发给CPU,8259A接到了这个INTA脉冲时,把中断的最高优先级 请求置入中断状态寄存器(ISR)中,同时把IRR(中断请求寄存器)中的相应位复 位。CPU发出的第二个INTA脉冲告诉外部电路将中断的类型号放在数据总线 上。 8.28086CPU最多可以有多少个中断类型?按照产生中断的方法分为哪两大类? 解:8086CPU最多可以有256个中断类型。按照产生中断的方法,可以分为内 部中断(软件中断)和外部(硬件中断)中断两大类。 8.9 在编写中断处理子程序时,为什么要在子程序中保护许多寄存器? 解:因为在用户程序运行时,会在寄存器中有中间结果,当在中断服务程序中要 使用这些寄存器前要把这些寄存器的内容推至堆栈保存(称为保护现场)。在从 中断服务程序返回至用户程序时把这些内容从堆找恢复至寄存器中(称为恢复 现场)。 8.12若在一个系统中有5个中断源,其优先权排列为:1、2、3、4、5,它们的中断服 务程序的入口地址分别为:3000H、302OH、3050H、3080H、30AOH。编写一个程序, 当有中断请求CPU响应时,能用查询方式转至申请中断的优先权最高的源的中断服 务程序。 解: 若5个中断源的中断请求放在一中断状态寄存器中,按优先权分别放在状态的7 位(优先权最高)至位3中。查询方法的程序段为: IN AL,STATUS CMP AL,80H JNE N1 JMP 3000H N1: IN AL,STATUS CMP AL,40H JNE N2 JMP 3020H N2: IN AL,STATUS CMP AL,20H JNE N3 JMP 3050H N3: IN AL,STATUS CMP AL,10H JNE N4 JMP 3080H N4: IN AL,STATUS CMP AL,08H JNE N5 JMP 30A0H N5: RET 第9章 作 业 答 案 9.3在某一应用系统中,计数器/定时器8253地址为340H~343H,定时用作分频器(N 为分频系数),定时器2用作外部事件计数器,如何编制初始化程序? 解: 定时器0用作分频器,工作方式2,其初始化程序为: MOV AL,34H OUT 343H,AL MOV AL,N1 OUT 342H,AL MOV AL,N2 OUT 342H,AL 定时器2用作外部事件计数器,工作在方式0,其初始程序: MOV AL,0B0H OUT 343H,AL MOV AL,N1 OUT 342H,AL MOV AL,N2 OUT 342H,AL 9.4若已有一频率发生器,其频率为1MHZ,若要示求通过计数器/定时器8253,着重 产生每秒一次的信号,8253应如何连接?编写出初始化程序。 解: 1MHZ的信号要变为每秒一次,则需经过106分频。一个通道的计数为16位最 大为65536。故需要需两个通道级连,则每个通道计数为1000。用通道0和通道1级连,都工作在方式2,初始化程序为: MOV AL,34H OUT 343H,AL MOV AL,0E8H OUT 342H,AL MOV AL,03 OUT 342H,AL MOV AL,74H OUT 343H,AL MOV AL,0E8H OUT 342H,AL MOV AL,03 OUT 342H,AL 9.9编程将计数器/定时器8253计数器0设置为模式1,计数初值3000H;计数器1设置 为模式2初值为2010H;计数器2设置为模式4初值为4030H; 解:若端口地址为:0F8H~0FBH,初始化程序为: MOV AL,32H OUT 0FBH,AL MOV AL,00H OUT 0F8H,AL MOV AL,30H OUT 0F8H,AL MOV AL,74H OUT 0FBH,AL MOV AL,10H OUT 0F9H,AL MOV AL,20H OUT 0F9H,AL MOV AL,0B8H OUT 0FBH,AL MOV AL,30H OUT 0FAH,AL MOV AL,40H OUT 0FAH,AL 第10 章 作 业 答 案 10.4可编程并行接口芯片8255A的3个端口在使用时有什么差别? 解:通常端口A或B作为输入输出的数据端口(端口A还可以作为双向数据端口), 而端口C作为控制或状态信息的端口,它在“方式”字的控制下,可以分成两个4位的端 口。每个端口包含一个4位锁存器。它们分别与端口A和B配合使用,可用以作为控制 信号输出,或作为状态信号输入。 10.7 8255A有哪几种基本工作方式?对这些工作方式有什么规定? 解:8255A有3种基本的工作方式: 方式0-----基本输入输出: 方式1-----选通输入输出; 方式2-----双向传送。 10.8设置8255A工作方式,8255A的控制口地址为OOC6H。要求端口A工作在方式1,输 入;端口B工作在方式0,输出;端口C的高4位配合端口A工作;低4位为输入。 解:按要求的方式控制字为:10111001B。编程语句为: MOVAL,0B9H OUTOOC6H, AL; 10.9设可编程并行接口芯片8255A的4个端口地址为OOCOH、00C2H、00C4H、OOC6H,要求用置0/置1方式对PC6置1,对PC4置0。 解:对端口C的PC6置1的控制字为: 00001101B,对PC4置O的控制字为: 0000100OB。 程序段为: MOV AL,DH OUT OOC6H, AL MOV AL,08H.OUT00C6H, AL第五篇:微机原理与接口技术(第二版)习题答案