1、习题一 概 述 主要内容:计算机系统的组成和各部分的作用,微型计算机组成,微处理器的结构;计算机中的信息 表示; 微机系统的结构特点。 1.1 微处理器、微型计算机和微型计算机系统三者之间有什么不同? 将运算器与控制器集成在一起,称为微处理器。微处理器是微处理器的核心。微型计算机是由微处理 器、存储器、输入/输出接口电路和系统总线构成的裸机系统。微型计算机系统是以微型计算机为主机, 配上系统软件和外设之后而构成的计算机系统。三者之间是有很大不同的,微处理器是微型计算机的一个 组成部分,而微型计算机又是微型计算机系统的一个组成部分。 1.2 CPU 在内部结构上由哪几部分组成?CPU 应具备什么
2、功能? CPU 在内部结构上由算术逻辑部件(ALU);累加器和通用寄存器组;程序计数(指令指针)、指令寄 存器和译码器;时序和控制部件几部分组成。不同 CPU 的性能指标一般不相同,但一般 CPU 应具有下列功 能:可以进行算术和逻辑运算;可保存少量数据;能对指令进行译码并执行规定的动作;能和存储器、外 设交换数据;提供整个系统所需要的定时和控制;可以响应其它部件发来的中断请求。 1.3 累加器和其他通用寄存器相比有何不同? 累加器是比较特殊的通用寄存器。它在某些指令执行前,它可以保存一源操作数,还在执行后又用来 保存运算结果,另外它一般也用来完成输入/输出指令。而通用寄存器则一般只用来保存参
3、加运算的数据、 运算的中间的结果以及用来保存地址。 1.3 微型计算机采用总线结构有什么优点? 微型计算机的总线结构是一个独特的结构。有了总线结构以后系统中各功能部件之间的相互关系变为 了各功能部件面向总线的单一关系。一个部件只要符合总线标准,就可以连接到采用这种总路线标准的系 统中,使系统功能得到扩展。 1.4 控制总线传输的信号大致有哪几类? 控制总线用来传输控制信号:其中包括 CPU 送往存储器和输入/输出接口电路的控制信号,如读信号、 写信号和中断响应信号等;还包括其它部件送到 CPU 的信号,比如,时钟信号、中断请求和准备就绪信号。 1.5 数据总线和地址总线在结构上有什么不同之处?
4、如果一个系统的数据和地址合用一套总线或者合用部分 总线,那么要靠什么来区分地址和数据? 从结构上看数据总线是双向的,而地址总线从结构上看却是单向的。如果一个系统的数据总线和地址 总线合用一套总线或者合用部分总线,一般可利用时钟,在总线上采用分时复用技术来区分地址和数据, 例如可在总线周期的若干个时钟周期,约定某周期传输地址、在另一周期传输数据。 1.6 将下列十进制数转换成 8421BCD 码: 1049 =0001 0000 0100 1001 902=1001 0000 0010 851.37=1001 0101 0001 . 0011 0111 0.6259=0000. 0110 001
5、0 0101 1001 1.7 将下列各组数用八位的补码相加: (+75)+(-6) +75补=0100 1011 -6 补=1000 0110 +75补+ -6 补=1000 0110+1000 0110=0100 0101 习题二 IA-32 结构微处理器 (重点:8086CPU) 主要内容:主要介绍 80868088CPU 内部结构。了解 80X86CPU 的特点。 2.1 8086 CPU 在内部结构上由哪几部分组成?其功能是什么? 【答】8086 的内部结构成两部分:总线接口部件 BIU,负责控制存储器读写。执行部件 EU,EU 从指令队 列中取出指令并执行。8086 是 16 位微
6、处理器,有 16 根数据线、20 根地址线,内部寄存器、运算部件以 及内部操作都是按 16 位设计的。 2.2 8086 的总线接口部件有那几部分组成? 【答】8086 的总线接口部件主要由下面几部分组成:4 个段寄存器 CS/DS/ES/SS, 一个 16 位的指令指针寄 存器 IP, 一个 20 位地址加法器, 6 字节的指令队列,内部暂存器以及输入输出电路组成. 2.3 8086 的执行部件有什么功能?由那几部分组成? 【答】8086 的执行部件主要由下面几部分组成:(1)四个 16 位通用寄存器 AX、BX、CX、DX, 通用四个 16 位专用寄存器,包括二个指针寄存器 SP、BP,
7、二个变址寄存器 SI、DI, 算术逻辑单元 ALU,标志寄存器。 2.4 8086CPU 状态标志和控制标志又何不同?程序中是怎样利用这两类标志的? 8086 的状态标志和控制标 志分别有哪些? 【答】标志分两类:状态标志(6 位):反映刚刚完成的操作结果情况。控制标志(3 位):在某些指令 操作中起控制作用。 2.5 8086/8088 和传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点? 8086CPU 执行转移指令时,指令队列寄存器内容如何变化? 【答】传统的计算机一般按照取指令、指令译码/执行指令的步骤工作。在 8086/8088 中,指令的提取与执 行分别由总线接口
8、部件 BIU 与执行部件 EU 完成,8086/8088 可以在取指令同时又可以执行指令,这种 并行工作方式有力的提高了 CPU 的工作效率。 2.6 将两数相加,即 0100 1100 加 0110 0101,CF、PF、AF、ZF、SF、OF 各为何值? 【答】0100 1100+0110 0101=10110001 CF=0,PF=1,AF=1,ZF=0,SF=1,OF=1 2.7 存储器的逻辑地址由哪几部分组成?存储器的物理地址是怎样形成的?一个具有 20 位地址线的 CPU,其最大物理地址为多少? 【答】存储器的逻辑地址由段地址与段内偏移地址组成。存储器的物理地址:将 16 位段地址
9、左移 4 位后 加上 16 位段内偏移地址,形成 20 位物理地址。一个具有 20 位地址线的 CPU,其最大物理地址为20 =1MB。 2.8 现有 6 个字节的数据分别为 11H,22H,33H,44H,55H,66H,已知它们在存储器中的物理地址为 400A5H400AAH若当前(DS)= 4002H,请说明它们的偏移地址值。如果要从存储器中读出这些数 据,需要访问几次存储器,各读出哪些数据? 【答】由于:物理地址=400A5H=段地址*16+偏移地址=40020H+偏移地址 偏移地址=400A5+40020=85H 从奇地址 400A5H 中读出:11H;从偶地址 400A6H 读出一
10、个字:22H,33H;从偶地址 400A8H 读出 一个字:44H,55H;从偶地址 400AAH 中读出:66H。共读 4 次。 2.9 已知当前数据段中存有如下图所示的数据,现要求将最后两个字节改成 ODH,OAH,请说明需给出的 段基值和偏移地址值,并说明其写入过程。 【答】数据段段地址=150AH,偏移地址=0004H。CPU 的总线接口部件根据数据段寄存器的内容 150AH,左 移 4 位,在加上偏移地址 0004H,形成 20 位物理地址 150A4H,由总线接口送出,选中物理存储单元 150A4H、150A5H,数据 0DH 通过数据总线送入 150A4H,数据 0AH 通过数据
11、总线送入 150A4H。 2.10 在 8088/8086 中,逻辑地址 FFFF0001, 00A237F 和 B800173F 的物理地址分别是多少? 2.11 在 8088/8086 中,从物理地址 388H 开始顺序存放下列三个双字节的数据,651AH, D761H 和 007BH, 请问物理地址 388H, 389H, 38AH, 38BH, 38CH 和 38DH 6 个单元中分别是什么数据? 2.12 8086/8088 内部有哪些通用寄存器? 2.13 8086/8088 内部有几个段寄存器,阐述各段寄存器的用途? 2.14 8086CPU 的形成三大总线时,为什么要对部分地址
12、线进行锁存?用什么信号控制锁存? 14800 150A1 150A2150A3150A4150A5 数据段首地址 【答】 为了确保 CPU 对存储器和 I/O 端口的正常读/写操作,要求地址和数据同时出现在地址总线和数据 总线上。而在 8086CPU 中 AD0-AD15 总线是地址/数据复用的,因此需在总线周期的前一部分传送出 地址信息,并存于锁存器中,而用后一部分周期传送数据。8086CPU 中是通过 CPU 送出的 ALE 高电平 信号来控制锁存的。 2.15 段寄存器 CS=1200H,指令指针寄存器 IP=4000H,此时,指令的物理地址为多少?指向这一物理地址的 CS 值和 IP
13、值是唯一的吗? 【答】 此时,指令的物理地址为 16000H;这一物理地址的 CS 值和 IP 值不是唯一的,例如: CS=1000H,IP=6000H。 (2. 80386CPU选择教学内容) 2.14 80386 最重要的技术特点是什么? 【答】速度大大提高:时钟达 12MHZ/16MHZ, 寻址空间大大扩展:4GB 物理空间,64GB 虚拟空间, 除了保持 80286 的实地址方式和保护方式外,增加了虚拟 8086 方式 80386 设置了转换检测缓冲 器,大大加快了存储器访问速度。 2.15 虚拟 8086 方式有什么特色?为什么要设置这种方式? 【答】可以执行 8086 的应用程序。
14、段寄存器的用法和实地址方式时一样,即段寄存器内容左移 4 位 加上偏移量为线性地址。存储器寻址空间为一兆字节,然而可以使用分业方式,将一兆字节分为 256 个业面,每页 4K 字节。在 80386 多任务系统中,可以其中一个或几个任务使用虚拟 8086 方式。 此时,一个任务使用的全部页面可以定位于某个物理地址空间,另一个任务的页面可以定位于其他区 域,即每个虚拟 8086 方式下的任务可以转换到物理存储器的不同位置,这样,把存储器虚拟化了, 虚拟 8086 方式的名称正是由此而来。虚拟 8086 方式中,程序在最低特权级上运行,因此,80386 指令系统中的一些特权指令不能使用。 虚拟 80
15、86 方式是 80386 中很重要的设计特点,他可以使大量的 8086 软件有效的与 80386 保护方 式下的软件并发运行。 2.16 80386 的实地址方式用于什么时候?为什么说它是为建立保护方式作准备的方式?实地址工作方式有 什么特点? 【答】80386 的实地址方式用于为 80386 进行初始化用的。常常在实地址方式,为 80386 保护方式所需要 的数据结构做好各种配置和准备,因此,这是一种为建立保护方式作准备的方式。实地址工作方式的 特点:1、寻址机构、存储器管理、中断处理机构均和 80386 一样。2、操作数默认长度为 16 位,但 允许访问 80386 的 32 位寄存器组,
16、在使用是,指令中要加上前缀以表示越权存取。 3、不用虚拟地 址的概念存储器容量最大 1M 字节。4、实地址方式下,存储器中保留两个固定区域,一个为初始化程 序区,另一个为中断向量区。5、80386 具有 4 个特权级,实地址方式下,程序在最高级(0 级)上执 行。 2.17 80386 采用拿几种描述符表?这些表的设置带来什么优点? 【答】80386 共设计三中描述符表即:全局描述符表,局部描述符表,中断描述浮表。采用描述符表带来 如下三方面的优点:1可以大大扩展存储空间;2 可以实现虚拟存储;3 可以实现多任务隔离。 2.18 80386 在 3 种工作方式下,“段“的长度有什么差别? 实地
17、址方式:段的大小固定 64K 字节;保护方式:段的大小是可以选择的,1 字节到 4 千兆字节; 虚拟 8086 方式:对程序员来说,段长度固定为 64K。 2.19 Intel86 系列 CPU 是从哪一种芯片开始采用 RISC 技术的?你能说说 RISC 技术最重要的特点和优点吗? 【答】80486 是首次采用 RISC 技术的。80486 把 80386 和浮点运算协处理器 80387 及 8KB 的超高速缓存器 集中到一个芯片中,且支持二级 Cache。80486 能在一个时钟周期执行一条指令。 2.20 80486 和 80386 相比,有什么技术特点? 【答】 80486 是首次采用
18、 RISC 技术的;采用片内高速缓存和片内浮点运算协处理器; 80486 采用 一种突发式总线方式实现 CPU 和内存的高速数据交换;80386 可以模拟多个 8086 来实现多任务功能。 2.21 80386SL 和 80486SL 芯片有什么特点?主要用于什么场合? 【答】 80386SL 不但具有 80386 的三种工作方式,还增加了一种系统管理方式(SMM),在这种方式, CPU 会根据不同的使用环境自动减速运行或停止运行,还可以控制其他部件停止工作,从而使微机系 统的功耗最小。 80386SL 采用静态 CMOS 工艺制造技术。80486SL 和 80386SL 类似,采用 SMI
19、中断以 减少功耗,用于便携机。 2.22 Pentium 有哪些技术特点?你认为在 Pentium 基础上主要应从哪几个方面可再作改进? 【答】 采用超标量双流水线结构,每个流水线包含 5 个步级。 内部采用 2 个彼此独立的 8KB 数据高 速缓存,这两个高速缓存可以同时被访问。 Pentium 内部数据总线为 32 位,但是 cpu 和内存进行 数据交换的外部数据总线为 64 位,使一个总线周期的数据传输量提高一倍。 采用 36 位地址总线, 扩展了寻址空间。 对 mov.push.dec.inc 等常用指令不用微程序而用硬件实现;采用分支预测技 术提高流水线效能。 采用分支预测技术提高流
20、水线效能。 浮点运算执行过程分为 8 个流水步级。 pentium 也存在一些缺点,如功耗大,达 15w,浮点运算功能仍低于一些 RISC 处理器。 习题三 8086 指令系统 主要内容: 8086 指令系统。主要介绍 8086 的基本数据类型、寻址方式和指令系统,重点掌握 8086 指令系统的寻址方式、堆栈操作指令、算术运算指令及其对标志位的影响,串操作指令,控制传送指令。 3.1 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。 XCHG CS,AX () MOV BX,1000 () PUSH CS () POP CS () IN BX,DX () 3.2 单选题: (1
21、)执行下面指令序列后,结果是( )。 MOV AL,82H CBW A、 AX=0FF82H B、AX=8082H C、AX=0082H D、AX=0F82H 【答】A (2)与 MOV BX,OFFSET VAR 指令完全等效的指令是( )。 A、MOV BX,VAR B、LDS BX,VAR C、LES BX,VAR D、LEA BX,VAR 【答】D (3)编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有 ( )。 A、 CMP B、SUB C、AND D、MOV 【答】D (4)下面指令执行后,改变 AL 寄存器内容的指令是( )。 A、TEST AL,02H
22、 B、OR AL,AL C、CMP AL,B D、AND AL,BL 【答】D (5)设 DH=10H,执行 NEG DH 指令后,正确的结果是( )。 A、DH=10H CF=1 B、DH=0F0H CF=0 C、DH=10H CF=0 D、DH=0F0H CF=1 【答】D (6)设 DS=8225H,DI=3942H,指令 NEG BYTE PTRDI操作数的物理地址是( )。 A、85B92H B、86192H C、BB690H D、12169H 【答】A (7)检查 BUF 的内容是否为正偶数,如是正偶数,则 0TAL。下面程序段正确的是( )。 A、 MOV AL,BUF JS K
23、1 SHR AL,1 JNC K1 MOV AL,0 K1: B、 MOV AL,BUF AND AL,11 JNZ K2 MOV AL,0 K2: C、 MOV AL,BUF TEST AL,81H JNZ K3 MOV AL,0 K3: D、 MOV AL,BUF JNP K4 TEST AL,80H JNZ K4 MOV AL,0 K4: 【答】C (8)下列指令中,执行速度最快的是( ) 。 A、 MOV AX,100 B、 MOV AX,BX C、 MOV AX,BX D、 MOV AX,BX+BP 【答】C 3.3 已知(DS)= 091DH, (SS)= IE4AH, (AX)=
24、 1234H, (BX)= 0024H, (CX)= 5678H, (BP)= 0024H, (SI)= 0012H, (DI)= 0032H, 09226 = 00F6H, 09228=1E40H, lE4F6=091DH,试求单独执行下列指令后的结果? (l) MOV CL ,20H BXSI; 【答】由于源操作数有效地址 EA=20H+0024H+0012H=0056H, 其物理地址 PA=DS*16+EA=091DH*16+56H=09226H, 因此(CL)= F6H (2) MOV BPDI,CX; 【答】由于目的操作数有效地址 EA= 0024H0032H=0056H, 目的操作
25、数物理地址 PA= SS*16+EA=1E4A0H+0056H=1E4F6H, 因此1E4F6=5678H (3) LEA BX ,20HBXSI MOV AX ,2BX 【答】第一条指令:源操作数物理地址 PA091D0H+(20+0024H+0012H)=09226H,因此(BX)=0056H 第二条指令:源操作数物理地址 PA091D0H+(2+0056)=09928H, 因此(AX)=1E40H (4) LDS SI ,BXDI MOV SI,BX 【答】第一条指令: 源操作数物理地址 PA=091D0H+(0024H+0032H)=09226H 因此(SI)= 00F6H, (DS)
26、=1E40H 第一条指令:目的操作数物理地址 PA1E400H+00F6H=1E4F6H 因此 1E4F6H 单元的内容为 0024H, 即1E4F6H=0024H (5) XCHG CX,32HBX XCHG 20BXSI ,AX 【答】同理可得:(CX)= 00F6H(AX)= 00F6H, 09226H= 1234H 3.4 8086 CPU 执行如下指令后 MOV AL,01100100B SUB AL,58H ;(AL)=0CH,AF=1,CF=0 DAS ;(AL)=06 ,AF=1,CF=0 【答】 首先用 TD 调试验证上面的结果;自己定义两个数据,重新验证,写出结果。 3.5
27、 设(IP)= 3D8F H, (CS)= 4050H,(SP)= 0F17C H,当执行 CALL 2000:0094H 后,试求出 IP、CS、SP、 SP 、 SP1 SP2 和SP3的内容? 【答】(IP)=0094H ,( CS)=2000H ,(SP)=F178H SP=8FH , SP+1=3DH , SP+2=50H, SP3=40H, SP+3=40H 3.6 设(DS)= 2000H, (BX)= 1256H, (SI)= 528FH,TABLE 的偏移量= 20A1H, 232F7H=3280H, 264E5H = 2450H,执行下述指令 (1)JMP BX ;IP=
28、1256H (2)JMP TABLEBX ;IP= 3280H (3)JMP BXSI ;IP= 2450H 3.7 分别用一条语句实现下述指明的功能 (1)栈顶内容弹出送字变量 DI。 ( POP DI ) (2)双字变量 AYD 存放的地址指针送 ES 和 SI。 ( LES SI ,AYD ) (3)不允许中断即关中断。 ( CLI ) (4)子程序返回调用程序。 ( RET ) (5)AX 的内容加 1,要求不影响 CF。 ( INC AX ) (6)BX 的内容加 1,要求影响所有标志位。 ( ADD BX, 1 ) (7)若操作结果为零转向标号 GOON。 ( JZ GOON )
29、3.8 80868088 用什么途径来更新 CS 和 IP 的值? 【答】执行 CALL、JMP、INT 指令,可以改变 CS 和 IP 中的值,即改变程序走向。 3.9 字节扩展指令和字扩展指令用在什么场合?举例说明。 【答】需要对带符号数字节扩展为字时,要预先执行 CBW 指令。需要对带符号数字扩展为双字时,要预先 执行 CWD。 【答】例:求-503/267=?,将商存 1000H 单元. MOV AX,-503 MOV BX,267 CWD IDIV MOV 1000H,AX HLT 3.10 设 DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令
30、所进行的具体操作: MOV WORD PTR BP, 2000 MOV WORD PTR BX, 2000 3.11 以下是格雷码的编码表 00000 ,10001 ,20011, 30010, 40110 50111 ,60101, 70100, 81100, 91101 请用换码指令和其他指令设计一个程序段,实现格雷码往 ASCII 的转换。 【答】 格雷码 ASCII 码 0000 30H 0001 31H 0010 33H 0011 32H 0100 37H 0101 36H 0110 34H 0111 35H 1000 0 1001 0 1010 0 1011 0 1100 38H
31、1101 39H TABLE SEGMENT TAB_DA DB 30H,31H,33H,32H,37H,36H,34H,35H,0,0 DB 0,0,38H,39H GRA DB 05H ASCII_DA DB ? TABLE ENDS CODE SEGMENT ASSUME CS:CODE,DS:TABLE START: MOV AX,TABLE MOV DS,AX MOV BX,OFFSET TAB_DA MOV AL,GRA XLAT MOV ASCII_DA,AL CODE ENDS END START 3.12 8086 状态标志寄存器中,作为控制用的标志位有( 3 )个,其中,不
32、可用指令操作的是(DF、 IF、 TF) 3.13 设当前的 SP=1000H,执行 PUSHF 指令后,SP=(0FFE H) ,若改为执行 INT 20H 指令后,则 SP=( 0FFA H) 。 【答】执行 PUSHF 指令后,SP=(0FFE H) 。执行 INT 20H 指令后,则 SP=( 0FFA H) 。 3.14 设当前 SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行 PUSH BX 指令后,栈 顶地址和栈顶 2 个字节的内容分别是什么? 【答】当前栈顶指针(SP)=2FF00H,物理地址20100H+FE00H=2FF00H 当执行
33、PUSH BX 指令后,栈顶指针(SP)=FE00-2=FDFEH,栈顶物理地址2FDFEH,栈顶 2 个字 节的内容分别 57H,34H。 3.15 HLT 指令用在什么场合?如 CPU 在执行 HLT 指令时遇到硬件中断并返回后,以下应执行哪条指令? 【答】HLT 用在使 CPU 处于暂停状态而等待硬件中断的场合。 在执行 HLT 指令遇到硬件中断并返回后将执行 HLT 后面的一条指令。 3.16 为什么用増量指令或减量指令设计程序时,在这类指令后面不用进位标志作为判断依据? 【答】増量指令或减量指令不影响进位标志 CF。 3.17 用普通运算指令执行 BCD 码运算时,为什么要进行十进制
34、调整?具体讲,在进行 BCD 码的加、减、乘、 除运算时,程序段的什么位置必须加上十进制调整指令? 【答】在 BCD 码中,采用 4 位二进制数对一个十进制数的编码,只允许 09 这 10 个数字出现,但 CPU 运 算结果一般会超过此范围,因此要进行十进制调整。进行加、减法或乘法运算时,调整指令必须紧跟 在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。 3.18 中断指令执行时,堆栈的内容有什么变化?中断处理子程序的人口地址是怎样得到的? 【答】中断指令执行时,堆栈内容变化如下:标志寄存器被推入堆栈,且 SP 减 2,然后 CPU 将主程序的下 一条指令地址即断点地址推入堆栈,即
35、段值 CS 推入堆栈且 SP 减 2,偏移量推入堆栈,且 SP 减 2。中 断处理子程序的入口地址即中断向量,对应的中断类型号的 4 倍即为中断向量地址,在该地址处的 4 个字节内容,高地址单元两个字节为中断入口地址的段地址,低地址单元两个字节为中断入口地址的 偏移地址。 3.19 中断返回指令 IRET 和普通子程序返回指令 RET 在执行时,具体操作内容什么不同? 【答】IRET 从堆栈中依次弹出断点处指令指针 IP、代码段 CS 内容与标志寄存器的值,而 RET 从堆栈中依 次弹出断点处指令指针 IP 值、代码段 CS 内容,不需要弹出标志寄存器的值。 3.20 将存放在 0A00H 单
36、元和 0A02H 单元的两个无符号数相乘,结果存放在地址为 0A04H 开始的单元中。 【答】参考程序: MOV AL,0A00H MOV BL,0A02H MUL BL MOV 0A04,AX 3.21 编程序将 AX 中数,最高位保持不变,其余全部左移 4 位。 【答】参考程序: MOV BX, AX AND BX , 8000H MOV CL, 4 SHL AX, CL AND AX,7FFFH OR AX, BX 3.22 将 0400H 单元中的数,低 4 位置零,高 4 位保持不变。 【答】参考程序: MOV AL, 0400H AND AL, 0F0H MOV0400H, AL
37、3.23 将 BX 中的数,对高位字节求反,低位字节保持不变。 【答】参考程序:NOT BH 3.24 检测 Bx 中第 13 位(D13),为 0 时,把 AL 置 0,为 1 时,把 AL 置 1。 【答】参考程序: TEST BX,0010 0000 0000 0000B JZ ZERO MOV AL,01H HLT ZERO: MOV AL,0 HLT 3.25 利用字串操作指令,将 1000H10FFH 单元全部清零。 【答】参考程序: CLD MOV DI,1000H MOV CX,100H MOV AL,0 REP STOSB 3.26 从 1000H 开始,存放有 200 个字
38、节,要查出字符#(ASCII 码为 23H), 把存放第一个#的单元地址送入 BX 中。 【答】参考程序: CLD MOV DI,1000H MOV CX,200 MOV DX,CX MOV AL,23H REPNZ SCASB JZ FIND JMP NOFOUND FOUND: DEC DI MOV BX,DI NOFOUND: HLT 3.27 编程计算(X+Y)*10)+Z)/X,X、Y、Z 都是 16 位无符号数,结果存在 RESULT 开始的单元。 【答】参考程序: MOV AX,X ADD AX,Y MOV BX,0AH MUL BX ADD AX,Z ADC DX,0H MOV
39、 BX,X DIV BX MOV RESULT,AX MOV RESULT+2,DX HLT 3.28 用简单指令编程求-3/2=?,将商存 DL,余数存 DH 单元。用 TD 调试后,写出 DL,DH 的内容。 【答】参考程序: MOV AL,-3 CBW MOV BL,2 IDIV BL MOV DL,AL MOV DH,AH HLT 习题四 汇编语言程序设计 主要内容:汇编语言程序设计。主要介绍汇编语言程序的设计方法与编程原理,重点掌握算术运算程 序、字符串处理程序、码制转换程序、子程序设计程序、常用 DOS 和 BIOS 功能调用程序、汇编语言常用 伪指令。 4.1 分析执行下列指令序
40、列后的结果: 1) MOV AX,1234H MOV BX,00FFH AND AX,BX 【答】(AX)=0034H 2) MOV AL,01010101B AND AL,00011111B ;(AL)=00010101B OR AL,11000000B ;(AL)=11010101B XOR AL,00001111B ;(AL)=11011010B NOT AL 【答】(AL)=00100101B 3) MOV DL,05H MOV AX,0A00H MOV DS,AX MOV SI,0H MOV CX,0FH AGAIN: INC SI CMP SI,DL LOOPNE AGAIN HL
41、T 本程序实现了什么功能? 【答】在以 0A001H 开始的 15 个单元中查找 05H。 4) MOV AX,DSEGADDR MOV DS, AX MOV ES,AX MOV SI, OFFSET B1ADDR MOV DI,OFFSET B2ADDR MOV CX,N CLD REP MOVSB HLT 本程序实现了什么功能? 【答】 将 B1ADDR 中 N 个字节数据传送到 B2ADDR 开始的 15 个存储单元 。 5) MOV AX, 0H MOV DS,AX MOV ES, AX MOV AL,05H MOV DI,0A000H MOV CX,0FH CLD AGAIN: SC
42、ASB LOOPNE AGAIN HLT 本程序实现了什么功能? 【答】从地址 0A000H 开始的 15 个单元中查找字节型数据 05H,用条件循环 LOOPNZ,控制数据 05H 的查找。 4.2 阅读程序: 1). CLD LEA DI,0100H MOV CX, 0080H XOR AX, AX REP STOSW 本程序实现了什么功能? 【答】将 DS 中起始地址为 0100H 的 128 个字节单元清零。 2). MOV AL, 08H SAL AL,01H ;(AL)=00010000H MOV BL, AL MOV CL ,02H SAL AL,CL ;(AL)=0100000
43、0H ADD AL,BL ;(AL)=01010000H 本程序实现了什么功能? 【答】 将 AL 中的内容乘以 10。 4.3 试分析下列程序完成什么功能? MOV DX,3F08H MOV AH,0A2H MOV CL,4 SHL DX,CL ;(DX)=F080H MOV BL,AH SHL BL,CL ;(BL)=20H SHR BL,CL ;(BL)=02H OR DL,BL ;(DL)=82H 【答】将 DX 中的低 4 位数据 8H 分离出来,将 AH 中的低 4 位数据 2H 分离出来,合并为 82H 存放在 DL。 4.4 已知程序段如下: MOV AX,1234H MOV
44、CL,4 ROL AX,CL DEC AX MOV CX,4 MUL CX 试问:(1)每条指令执行后,AX 寄存器的内容是什么?(2)每条指令执行后,CF,SF 及 ZF 的值分 别是什么?(3)程序运行结束时,AX 及 DX 寄存器的值为多少? 【答】 MOV AX,1234H ; (AX)=1234H, CF=SF=ZF=0 MOV CL,4 ROL AX,CL ; (AX)=2341H ,CF=1,SF=ZF=0 DEC AX ; (AX)=2340H, CF=1,SF=ZF=0 MOV CX,4 ; MUL CX ;(AX)= 8000H ,CF=ZF=0,SF=1,DX=0 4.5
45、 试分析下列程序段: ADD AX,BX JNC L2 SUB AX,BX JNC L3 JMP SHORTL5 如果 AX、BX 的内容给定如下: AX BX (1)14C6H 80DCH (程序转向 L2) (2)B568H 54B7H (程序转向 SHORTL5 ) 问该程序在上述情况下执行后,程序转向何处? 【答】 (1) 程序转向 L2。 (2) 程序转向 SHORTL5。 4.6 以下为某个数据段,试问各个变量分别占多少字节,该数据段共占多少字节? DATA SEGMENT VAR1 DW 9 ;2 字节 VAR2 DD 10 DUP(?),2 ;44 字节 VAR3 DB 2 D
46、UP(?,10 DUP(?) ;22 字节 VAR4 DB HOW ARE YOU ;11 字节 DATA ENDS 【答】该数据段共占 79 字节。 4.7 下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。 VAR1 DB 10,2 ;2 字节 VAR2 DW 5DUP(?),0 ;12 字节 VAR3 DB HOW ARE YOU?,$ ;13 字节 VAR4 DD -1,1,0 ;2 字节 Var1 Var2 Var3 Var4 10 ? H FFH 2 ? O FFH ? W FFH ? FFH ? A 01H ? R 00H ? E 00H ? 00H ? Y
47、00H ? O 00H 0 U 00H 0 ? 00H $ 4.8 编写一段程序,比较两个 5 字节的字符串 OLDS 和 NEWS,若相同,在 RESULT 置 0,否则置 0FFH。 【答】 参考程序: OLDS DB 1,2,3,4,5 NEWS DB 1,2,3,4,5 RESULT DB ? MOV SI,OFFSET OLDS MOV DI,OFFSET NEWS MOV CX,10 CLD REP CMPSB JNZ NOEQU ;串不相等转 MOV AL,0 JMP OUTPT NOEQU: MOV AL,0FFH OUTPT: MOV RESULT,AL STOP: JMP
48、STOP 4.9 编程求和 Y=A1 + A2 + . + A100 。其中 Ai 为字节变量。 【答】 参考程序: DATA SEGMENT TABLE DW 12,3,45, YAL DW ? YAH DW ? DATA ENDS . MIAN PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV DX,0 XOR AX, AX ;清 AX MOV BX, OFFSET TABLE MOV CX, 4 CLC LP: ADD AX, BX ;求和 JNC DON INC DX CLC DON: INC BX INC BX ;指向下一个数 LOOP LP ;未加完,继续 MOV YAL,AX ;存和 MOV YAH,DX MAIN ENDP CODE ENDS END START 4.10 内存中以 FIRST 和 SECOND 开始的单元中分别存放着两个 16 位组合的十进制(BCD 码)数,低位在前。 编程序求这两个数的组合的十进制和,并存到以 THIRD 开始的