1、习题参考解答 1.1 什么是微处理器、微型计算机、微型计算机系统? 参考答案:将运算器和控制器集成在一块大规模集成电路芯片上作为中央处理部件,简称为微处理器; 以微处理器为核心,再配上存储器、接口电路等芯片,构成微型计算机; 微型计算机系统由硬件和软件系统两大部分组成: (1)硬件系统由微型计算机和外设组成的计算机实体; (2)软件系统是指为微型计算机运行的全部技术资料和各种程序,由系统软件和应用软件构成。 1.2 什么是微型计算机的三种总线? 参考答案: 系统总线包含有三种不同功能的总线,即数据总 线 DB( Data Bus)、地址总线 AB( Address Bus)和控制总线 CB(
2、Control Bus)。 “ 数据总线 DB” 用于传送数据信息。数据总线是双向三态形式的总线,即他既可以把 CPU 的数据传送到存储器或 I O 接口等其它部件,也可以将其它部件的数据传送到CPU。 “ 地址总线 AB” 是专门用来传送地址的,由于地址只能从 CPU 传向外部存储器或 I O 端口,所以地址总线总是单向三态的。 “ 控制总线 CB” 用来传送控制信号和时序信号。 1.3 评估微型计算机的主要技术指标有哪些? 参考答案:评估微 型计算机的主要技术指标有: CPU 的字长,决定计算机内部一次可以处理的二进制代码的位数; 内存储器容量与速度,内存储器容量是衡量它存储二进制信息量大
3、小的一个重要指标,内存储器的速度用存取周期来衡量; CPU 指令执行时间,反映 CPU 运算速度的快慢; 系统总线的传输速率等。 1.4 将下列十进制数分别转换为二进制、十六进制数。 35 130 0.625 48.25 参考答案: 100011B, 23H 10000010B, 82H 0.101B, 0.AH 110000.01B, 30.4H 1.5 将下列二进制数分别转换为十进制、八进制、十六进制数。 101101B 11100110B 110110.101B 101011.011B 参考答案: 45, 55Q, 2DH 230, 346Q, E6H 54.625, 66.5Q, 36
4、.AH 43.375, 53.3Q, 2B.6H 1.6 写出下列十进制数的原码、反码、补码(分别采用 8 位二进制和 16 位二进制表示)。 38 120 -50 -89 参 考答案: 原码、反码、补码: 00100110B, 0000000000100110B 原码、反码、补码: 01111000B, 0000000001111000B 原码: 10110010B, 1000000000110010B 反码: 11001101B, 1111111111001101B 补码: 11001110B 1111111111001110B -89 原码: 11011001B, 10000000010
5、11001B 反码: 11001101B, 1111111111001101B 补码: 11001110B 1111111111001110B 1.7 已知补码求出其真值和原码。 21H 93H 45A6H 0DA25H 参考答案: 真值: +21H,原码: 21H 真值: -6DH,原码: EDH 真值: +45A6H,原码: 45A6H 真值: -25DBH, 0A5DBH 1.8 将下列十进制数转换为压缩和非压缩格式的 BCD 码。 12 55 147 368 参考答案: 00010010B, 00000001 00000010B 01010101B, 00000101 00000101
6、B 000101000111B, 00000001 00000100 00000111B 001101101000B, 00000011 00000110 00001000B 1.9 下列十进制数算术运算,试用 8 位二进制补码计算,并用十六进制数表示运算结果,判断是否有溢出。 35-45 80+50 -70-60 -20 +( -60) 参考答案: 各数的补码: 35补 = 00100011B, -45补 = 11010011B, 80补 = 01010000B, 50补 = 00110010B, -70补 = 10111010B, -60补 = 11000100B, -20补 = 1110
7、1100B。 35-45=11110110B=-10,结果正确,没有溢出; 80+50=10000010B=-126,结果不正确,有溢出,因为 130 超出了 8 位补码的表示范围上限 +127; -70-60=01111110B=-126,结果不正确,有溢出,因为 -130 超出了 8 位补码的表示下限 -128; -20 +( -60) =10110000B=-80,结果正确,没有溢出。 1.10 分别写出下列字符串的 ASCII 码 (十六进制表示 )。 3aB8 eF10 +5(0: How are you? 参考答案: 33614238H 65463130H 2B3528303AH
8、486F770061726500796F753FH 35+( -45) 00100011B +11010011B 11110110B 80+50 01010000B +00110010B 10000010B -70+( -60) 10111010B +11000100B 1 01111110B -20+( -60) 11101100B +11000100B 1 10110000B CY =0, CS =0 OF=CY CS = 0 0=0 没有溢出 CY =0, CS =1 OF=CY CS = 0 1=1 有溢出 CY =1, CS =0 OF=CY CS = 1 0=1 有溢出 CY =1
9、, CS =1 OF=CY CS = 1 1=0 没有溢出 2.1 8086CPU 内部由哪两部分组成?它们的主要用途是什么? 参考答案: 8086CPU 内部按功能分执行单元 EU 和总线接口单元 BIU。 执行单元的功能:负责指令的执行。同时向 BIU 输出数据(操作结果),并对寄存器和标志寄存器进行管理。在 ALU 中进行 16 位运算,数据传送和处理均在 EU 控制下进行。 总线接口单元的 功能:负责从内存或 I/O 端口取指令、取操作数和保存运算结果。 2.2 8086/8088CPU 有哪些寄存器?各有什么用途? 参考答案: 8086/8088 CPU 内部有 14 个 16 位的
10、寄存器,按功能可分为:通用寄存器(8 个 )、段寄存器 (4 个 )和控制寄存器 (2 个 )。 通用寄存器组 EU 中有 4 个 16 位的通用寄存器,即数据寄存器 AX、 BX、 CX、 DX。 数据寄存器 AX、 BX、 CX、 DX 一般用来存放数据,但它们都有各自的特定用途。 AX 称为累加器,是最常用的寄存器。它常用来存放算术逻辑运算中的操 作数,而且一些操作要在 AX 中完成,如乘法操作和除法操作。此外,所有的 I/O 指令都使用累加器与外设端口交换信息。 BX 称为基址寄存器。它常用来存放操作数在内存中数据段内的基地址。 CX 称为计数器。在设计循环程序时一般使用该寄存器存放循
11、环次数。 DX 称为数据寄存器。在寄存器间接寻址的 I/O 指令中存放 I/O 端口地址;在做双字长乘除法运算时, DX 与 AX 一起存放一个双字长操作数,其中 DX 存放高 16 位数。 指针和变址寄存器 8086/8088CPU 中,有一组 4 个 16 位寄存器,它们是基址指针寄存器 BP,堆栈指 针寄存器 SP,源变址寄存器 SI,目的变址寄存器 DI。这组寄存器存放的内容是某一段地址偏移量,用来形成操作数地址,主要在堆栈操作和变址运算中使用。 SP 称为堆栈指针寄存器; BP 称为基址指针寄存器; SI 称为源变址寄存器; DI 称为目的变址寄存器。 段寄存器 CS、 DS、 SS
12、、 ES 8086/8088 有 20 位地址总线,一共可以寻址 1M 的空间。而所有内部寄存器都是 16位的,只能直接寻址 64KB,因此采用分段技术来解决。将 1MB 的存储空间分成若干逻辑段,每段最长 64KB,这些逻辑段在整个存储空间中可以浮 动。 8086/8088 定义 4 个独立的逻辑段,分别为:代码段、数据段、堆栈段和附加数据段,将程序代码或数据分别放在这 4 个逻辑段中。每个逻辑段的段地址分别放在对应的段寄存器中,代码或资料在段内的偏移地址由有关寄存器或立即数给出。 8086/8088 的 4 个段寄存器: CS 称为代码段寄存器,用来存储程序当前使用的代码段的段地址 (起始
13、地址 )。 DS 称为数据段寄存器,用来存放程序当前使用的数据段的段地址。 SS 称为堆栈段寄存器,用来存放程序当前所使用的堆栈段的段地址。 ES 称为附加数据段 寄存器,用来存放程序当前使用的附加数据段的段地址。 指令指针寄存器 IP IP 称为指令指针寄存器,用来存放预取指令在代码段内的偏移地址。 . 标志寄存器 F F 称为标志寄存器,是一个 16 位的寄存器,其中只用了 9 位。分别为 6 个状态标志位和 3 个控制标志位。 2.3 8086/8088CPU 中标志寄存器有几位状态位?有几位控制位?其含义各是什么? 参考答案:标志寄存器是一个 16 位的寄存器,其中只用了 9 位。分别
14、为 6 个状态标志位和 3 个控制标志位。 状态标志位 状态标志位用来 反映算术和逻辑运算结果的一些特征。 CF:进位标志位。当进行加减运算时,若最高位发生进位或借位则 CF 1,否则 CF 0。 PF:奇偶标志位。当运算结果的低 8 位中含有偶数个 1 时, PF 1,否则 PF 0。 AF:辅助进位标志位。加法或减法运算时,若结果的低字节的低 4 位向高 4 位有进位或借位,则 AF 1;否则 AF 0。 ZF:零标志位。若当前的运算结果为 0,则 ZF 1;否则 ZF 0。 SF:符号标志位。与运算结果的最高位相同,当运算结果的最高位为 1 时, SF=1;否则 为 0。 OF:溢出标志
15、位。当运算结果超出了带符号数的范围,即溢出时, OF=1;否则 OF=0。 控制标志位 控制标志位有 3 个,用来设置控制条件来控制 CPU 的操作,由程序设置或清除。 TF:跟踪标志位。 IF:中断允许标志位。用来控制可屏蔽中断的控制标志。若 IF=1,允许 CPU 接受可屏蔽中断请求;若 IF 0,则禁止 CPU 回应可屏蔽中断请求。 IF 的状态对非屏蔽中断及内部中断没有影响。 DF:方向标志位。控制串操作指令用的标志。 2.4 Intel 8086CPU 和 8088CPU 主要区别有哪些? 参考答案: 8086CPU 与 8088CPU 的区别主要有以下 4 个方面: . 内部结构
16、8086 的指令队列有 6B,而 8088 仅有 4B。它们的执行单元 EU 完全相同,而总线接口单元 BIU 却不完全相同。 8086CPU 内、外部的数据总线 (DB)都为 16 位, 8088 内部数据总线为 16 位,外部为 8 位。 . 引出线和内存组织 8086 有一条高 8 位数据总线允许引出线 BHE ,它可以看做一条附加的地址线,用 来访问内存的高字节,而 A0 用来访问内存的低字节。 . 地址 /数据复用线 8086 的地址 /数据复用线是 16 位 AD15 AD0;而 8088 仅有 AD7 AD0 复用, A8A15仅作为地址线使用。 . 内存与 I/O 接口选通信号
17、电平。 内存与 I/O 接口选通信号电平不同: 8086 为 M/IO ,即高电平进行存储器操作,低电平进行 I/O 操作;而 8088 则相反,为 IO/M 。 2.5 逻辑地址和物 理地址指的是什么?如果已知逻辑地址为 1200: 0ABCDH,其物理地址为多少? 参考答案: 把用段地址和偏移地址表示存储单元的地址称为逻辑地址,段地址和段内偏移地址经20 位地址加法器生成的 20 位地址称为物理地址。 已知逻辑地址为 1200: 0ABCDH,其物理地址为 12000H + 0ABCDH= 1CBCDH。 2.6 若 CS 为 3000H,试说明现行代码段可寻址的存储空间的范围。 参考答案
18、: 可寻址的存储空间的范围: 30000H+0000H 30000H+FFFFH,既: 30000H 3FFFFH 2.7 设现行数据段位于存储器 10000H 到 1FFFFH 存储单元, DS 段寄存器内容为多少? 参考答案:一个逻辑段最大范围: 0000H FFFFH,因此 DS 段寄存器内容为: 1000H。 2.8 设双字节 12345678H 的起始地址是 1000H,试说明这个双字在存储器中如何存放? 参考答案: 2.9 已知堆栈段寄存器 SS=4000H,堆栈指针 SP=0100H,试将数据 56789ABCH 推入堆栈,画出进栈示意图。最后栈顶 SP=? 参考答案 : 最后栈
19、顶 SP=400FCH 2.10 试求出下列运算后的各个状态标志。 1234H + 6789H 23A5H 65C2H 参考答案: 1234H + 6789H=79BDH, CF=0, PF=1, AF=0, ZF=0, SF=0, OF=0; 23A5H 65C2H=0BDE3H, CF=1, PF=0, AF=0, ZF=0, SF=1, OF=0。 40100H BC 9A 78 56 SP 400FEH 56 78 9A BC 400FCH 78 56 34 12 DS:0000H DS:0001H DS:0002H DS:0001H DS:0003H 2.11 8088CPU 工作在
20、最小模式时。 当 CPU 访问存储 器时,要利用哪些信号? 当 CPU 访问 I/O 时,要利用哪些信号? 参考答案: IO/M =0, A19/S16 A16/S3, A15 A8, AD7 AD0, ALE,读存储器时:RD =0, DT/R =0(写存储器时: WR =0, DT/R =1), DEN 。 IO/M =1, A19/S16 A16/S3, A15 A8, AD7 AD0, ALE,读 IO 端口时: RD =0,DT/R =0(写 IO 端口时: WR =0, DT/R =1), DEN 。 2.12 简要说明 8086/8088 的指令周期、总线周期、机器 周期和时钟周
21、期有何不同。 参考答案: (1) 指令周期由若干个机器周期组成,而机器周期时间又包含若干个时钟周期,总线周期一般由 4 个时钟周期组成。 (2) 机器周期和总线周期的关系是:机器周期指的是完成一个基本操作的时间,这个基本操作有时可能包含总线读 /写,因而包含总线周期,但是有时可能与总线读 /写无关,所以,并无明确的相互包含关系。 2.13 什么情况下插入 TW 等待周期?插入 TW 多少,取决什么因素? 参考答案: 在 T3 状态, CPU 采样 READY 线,若 READY 信号无效,插入 TW 状态;插入 TW状态为一个 至多个,直到 READY 信号有效,才进入 T4 状态。 2.14
22、 什么情况下会出现总线的空闲周期? 参考答案: 只有在 8086CPU 和存储器或 I/O 接口之间传输数据时, CPU 才执行总线周期,当CPU 不执行总线周期时(指令队列 6 个字节已装满, EU 未申请访问存储器),总线接口部件不和总线打交道,就进入了总线空闲周期 Ti 。 在空闲周期中,虽然 CPU 对总线进行空操作,但是 CPU 内部操作仍然进行,即EU 部件在工作。所以说,总线空操作是总线接口部件 BIU 对总线执行部件 EU的等待。 3.1 指出下列传送类指令源操作数的 寻址方式。 (1) MOV SI, 120 (2) MOV BX, DX (3) MOV AX, 100BXD
23、I (4) MOV DI, BX 100 (5) MOV AX, 1000H (6) MOV AX, 80H (7) MOV AX, BX (8) MOV CX, BXSI 参考答案: (1) 立即数寻址 (2) 寄存器寻址 (3) 基址加变址寻址 (4) 基址寻址 (5) 直接寻址 (6) 立即数寻址 (7) 基址寻址 (8) 基址加变址寻址 3.2 指出下列指令中存储器操作数物理地址的计算表达式。 (1) MOV SI, BX (2) MOV 8DI, DX (3) MOV AX, BPSI (4) ADD DI, BX 100 (5) ADD AX, 1000H (6) SUB AX,
24、BX+DI+80H (7) ADD AX, ES:BX (8) DEC WORD PTRSI 参考答案: (1) DS 16 BX (2) DS 16 DI 8 (3) SS 16 BP SI (4) DS 16 BX 100 (5) DS 16 1000H (6) DS 16 BX DI 80H (7) ES 16 BX (8) DS 16 DI 3.3 指出下列指令中的错误。 (1) MOV BX, AL (2) MOV CS, AX (3) MOV 100, CL (4) MOV BX, 1000H (5) PUSH 1234H (6) MOV CS , 1200H (7) XCHG A
25、H, 12H (8) INC 2000H (9) ADD BX, 10 (10) OUT 258H, AX 参考答案: (1) 源操作数和目的操作数寄存器类型不匹配 (2) 代码段寄存器 CS不允许赋值 (3) 立即数不能做目的操作数 (4) 内存单元之间不能直接传送 (5) 立即数不能做堆栈指令操作数 (6) 代码段寄存器 CS不允许赋值 (7) 立即数不能做交换指令操作数 (8) 字类型还是字节类型不明确 (9) 目的操作数类型不明确 (10) 端口地址大于 8位二进制数,需要通过 DX传送。 3.4 设 (SP) 3000H, (AX) 1234H, (BX) 5678H,指出执行下列指
26、令后相关寄存器的 内容。 PUSH AX PUSH BX POP AX POP BX 参考答案: 执行后, (AX) 5678H, (BX) 1234H, (SP) 3000H。 3.5 若 AX=1234H, BX=3456H,当执行 SUB AX, BX指令后,求 AX和标志寄存器 CF、 AF、 SF、ZF和 OF标志位的值? 参考答案: (AX)=0DDDEH, CF=1, AF=1, SF=1, ZF=0, OF=0。 3.6 设 (AH) 0F6H, (AL) 90H,问 执行 SUB AH, AL指令后, AX中的值及标志寄存器 CF、AF、 SF、 ZF、 PF和 OF标志位的值? 参考答案: (AX)=6690H, CF=0, AF=0, SF=0, ZF=0, OF=0, PF=1。 3.7 设 (BX) 1000H, (DI) 0050H,执行 LEA BX, BX SI 0200H后, (BX)? 参考答案: