1、 1 第 1 章 1.1 IA-32 结构微处理器直至 P4,有哪几种? 解 80386、 80486、 Pentium、 Pentium Pro、 Pentium II、 Pentium III、 Pentium 4。 1.2 80386 与 8086 在功能上有哪些主要区别? 解 从 8086到 80386,处理器的功能有了质的飞跃。体现在 1. 从 16位寄存器发展为 32位寄存器 2. 地址寄存器也发展为 32位。可寻址的地址范围达到 4G字节,有了巨大的扩展。 3. 增加了保护方式。使处理器有了两种工作方式实地址方式和保护虚地址方式。实地址方式用 于与 8086兼容;保护方式才是 3
2、2位处理器能真正发挥其完整功能的工作方式。 4. 引入了多任务、任务切换的概念。 5. 引入了四级特权机制,引入了调用门、陷入门、中断门,使程序能在不同特权之间切换。 6. 引入了存储管理单元( MMU),使采用 80386的操作系统能方便地实现请页(每页为 4K字节)虚拟存储器管理。 7. 增加了新指令(主要是保护方式的指令) 1.3 从功能上, 80486 与 80386 有哪些主要区别? 解 80486 从功能上来说是 80386 + 80387 + 片上缓存。 1.4 奔腾相对于 80486 在功能上有什么扩展? 解 奔腾增加了第二条流水线,实现每个时钟执行两条指令;片上的一级缓存容量
3、加倍;寄存器仍是 32 位, 但内部数据通路是 128 和 256 位以加速内部数据传送,且猝发的外部数据总线已经增加至 64 位;增加了高级的可编程中断控制器( Advanced Programmable Interrupt Controller (APIC))以支持多奔腾处理器系统。 1.5 P II 以上处理器基于什么结构? 解 P II 是基于 P6 系列处理器又增加了 MMX 技术。 1.6 微处理器、微型计算机和微型计算机系统三者 之间有什么不同 ? 解 把 CPU( 运算器和控制器 )用大规模集成电路技术做在一个芯片上,即为微处理器。微处理器加上一定数量的存储器和外部设备( 或外
4、部设备的接口 )构成了微型计算机。微型计算机与管理、维护计算机硬件以及支持应用的软件相结合就形成了微型计算机系统。 1.7 CPU 在内部结构上由哪几部分组成 ?CPU 应具备哪些主要功能 ? 解 CPU 主要由起运算器作用的算术逻辑单元、起控制器作用的指令寄存器、指令译码器、可编程逻辑阵列和标志寄存器等一些寄存器组成。其主要功能是进行算术和逻 辑运算以及控制计算机按程序的规定自动运行。 1.8 微型计算机采用总线结构有什么优点 ? 解 采用总线结构,扩大了数据传送的灵活性、减少了连线。而且总线可以标准化。易于兼容和工业化生产。 1.9 数据总线和地址总线在结构上有什么不同之处 ?如果一个系统
5、的数据和地址合用一 套2 总线或者合用部分总线,那么,要靠什么来区分地址和数据 ? 解 数器总线是双向的( 数据既可能读也可能写 ),而地址总线是单向的。 8086 为了减少芯片的引脚数量,采用 数据与地址 线复用 ,既作数据总线也作为地址总线 。它们主要靠信号的时序来区分。通常在 读写数据时,总是先输出地址( 指定要读 /写数据的单元 ),过一段时间再读或写数据。 1.10 控制总线传输的信号大致有哪几种 ? 解 主要是区分读 /写存储器还是外部设备、读还是写以及外界输入的 READY 和 INT 等信号 1.11 在以下六个题中所用的模型机的指令系统如表 1 所示: 表 1 模型机指令系统
6、 指令种类 助记符 机器码 功 能 数据传送 LD A,n LD H, n LD A, H LD H, A LD A, (n) LD (n), A LD A, (H) LD (H), A 3E n 26 n 7C 67 3A n 32 n 7E 77 n A n H H A A H 以 n 为地址,把该单元的内容送 A,即 (n) A 把 A 的内容送至以 n 为地址的单元, A (n) 以 H 的内容为地址,把该单元的内容送 A, (H) A 把 A 的内容送至以 H 的内容为地址的单元, A (H) 加法 ADD A, n ADD A, H ADD A, (H) C6 n 84 86 A+
7、n A A+H A A 与以 H 为地址的单元的内容相加, A+(H) A 减法 SUB n SUB H SUB (H) D 6 n 94 96 A n A A H A A - (H) A 逻辑与 AND A AND H A7 A4 A A A A H A 逻辑或 OR A OR H B7 B4 A A A A H A 异 或 XOR A XOR H AF AC A A A A H A 增 量 INC A INC H 3C 24 A+1 A H+1 H 减 量 DEC A DEC H 3D 25 A-1 A H-1 H 无条 件 转移 JP n JP Z,n JP NZ,n JP C, n J
8、P NC, n JP M,n JP P,n C3 n CA n C 2n DA n D2 n FA n F 2 n n PC Z=1, n PC Z=0, n P C Cy=1,n PC Cy=0,n PC S=1, n PC S=0, n PC 停机指令 HALT 76 停机 3 在给定的模型机中,若有以下程序,分析在程序运行后累加器 A 中的值为多大。若此程序放 在以 10H 为起始地址的存储区内,画出此程序在内存中的存储图。 LD A,20H ADD A,15H LD A,30H ADD A,36H ADD A,1FH HALT 解 程序在存储器中存放示意图如图 1-1 所示: 地址 内
9、容 指令 10H 3E LD A,20H 11H 20 12H C6 ADD A,15H 13H 15 14H 3E LD A,30H 15H 30 16H C6 ADD A,36H 17H 36 18H C6 ADD A,1FH 19H 1F 1AH 76 HALT 图 1-1 题 1.11 中程序在存储器中存放示意图。 这段程序运行完后累加器 A 中的值为 A = 30H+36H+1FH = 85H。 1.12 要求同题 1.6,程序如下: LD A, 50H SUB 30H LD A, 10H ADD A, 36H SUB 1FH HALT 分 析程序运行后累加器中的值是多少,并且画出该
10、程序在内存中的存储图。 解 程序在存储器中存放示意图如图 1-2 所示: 地址 内容 指令 10H 3E LD A,50H 11H 50 12H D6 ADD A,30H 13H 30 14H 3E LD A,10H 15H 10 16H C6 ADD A,36H 17H 36 18H D6 ADD A,1FH 19H 1F 1AH 76 HALT 图 1-2 题 1.12 中的程序在存储器中的存放示意图 4 这段程序运行完 后累加器 A 中的值为 A = 10H+36H-1FH = 27H。 1.13 在给定的模型机中,写出用累加的办法实现 15 15 的程序。 解 LD A,0 LD H,
11、15 LOOP: ADD A,15 DEC H JP NZ,LOOP HALT 1.14 在给定的模型机中,写出用累加的办法实现 20 20 的程序。 解 模型机的寄存器是 8 位,其最大能表示的值为 256。而 20 20 = 400 超出了模型机中能表示的最大值。故此题在模型机中无法做。需要用 8086 中的寄存器对才 能实现。 1.15 在模型机中,用重复相减的办法实现除法的程序如下: LD A, (M2) ; M2 为放除数的存储单元 LD H, A XOR A LOOP: LD (M3), A ; M3 为放商的存储单元 LD A, (M1) ; M1 为放被除数 (或余数 )的存储
12、单元 SUB H JP C, DONE LD (M1), A LD A, (M3) INC A JP LOOP DONE: MALT 若此程序放在以 20H 开始的存储区,画出它的存储图。 解 程序在存储器中的存储图如图 1-3 所示。 地址 内容 指令 20H 3A LD A,(M2) 21H M2 22H 67 LD H,A 23H AF XOR A 24H 32 LD (M3),A 25H M3 26H 3A LD A,(M1) 27H M1 28H 94 SUB H 29H DA JP C,DONE 2AH 32 2BH 76 LD (M1),A 2CH M1 2DH 3A LD A,
13、 (M3) 2EH M3 2FH 3C INC A 5 30H C3 JP LOOP 31H 24 32H 76 HALT 图 1-3 题 1.15 中的程序在存储器中存放的示意图 1.16 在模型机中,把二进制数转换为 BCD 码的程序流程图如图 1-4 所示。 图 1-4 题 1.16 程序流程图 编写出该程序。 解 LD H,0 ;计数值 H 清零 LD A,(Binary) ;把待转换的二进制数 A S1: SUB A,64H ;待转换的二进制数 -100 JP M,S2 ;结果 0,转 S2 INC H ;计数值加 1 JP S1 S2: ADD A,64H ;恢复剩余的二进制数 L
14、D (Binary),A ;保存剩余的二进制数 LD (BCD3),H ;保存百位 BCD 码 LD H,0 ;计数值 H 清零 LD A,( Binary) ;剩余的二进制数 A S3: SUB A,0AH ;剩余的二进制数 -10 JP M,S4 ;结果 0,转 S4 INC H ;计数值加 1 JP S3 S4: ADD A,0AH ;恢复剩余的二进制数 LD (BCD1),A ;保存个位 BCD 码 LD (BCD2),H ;保存十位 BCD 码 HALT 第 2 章 2.1 8086 的基本程序执行寄存器是由哪些寄存器组成? 解 基本程序执行 寄存器由以下寄存器组成 (1) 通用寄存
15、器。 这八个寄存器能用于存放操作数和指针。 (2) 段寄存器。 这些寄存器最多能保持四个段选择子。 (3) FLAGS (程序状态和控制 ) 寄存器。 FLAGS 寄存器报告正在抵行的程序的状态并允许有限地(应用程序级)控制处理器。 (4) IP (指令指针 ) 寄存器。 IP 寄存器包合下一条要挑行的指令的 16-位指针。 2.2 8086 的存储器是如何组织的?地址如何形成? 解 8086有 20条地址引线,它的直接寻址能力为 2*20 1M字节。所以,在一个 8086组成的系统中,可以有多达 1M字节的存储器。这 1M字节逻辑上可以组织成一个线性矩阵。地址从 00000H到 FFFFFH
16、。但是,在 8086内部的 AIU能进行 16 位运算,有关地址的寄存器如 SP、IP,以及 BP、 SI、 DI等也都是 16位的,因而 8086对地址的运算也只能 是 16位。这就是说,对于6 8086来说,各种寻址方式,寻找操作数的范围最多只能是 64K字节。所以,整个 1M字节存储器以 64K为范围分为若干段。在寻址一个具体物理单元时,必须要由一个基地址再加上由各种寻址方式确定的的 16位偏移量来形成实际的 20位物理地址。段基地址就是由 8088中的段寄存器,中的 16位数自动左移 4位,然后与 16位偏移量相加,形成 20位物理地址。 2.3 通用寄存器起什么作用? 解 通用寄存器
17、主要用于 (1) 逻辑和算术操作的操作数 (2) 用于地址计算的操作数 (3) 内存指针 2.4 指令地址如何形成? 解由段寄存器 CS 确定的段基地址与由指令指针确定的偏移量相加形成指令地址。 2.5 如何形成指令中的各种条件码? 解指令中的条件码,即标志寄存器中的状态标志。它们主要由算术和逻辑运算指令设置或清除。指令系统中也有设置或清除进位标志的指令。 2.6 8086 的总线接口部件有哪些功能 ?请逐一说明。 解 总线接口单元( BIU)负责与存储器接口;执行单元( EU)执行各种操作。 BIU 主要由段寄存器、指令指针、加法器(形成 20 位地址)、预取的 指令流队列等组成。 2.7
18、8086 的总线接口部件由哪几部分组成 ? 解 8086 中的 总线接口单元( BIU)负责 CPU 与存储器之间的信息传送。具体地说,BIU 既负责从内存的指定部分取出指令,送至指令队列中排队( 8086 的指令队列有 6 个字节,而 8088 的指令队列只有 4 个字节);也负责传送执行指令时所需的操作数。执行单元( EU)负责执行指令规定的操作。 2.8 段寄存器 CS 1200H,指令指针寄存器 IP FF00H,此时,指令的物理地址为多少 ? 解指令的物理地址 = 12000H + FF00H = 21F00H 2.9 8086 的执行部件有什么功能 ?由哪几部分组成 ? 解 808
19、6 的执行部件负责指令的执行。它主要由算术逻辑单元和标志寄存器及通用寄存器等部分组成。 2.10 状态标志和控制标志有何不同 ? 程序中是怎样利用这两类标志的 ? 8086 的状态标志和控制标志分别有哪些 ? 解 状态标志反映算术和逻辑运算的结果,主要用作于各种条件。控制标态实现一些控制作用。 EFLAGS寄存器有六个状态标志,它们是 (1) 进位标志 C(Carry Flag) 当结果的最高位 (字节操作时的 D7 或字操作时的 Dl5、双字操作的 D31)产生一个进位或借位,则 C 1,否则为 0。这个标志主要用于多字节数的加、减法运算。移位和循环指令也能够把存储器或寄存器中的最高位 (左
20、移时 )或最低位 (右移时 )放人标志 C 中。 (2) 辅助进位标志 A(Auxitiary Carry Flag) 在字节操作时,则由低半字节(一个字节的低 4 位)向高半字节有进位或借位,则 A 1,否则为 0。这个标志用于十进制算术运算指令中。 (3) 溢出标志 O(Overflow Flag) 7 在 算术运算中,带符号数的运算结果超出了 8 位、 16 位或 32 位带符号数能表达的范围,即在字节运算时十 127 或一 128,在字运算时 +32767 或一 32768,在双字运算时 +2*31- 1 或 -2*31 此标志置位,否则复位。一个任选的溢出中断指令,在溢出情况下能产生
21、中断。 (4) 符号标志 S (Sign Flag) 它的值与运算结果的最高位相同。即结果的最高位 (字操作时为 D15)为 1,则 S 1;否则,S 0。 由于在 IA-32 结构微处理器中,符号数是用补码表示的,所以 S 表 示了结果的符号, 0正,1负。 (5) 奇偶标志 P(Parity Flag) 若操作结果中“ 1”的个数为偶数,则 P 1,否则 P 0。这个标志可用于检查在数据传送过程中是否发生错误。 (6) 零标志 Z(Zero fLag) 若运算的结果为 0,则 Z 1,否则 Z 0 一个控制标志,即 方向标志 D(Direction Flag) 若用指令置 D 1,则引起串
22、操作指令为自动减量指令,也就是从高地址到低地址或是“从右到左”来处理串;若使 D 0,则串操作 指令就为自动增量指令。 STD 和 CLD 指令分别地设置和清除 DF 标志。 第 3 章 3.1 分别指出下列指令中的源操作数和目的操作数的寻址方式。 (1)MOV SI, 300 (2)MOV CX, DATADI (3)ADD AX, BXSI (4)AND AX, CX (5)MOV BP, AX (6)PUSHF 解 源操作数为立即寻址,目的操作数为寄存器寻址。 源操作数为变址寄存器 加位移量 寻址,目的操作数为寄存器寻址。 源操作数为基址加变址寻址,目的操作数为寄存器寻址。 源操作数和目
23、的操作数都为寄存器寻址。 源操作数为寄存器寻址,目的操作数为寄存器间接寻址。 (6) 为堆栈操作。 3.2 试述指令 MOV AX, 2000H 和 MOV AX, DS:2000H的区别。 解 前一条指令是立即寻址,即把立即数 2000H 传送至寄存器 AX。后一条指令是直接寻址,是把数据( DS)段中的地址为 2000H 单元的内容传送至寄存器 AX。 3.3 写出以下指 令中内存操作数的所在地址。 (1)MOV AL, BX 十 10 (2)MOV BP 十 10, AX (3)INC BYTE PTRSI 十 5 (4)MOV DL, ES: BX 十 SI 8 (5)MOV BX,
24、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)MOV BL, F5H (7)MOV DX, 2000H (8)POP CS (9)PUSH CS 解 (1) 不正确, AL 与 BX 数据宽度不同 (2) 正确 (3) 不明确
25、是增量字节还是字 (4) 不正确,立即数不能作为目的操作数 (5) 不明确要传送的是字节还是字(应是 SI而不表 S1) (6) 正确。但十六进制数 F5H 应写为 0F5H (7) 正确 (8) 不正确, CS 不能作为 POP 指令的操作数 (9) 不正确, CS 不能作为 PUSH 指令的操作数 3.5 设堆栈指针 SP 的初值为 1000H, AX 2000H, BX 3000H,试问: (1)执行指令 PUSH AX 后 SP ? (2)再执行 PUSH BX 及 POP AX 后 SP ?、 AX ?、 BX ? 解 SP=0FFEH SP=0FFEH、 AX=3000H、 BX=
26、3000H 3.6 要想完成把 3000H送 2000H中,用指令: MOV 2000H, 3000H 是否正确 ?如果不正确,应用什么方法 ? 解 不正确。 正确的方法是: MOV AL,3000H MOV 2000H,AL 3.7 假如想从 200 中减去 AL 中的内容,用 SUB 200, AL 是否正确 ?如果不正确,应用什么方法 ? 解 不正确。 正确的方法是: 9 MOV BL,200 SUB BL,AL 3.8 用两种方法写出从 80H 端口读入信息的指令。再用两种方法写出从 40H 口输出 100H 的指 令。 解 (1) IN AL,80H (2) MOV DX,80H I
27、N AL,DX (3) MOV AL,100H OUT 40H,AL (4) MOV AL,100H MOV DX,40H OUT DX,AL 3.9 假如: AL 20H, BL 10H,当执行 CMP AL, BL 后,问: (1) AL, BL 中内容是两个无符号数,比较结果如何 ?影响哪几个标志位 ? (2) AL、 BL 中内容是两个有符号数,结果又如何,影响哪几个标志位 ? 解 AL=20H, BL=10H, O=0, S=0, Z=0, A=0, P=0, C=0。 因为两个都是符号正数,其结果同。 3.10 若要使 AL 10,有哪几种方法,编出各自的程序段。 解 (1) 使用
28、乘法指令: MOV BL,10 MUL BL (2) 使用移位指令: SHL AL,1 MOV BL,AL SHL AL,2 ADD AL,BL (3) 使用加法指令: ADD AL,AL MOV BL,AL ADD AL,AL ADD AL,AL ADD AL,BL 3.11 8086 汇编语言指令的寻址方式有哪几类 ? 用哪一种寻址方式的指令执行速度最快 ? 解 寻址方式分为:立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻址方式。其中寄存器操作数寻址方式的指令执行速度最快。 3.12 直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定 ?如果要用某个段寄存器指出段地址,
29、指令中应如何表示 ? 解 默认的数据访问,操作数在 DS 段;堆栈操作在 SS 段;串操作源操作数( SI)在DS 段,目的操作 数( DI)在 ES 段;用 BP作指针在 SS 段。如果要显式指定段地址,则在操作数中规定段寄存器。例如: 10 MOV AX,ES:(BX+10H) 3.13 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定 ? 解 在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,段地址是隐含约定的,也就是隐含的选择段 寄存器。如操作类型为指令,则指定代码段寄存器 DS,如操作类型为堆栈操作,则指定堆栈段寄存器 SS,如表 2 中所示: 表
30、2 段寄存器的约定 操作类型 约定段寄存器 可修改的段寄存器 逻辑地址 指令 CS 无 IP 堆栈操作 SS 无 SP 源串地址 DS CS、 ES、 SS SI 目的串地址 ES 无 DI BP 用作基止寄存器 SS CS、 DS、 ES 有效地址 通用数据读写 DS CS、 ES、 SS 有效地址 当需要超越约定时,通常用段替代前缀加冒号“ :”来表示段超越,它允许程序设计者偏离任何约定的段。例如: MOV ES:EBX, EAX 这时数据将从 寄存器 EAX传送至附加段中由 EBX寻址 的存储单元,而不是传送到数据段中。 3.14 用寄存器间接寻址方式时, BX、 BP、 SI、 DI
31、分别针对什么情况来使用 ?这四个寄存器组合间接寻址时,地址是怎样计算的 ?举例进行说明。 解 在寄存器间接寻址情况下, BX和 BP 作为间址寄存器使用,而 SI、 DI 作为变址寄存器使用。除 BP 间址默认的段为堆栈段,其地的都默认为数据段。它们都可以单独使用,或加上偏移量或组合使用。如: BX + n BP + 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,说明下面两条指令所进行的具体操作: MOV BYTE PTR
32、BP, 200 MOV WORD PTRBX, 2000 解 前一条指令是把立即数(应是字节) 200,传送至堆栈段( BP 的默认段)偏移量由 BP 规定的字节单元(地址为: 52000H + 6200H = 58200H )。 第二 条指令是把立即数 2000,传送至数据段( BX 的默认段)偏移量由 BX 规定的字单元(地址为: 21000H + 1400H = 22400H)。 3.16 使用堆栈操作指令时要注意什么问题 ?传送指令和交换指令在涉及内存操作数时分别要注意什么问题 ? 解 使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。但堆栈固定在堆栈段且只能由 SP 指向。且堆栈操作要修改堆栈指针。 MOV 指令不能实现内存单元间的数据传送。