第1章 例题与习题 1.1微型计算机基础 1.1.1例题 1. 把十进制数137.875转换为二进制数。 解: 把十进制数转换为二进制数时,需要对一个数的整数部分和小数部分分别进行处理,得出结果后再合并。 整数部分: 一般采用除以2取余法。 小数部分: 一般采用乘以2取整法。 所以,(137.875)10=(10001001.111)2。 2. 把二进制数10011.0111转换为八进制数和十六进制数。 解: 八进制、十六进制都是从二进制演变而来的,3位二进制数对应一位八进制数,4位二进制数对应一位十六进制数,从二进制向八进制、十六进制转换时,把二进制数以小数点为界,对小数点前后的数分别分组进行处理,不足的位数用0补足,整数部分在高位补0,小数部分在低位补0。 (10 011.011 1)2=(010 011.011 100)2=(23.34)8 (1 0011.0111)2=(0001 0011.0111)2=(13.7)16 3. 将八进制数23.34转换为二进制数。 解: (23.34)8=(010 011.011 100)2=(10011.0111)2 4. X=0.1010,Y=-0.0111,求[X-Y]补,并判断是否有溢出。 解: [X-Y]补=[X]补+[-Y]补 [X]补=0.1010[Y]补=1.1001[-Y]补=0.0111 0.1010 +0.0111 1.0001 说明: 当异号相减运算时,通过补码,减法运算转换为两个正数的加法运算,结果为负(符号位为1),表示运算结果溢出。 5. 10010101B分别为原码、补码、BCD码表示时,对应的十进制数为多少? 解: [X]原=10010101,X=-21 [X]补=10010101,[X]原=11101011,X=-107 [X]BCD=10010101,X=95 6. 简述计算机为什么能实现自动连续的运行。 解: 计算机能实现自动连续的运行,是由于计算机采用了存储程序的工作原理。把解决问题的计算过程描述为由许多条指令按一定顺序组成的程序,然后把程序和处理所需要的数据一起输入计算机的存储器中保存起来。计算机接收到执行命令后,由控制器逐条取出并执行指令,控制整个计算机协调地工作,从而实现计算机自动连续的运行。 1.1.2习题 1. 选择题。 (1) 8086是()。 A. 微机系统B. 微处理器C. 单板机D. 单片机 (2) 下列数中最小的数为()。 A. (101001)2B. (52)8C. (2B)16D. (50)10 (3) 下列无符号数中,其值最大的数是()。 A. (10010101)2B. (227)8C. (96)16D. (150)10 (4) 设寄存器的内容为10000000,若它等于-127,则为()。 A. 原码B. 补码C. 反码D. ASCII码 (5) 在小型或微型计算机中,普遍采用的字符编码是()。 A. BCD码B. 十六进制C. 格雷码D. ASCII码 (6) 若机器字长为8位,采用定点整数表示,一位符号位,则其补码的表示范围是()。 A. -(27-1) ~ 27B. -27~ 27-1 C. -27~ 27D. -(27-1) ~ 27-1 (7) 二进制数00100011,用BCD码表示时,对应的十进制数为()。 A. 23B. 35C. 53D. 67 (8) 已知[X]补=10011000,其真值为()。 A. -102B. -103C. -48D. -104 (9) 二进制数10100101转换为十六进制数是()。 A. 105B. 95C. 125D. A5 (10) 连接计算机各部件的一组公共通信线称为总线,它由()。 A. 地址总线和数据总线组成 B. 地址总线和控制总线组成 C. 数据总线和控制总线组成 D. 地址总线、数据总线和控制总线组成 (11) 计算机硬件系统应包括()。 A. 运算器、存储器、控制器B. 主机与外围设备 C. 主机和实用程序D. 配套的硬件设备和软件系统 (12) 计算机硬件能直接识别和执行的只有()。 A. 高级语言B. 符号语言C. 汇编语言 D. 机器语言 (13) 完整的计算机系统是由()组成的。 A. 主机与外设B. CPU与存储器 C. ALU与控制器D. 硬件系统与软件系统 (14) 计算机内进行加、减法运算时常采用()。 A. ASCII码B. 原码C. 反码D. 补码 (15) 下列字符中,ASCII码值最小的是()。 A. aB. AC. xD. Y (16) 下列字符中,ASCII码值最大的是()。 A. DB. 9C. aD. y (17) 目前制造计算机所采用的电子器件是()。 A. 中规模集成电路B. 超大规模集成电路 C. 超导材料D. 晶体管 (18) 计算机中的CPU指的是()。 A. 控制器B. 运算器和控制器 C. 运算器、控制器和主存D. 运算器 (19) 计算机发展阶段的划分通常是按计算机所采用的()。 A. 内存容量B. 电子器件 C. 程序设计语言D. 操作系统 (20) 计算机系统总线中,可用于传送读、写信号的是()。 A. 地址总线B. 数据总线 C. 控制总线D. 以上都不对 (21) 通常所说的“裸机”指的是()。 A. 只装备有操作系统的计算机B. 不带输入输出设备的计算机 C. 未装备任何软件的计算机D. 计算机主机暴露在外 (22) 计算机的字长是指()。 A. 32位长的数据 B. CPU数据总线的宽度 C. 计算机内部一次并行处理的二进制数码的位数 D. CPU地址总线的宽度 (23) 计算机运算速度的单位是MIPS,其含义是()。 A. 每秒处理百万个字符B. 每分钟处理百万个字符 C. 每秒执行百万条指令D. 每分钟执行百万条指令 (24) 从键盘输入1999时,实际运行的ASCII码是()。 A. 41H49H47H46HB. 51H59H57H56H C. 61H69H67H66HD. 31H39H39H39H 2. 填空题。 (1) 计算机中的软件分为两大类: 软件和软件。 (2) 部件间进行信息传送的通路称为。 (3) 为判断溢出,可采用双符号位补码,此时正数的符号用表示,负数的符号用表示。 (4) 8位二进制补码所能表示的十进制整数范围是。 (5) 用16位二进制数表示的无符号定点整数,所能表示的范围是。 (6) 若[X]补=00110011B,[Y]补=11001100B,[X-Y]补= B。 (7) 十进制数255用ASCII码表示为,用压缩BCD码表示为,其十六进制数表示为。 (8) 总线是连接计算机各部件的一组公共信号线,它是计算机中传送信息的公共通道,总线由、和控制总线组成。 (9) 数据总线用来在与内存储器(或I/O设备)之间交换信息。 (10) 在微机的三组总线中,总线是双向的。 (11) 地址总线由发出,用来确定CPU要访问的内存单元(或I/O端口)的地址。 (12) 以微处理器为基础,配上和输入输出接口等,就成了微型计算机。 3. 将下列十进制数分别转换为二进制数、十六进制数。 (1) 124.625(2) 635.05(3) 301.6875(4) 3910 4. 将二进制数1101.101B、十六进制数2AE.4H、八进制数4 2.57Q转换为十进制数。 5. 用8位二进制数表示出下列十进制数的原码、反码和补码。 (1) +127(2) -127(3) +66(4) -66 6. 设机器字长为16位,用定点补码表示,尾数为15位,数符为1位,问: (1) 定点整数的范围是多少? (2) 定点小数的范围是多少? 7. 请写出下列字母、符号、控制符或字符串的ASCII码。 (1)B(2)h(3)SP(空格)(4)5(5)$(6)CR(回车)(7)LF(换行) (8) *(9)Hello 8. 什么是微处理器、微型计算机、微型计算机系统? 9. 简述数据总线和地址总线的特点。 10. 衡量微机系统的主要性能指标有哪些? 1.216位和32位微处理器 1.2.1例题 1. 简述8086总线分时复用的特点。 解: 为了减少引脚信号线的数目,8086微处理器有21条引脚是分时复用的双重总线,即AD15~AD0,A19/S6~A16/S3及BHE/S7。这21条信号线在每个总线周期开始(T1)时,用来输出所寻址访问的内存或I/O端口的地址信号A19~A0及“高8位数据允许”信号BHE; 而在其余时间(T2~T4)用来传输8086同内存或I/O端口之间所传送的数据D15~D0及输出8086的有关状态信息S7~S3。 2. 何为时钟周期?它和指令周期、总线周期三者之间的关系是什么? 解: (1) 时钟脉冲的重复周期称为时钟周期。时钟周期是CPU的时间基准,由CPU的主频决定。 (2) 指令周期是执行一条指令所需要的时间,包括取指令、译码和执行指令的时间。指令周期由一个或多个总线周期组成,不同指令的指令周期所包含的总线周期个数是不同的,它与指令的性质与寻址方式有关。 (3) 一个总线周期至少由4个时钟周期组成,分别表示为T1、T2、T3、T4。 3. 8086有哪两种工作方式?主要区别是什么? 解: 微处理器有两种工作方式,即最小方式和最大方式。 (1) 系统中只有一个CPU,对存储器和I/O接口的控制信号由CPU直接产生的单处理机方式称为最小方式,此时MN/MX接高电平。 (2) 对存储器和I/O接口的控制信号由8288总线控制器提供的多处理机方式称为最大方式,此时MN/MX接低电平,在此方式下可以接入8087或8089。 4. 有一个16个字的数据区,它的起始地址为70A0H:0DDF6H,如图1.1所示。请写出这个数据区首、末字单元的物理地址。 图1.1存储器单元分布 解: 首地址=70A00H+0DDF6H=7E7F6H 末地址=7E7F6H+16×2-2=7E7F6H+20H-2H=7E814H 5. 根据8086存储器读写时序图(见图1.2和图1.3),回答如下问题。 图1.2存储器读周期时序图 图1.3存储器写周期时序图 (1) 地址信号在哪段时间内有效? (2) 读操作和写操作有何区别? (3) 存储器读写时序与I/O读写时序有何区别? (4) 什么情况下需要插入等待周期TW? 解: (1) 在T1周期,双重总线AD15~AD0、A19/S6~A16/S3上输出要访问的内存单元的地址信号A19~A0。 (2) 读操作和写操作的主要区别如下。 ① DT/R控制信号在读周期中为低电平,在写周期中为高电平。 ② 在读周期中,RD控制信号在T2~T3周期为低电平(有效电平); 在写周期中,WR控制信号为低电平(有效电平)。 ③ 在读周期中,数据信息一般出现在T2周期以后。在T2周期,AD15~AD0进入高阻态,此时,内部引脚逻辑发生转向,由输出变为输入,以便为读入数据做准备。而在写周期中,数据信息在双重总线上是紧跟在地址总线有效之后立即由CPU送上的,两者之间无高阻态。 (3) 存储器操作同I/O操作的区别如下: 在存储器周期中,控制信号M/IO始终为高电平; 而在I/O周期中,M/IO始终为低电平。 (4) CPU在每个总线周期的T3状态开始采样READY信号,若为低电平,则表示被访问的存储器或I/O设备的数据还未准备好,此时应在T3状态之后插入一个或几个TW 周期,直到READY变为高电平,才进入T4状态,完成数据传送,从而结束当前总线周期。 1.2.2习题 1. 选择题。 (1) 在8086/8088的总线周期中,ALE信号在T1期间有效。它是一个()。 A. 负脉冲,用于锁存地址信息 B. 负脉冲,用于锁存数据信息 C. 正脉冲,用于锁存地址信息 D. 正脉冲,用于锁存数据信息 (2) 8086/8088的最大模式和最小模式相比至少需增设()。 A. 数据驱动器B. 中断控制器 C. 总线控制器D. 地址锁存器 (3) 在8086 CPU中,不属于总线接口部件的是()。 A. 20位的地址加法器B. 指令队列 C. 段地址寄存器D. 通用寄存器 (4) 在8088系统中,只需1片8286就可以构成数据总线收发器,而8086系统中构成数据总线收发器的8286芯片的数量为()。 A. 1B. 2 C. 3D. 4 (5) CPU内部的中断允许标志位IF的作用是()。 A. 禁止CPU响应可屏蔽中断B. 禁止中断源向CPU发中断请求 C. 禁止CPU响应DMA操作D. 禁止CPU响应非屏蔽中断 (6) 在8086的存储器写总线周期中,微处理器给出的控制信号(最小模式下)WR、RD、M/IO分别是()。 A. 1、0、1B. 0、1、0C. 0、1、1D. 1、0、0 (7) 当8086 CPU从总线上撤销地址,而使总线的低16位置成高阻态时,其最高4位用来输出总线周期的()。 A. 数据信息B. 控制信息C. 状态信息D. 地址信息 (8) 8086 CPU在进行I/O写操作时,M/IO和DT/R必须是()。 A. 0、0B. 0、1C. 1、0D. 1、1 (9) 若在一个总线周期中,CPU对READY信号进行了5次采样,那么该总线周期共包含时钟周期的数目为()。 A. 5B. 6C. 7D. 8 (10) 8086系统复位后,下面的叙述错误的是()。 A. 系统从FFFF0H处开始执行程序 B. 系统此时能响应INTR引入的中断 C. 系统此时能响应NMI引入的中断 D. DS中的值为0000H (11) CPU访问内存时,RD信号开始有效对应的状态是()。 A. T1B. T2C. T3D. T4 (12) 下列说法中属于最小工作模式特点的是()。 A. CPU提供全部的控制信号B. 由编程进行模式设定 C. 不需要8286收发器D. 需要总线控制器8288 (13) 8088 CPU的指令队列缓冲器由()组成。 A. 1字节移位寄存器B. 4字节移位寄存器 C. 6字节移位寄存器D. 8字节移位寄存器 (14) 在8086/8088 CPU中,与DMA操作有关的控制线是()。 A. NMIB. HOLDC. INTRD. INTA (15) 8086 CPU中,不属于EU部分的寄存器是()。 A. IPB. BPC. DID. SP 2. 填空题。 (1) 8086/8088微处理器被设计为两个独立的功能部件: 和。 (2) 当8086进行堆栈操作时,CPU会选择段寄存器来形成20位堆栈地址。 (3) 8086 CPU时钟频率为5MHz时,它的典型总线周期为ns。 (4) 8086 CPU的最大方式和最小方式是由引脚信号的状态决定的。 (5) 当Intel 8086工作在最大方式时,需要芯片提供控制信号。 (6) 若8086系统用8位的74LS373来作为地址锁存器,那么需要片这样的芯片。 (7) 根据功能不同,8086的标志位寄存器可分为标志和标志。 (8) 8086/8088 CPU中与中断操作有关的控制标志位是,与串操作有关的控制标志位是,与单步操作有关的控制标志位是。 (9) 8086 CPU在执行指令过程中,当指令队列已满,且EU对BIU又没有总线访问请求时,BIU进入状态。 (10) 复位后,8086将从地址开始执行指令。 (11) 8086/8088 CPU的A19/S6~A16/S3在总线周期的T1期间,用来输出位地址信息中的位,而在其他时钟周期内,用来输出信息。 (12) 8086 CPU工作在最小模式下,控制数据流方向的信号是、、、、。 (13) 当8086/8088 CPU在进行写数据操作时,控制线RD、WR应分别输出电平、电平。 (14) 为了减轻总线负载,总线上的部件大都具有三态逻辑,三态逻辑电路输出信号的三个状态是、、。 3. 完成下列各式补码运算,并根据结果设置标志位SF、ZF、CF、OF。 (1) 96+(-19)(2) 90+107(3) (-33)+14(4) (-33)+(-14) 4. 写出下列存储器地址的段地址、偏移地址和物理地址。 (1) 2314H:0035H(2) 1FD0H:000AH 5. 在8086系统中,下一条指令所在单元的物理地址是如何计算的? 6. 若某存储器容量为2KB,在计算机存储系统中,其起始地址为2000H:3000H,请计算出该存储器物理地址的范围。 7. 8086的复位信号是什么?有效电平是什么?CPU复位后,寄存器和指令队列处于什么状态? 8. 8086 CPU标志寄存器中的控制位有几个?简述它们的含义。 9. 设8088的时钟频率为5MHz,总线周期中包含2个TW等待周期。问: (1) 该总线周期是多少? (2) 该总线周期内对READY信号检测了多少次? 10. 8086 CPU与8088 CPU的主要区别有哪些? 11. 8086/8088 CPU由哪两部分构成?它们的主要功能是什么? 12. 8086 CPU系统中为什么要用地址锁存器? 13. 8086/8088 CPU处理非屏蔽中断NMI和可屏蔽中断INTR有何不同? 14. 简述8086/8088 CPU中指令队列的功能和工作原理。 15. 简述8086/8088 CPU中DEN、DT/R控制线的作用。 16. 说明空闲状态的含义。 17. 简述时钟发生器8284的功能。 18. 简要说明8086、80286、80386 CPU的主要区别。 1.316位/32位微处理器指令系统 1.3.1例题 1. 指出下列指令中源操作数的寻址方式。 (1) MOVAX, 002FH (2) MOVBX, [SI] (3) MOVCX, [BX+SI+2] (4) MOVDX, DS:[1000H] (5) MOVSI, BX (6) MOVSI, [BX+8] 解: (1) 立即寻址 (2) 寄存器间接寻址 (3) 基址变址寻址 (4) 直接寻址 (5) 寄存器寻址 (6) 基址寻址 2. 若寄存器AX、BX、CX、DX的内容分别为18、19、20、21时,依次执行PUSH AX,PUSH BX,POP CX,POP DX后,寄存器CX、DX的内容为多少? 解: 执行PUSH AX指令后,将18压入堆栈,(SP)-2→SP; 执行PUSH BX指令后,将19压入堆栈,(SP)-2→SP; 执行POP CX指令后,将19从堆栈中弹出,放入CX,(SP)+2→SP; 执行POP DX指令后,将18从堆栈中弹出,放入DX,(SP)+2→SP; 故上述四条指令执行后,(CX)=19, (DX)=20。 3. 指出下列指令的错误所在。 (1) MOVAL, SI (2) MOVBL, [SI][DI] (3) XCHGCL, 100 (4) PUSHAL (5) INAL, 256 (6) MOVBUF, [SI] (7) SHLAL, 2 (8) MOVDS, 2000H (9) MUL100 (10) MOVAL, BYTE PTR SI (11) MOVES, DS (12) MOVCS,AX 解: (1) AL、SI的数据类型不匹配; (2) 不允许同时使用变址寄存器SI、DI,正确的基址变址寻址方式中应运用一基址、一变址寄存器; (3) 只能在寄存器与存储器单元或寄存器之间交换数据; (4) 只能向堆栈中压入字类型数据; (5) I/O端口地址若超过8位,应该由DX寄存器提供; (6) 两操作数不能同时为存储器操作数; (7) 移位次数大于1,应该由CL寄存器提供; (8) 立即数不能直接送给段寄存器; (9) 乘法指令的操作数不能是立即数; (10) PTR算符不能运用于寄存器寻址方式; (11) 两个段寄存器之间不能相互传送数据; (12) 立即数、CS和IP不能作为目的操作数。 4. 执行下列指令序列后,AX和CF中的值是多少? STC MOVCX, 0403H MOV AX, 0A433H SARAX, CL XCHGCH, CL SHLAX, CL 解: STC; CF=1 MOVCX, 0403H;(CX)=0403H MOV AX, 0A433H ;(AX)=0A433H SARAX, CL ;算术右移3位,(AX)=0F486H XCHGCH, CL ;互换CH、CL中内容,(CX)=0304H SHLAX, CL ;逻辑左移4位,(AX)=4860H,CF=1 所以,(AX)=4860H,CF=1。 5. 设计指令序列,完成下列功能。 (1) 写出将AL的最高位置1,最低位取反,其他位保持不变的指令段。 (2) 写出将AL中的高4位和低4位数据互换的指令段。 (3) 检测AL中的最高位是否为1,若为1,则转移到标号NEXT处,否则顺序执行。请用两条指令完成。 (4) 写出将立即数06H送到端口地址为3F00H的端口的指令序列。 解: (1) ORAL, 80H XOR AL, 01H (2) MOV CL, 4 RORAL, CL (3) TEST AL, 80H JNZNEXT (4) MOV AL, 06H MOV DX, 3F00H OUT DX, AL 1.3.2习题 1. 选择题。 (1) 标志寄存器中属于控制标志位的是()。 A. DF、OF、SFB. DF、IF、TF C. OF、CF、PFD. AF、OF、SF (2) 已知某操作数的物理地址是2117AH,则它的段地址和偏移地址可能是()。 A. 2108H:00EAHB. 2100H:117AH C. 2025H:0F2AHD. 2000H:017AH (3) 8086在基址变址的寻址方式中,基址、变址寄存器分别是()。 A. AX或CX、BX或CXB. BX或BP、SI或DI C. SI或BX、DX或DID. CX或DI、CX或SI (4) 下列指令中,正确的是()。 A. MOV CS,BXB. MOVAX,TAB2TAB1+100 C. OUTCX,ALD. INC[SI] (5) 下列指令执行后有可能影响CS值的指令数目是()。 JMP、MOV、 RET、 ADD、INT JC、 LODS、CALL、MUL、POP A. 3B. 4C. 5D. 6 (6) 设(SS)=338AH,(SP)=0450H,执行PUSH BX和PUSHF两条指令后,堆栈顶部的物理地址是()。 A. 33CECH B. 33CF2HC. 33CF4HD. 33CE8H (7) 若(AX)=-15,要得到(AX) =15应执行的指令是()。 A. NEGAX B. NOTAXC. INCAXD. DECAX (8) 若(SP)=0124H,(SS)=3300H,在执行RET 4这条指令后,栈顶的物理地址可能为()。 A. 33120HB. 3311EHC. 33128HD. 3312AH (9) 已知程序序列为: ADDAL,BL JNOL1 JNCL2 若AL和BL的内容有以下4组给定值,使该指令序列转向L2执行的给定值是()。 A. (AL) =0B6H、(BL)= 87HB. (AL)= 05H、 (BL) = 0F8H C. (AL) = 68H、 (BL)= 74HD. (AL) = 81H、 (BL) = 0A2H (10) 以下3条指令执行后,(DX)=()。 MOVDX,0 MOVAX,0FFABH CWD A. 0FFABHB. 0C. 0FFFFHD. 无法确定 (11) 设(AX)=0C544H,在执行指令ADD AH,AL后,相应的状态为()。 A. CF=0、OF=0B. CF=0、OF=1 C. CF=1、OF=0D. CF=1、OF=1 (12) 不能将累加器AX 内容清0的指令是()。 A. AND AX, 0B. XORAX, AX C. SUBAX, AXD. CMPAX, AX (13) 将变量BUF的偏移地址送入SI的正确指令是()。 A. MOV[SI] , BUFB. MOVSI, BUF C. LEASI, BUFD. MOVOFFSET BUF, SI (14) INC指令不影响()标志。 A. OFB. CFC. ZFD. SF (15) 下列判断累加器AX内容是否为全0的4种方法中,正确的有()种。 ① SUBAX, 0② XORAX, 0 JZL1JZL1 ③ ORAX, AX④ TESTAX, 0FFFFH JZL1JZL1 A. 1B. 2C. 3D. 4 (16) 设AL中已有压缩型BCD码,为实现对AL的减1操作,可选用的指令序列是()。 A. DECALB. SBBAL, 0 AASDAS C. SUBAL, 1D. SUBAL, 1 AASDAS (17) 已知AX、BX中均为带符号数,当进行字相除时,下面指令或指令序列正确的是()。 A. DIVBXB. CWD IDIVBX C. XORDX, DXD. CBW DIVBXIDIVBX (18) 条件转移指令JNBE产生转移的条件是()。 A. CF=0ANDZF=0B. CF=0 AND ZF=1 C. CF=1ANDZF=0D. CF=1 AND ZF=1 (19) 设(BX)=0002H,(DI)=10A5H,(DS)=1100H,(BP)=0100H,(CS)=2100H,下列指令中包含的物理转移地址是()。 LABDW0600H,0640H,06A0H,06C0H JMPLAB[BX] A. 116A0HB. 11640HC. 21640HD. 216A0H (20) 在下列指令中,隐含使用AL寄存器的指令有()条。 AAAMOVSBMULBH CBWSCASBXLAT A. 2B. 3C. 4D. 5 (21) 已知(SS)=1000H,(SP) = 2000H,(BX) = 283FH,指令CALLWORDPTR[BX]的机器代码是0FF17H,该指令的起始地址为1000H,试问执行该指令后,内存单元11FFEH中的内容是()。 A. 28HB. 3FHC. 00HD. 02H (22) 设AL中的值为84H,CF=1,执行 RCRAL,1指令后,AL中的值和CF分别为()。 A. 0C2H、1B. 42H、1C. 0C2H、0D. 42H、0 (23) 能够将CF置1的指令是()。 A. CLCB. CMCC. NOPD. STC (24) 执行下列3条指令后,AX寄存器中的内容是()。 MOVAX,'8' ADDAL,'9' AAA A. 0071HB. 0107HC. 0017HD. 0077H (25) 下列指令执行后,能影响标志位的指令是()。 A. LOOPNZNEXTB. JNZNEXT C. MOV AX,2400HD. INT21H (26) 若(DX)=1234H,(IP) =5678H,执行JMP DX指令后,寄存器变化正确的是()。 A. (DX)=1234H、(IP)=5678HB. (DX)=1234H、(IP) =1234H C. (DX)=5678H、(IP)=5678HD. (DX)=5678H、(IP)=1234H (27) 对于下列程序段: AGAIN:MOVES:[DI],AL INCDI LOOPAGAIN 在下列指令中,可完成与上述程序段相同功能的指令是()。 A. REPMOVSBB. REPSTOSB C. REPLODSBD. REPSCASB 2. 填空题。 (1) 与指令MOVBX,OFFSETDATA等效的指令是。 (2) 对寄存器BX的内容求补的正确指令是。 (3) 使AL中的操作数0、1位变反,其他位不变的指令是。 (4) 设(SP)=0100H,(AX)=2107H,执行指令 PUSH AX后,存放数据21H的偏移地址是。 (5) 设(SP)=0100H,(SS)=2100H,执行指令 POP AX后,堆栈栈顶的物理地址是。 (6) 设(CS)=3100H,(DS)=40FFH,并且两段空间均为64K个单元,那么这两段的重叠区域为个单元。 (7) 若物理地址为2D8C0H,偏移量为0B6A0H,则段地址为。 (8) 执行下列指令后,(AL)= ,(BL)= 。 MOVAL,BL NOT AL XOR AL,BL ORBL,AL (9) 执行下列指令后,寄存器AH的值是,寄存器AL的值是,寄存器DX的值是。 MOVAX,1234H MOVCL,4 ROL AX,CL DEC AX MOVCX,4 MULCX HLT (10) 已知(AX)=0FFFFH,(DX)=0001H,下列程序执行后,(DX)=, (AX)=。 MOVCX,2 LOP: SHL AX,1 RCL DX,1 LOOPLOP (11) 填写执行下列程序段后的结果。 MOVDX,8F70H MOVAX,54EAH ORAX,DX ANDAX,DX NOTAX XORAX,DX TESTAX,DX (AX)=、 (DX)=、SF=、 OF=、 CF=、 PF=、ZF=。 (12) 执行下列程序段后,AX的内容为。 DAT1DW 12H,23H,34H,46H,57H DAT2DW 03H LEA BX,DAT1 ADDBX,DAT2 MOVDX,[BX] MOVAX,4[BX] SUB AX,DX 3. 设(DS)=2000H,(SS)=1500H,(ES)=3000H,(SI)=00B0H,(BX)=1000H,(BP)=0020H,指出下列指令的源操作数的寻址方式。若该操作数为存储器操作数,请计算其物理地址。 (1) MOVAX,DS:[0100H] (2) MOVBX,0100H (3) MOVAX,ES:[SI] (4) MOVCL,[BP] (5) MOVAX,[BX][SI] (6) MOVCX,BX (7) MOVAL,3[BX][SI] (8) MOVAL,[BX+20] 4. 段地址和偏移地址为3017:000AH的存储单元的物理地址是什么?如果该存储单元位于当前数据段,写出将该单元内容放入AL中的指令。 5. 判别下列指令的对错,如有错误,请指出其错误所在。 (1) MOVAX,BL (2) MOVAL,[SI] (3) MOVAX,[SI] (4) PUSHCL (5) MOVDS,3000H (6) SUB3[SI][DI],BX (7) DIV10 (8) MOVAL,ABH (9) MOVBX,OFFSET [SI] (10) POPCS (11) MOVAX,[CX] (12) MOV[SI],ES:[DI+8] (13) IN255H,AL (14) ROLDX,4 (15) MOVBYTEPTR [DI],1000 (16) OUTBX,AL (17) MOVSP,SS:DATA_WORD[BX][SI] (18) LEADS,35[DI] (19) MOVES,DS (20) PUSHF 6. 设(DS)=1000H,(AX)=050AH,(BX)=2A80H,(CX)=3142H,(SI)=0050H,(10050H)=3BH,(10051H)=86H,(11200H)=7AH,(11201H)=64H,(12AD0H)=0A3H,(12AD1H)=0B5H。试分析下列指令分别执行后AX中的内容。 (1) MOVAX,1200H (2) MOVAX,DS:[1200H] (3) MOVAX,[SI] (4) ORAX,[BX][SI] (5) MOVAX,50H[BX] 7. 设某用户程序(SS)=0925H,(SP)=30H,(AX)=1234H,(DS)=5678H,如有两条进栈指令: PUSHAX PUSHDS 试列出两条指令执行后,堆栈中各单元变化情况,并给出堆栈指针SP的值。 8. 设(AL)=2FH,(BL)=97H,试写出下列指令分别执行后CF、SF、ZF、OF、AF和PF的内容。 (1) ADDAL,BL (2) SUBAL,BL (3) ANDAL,BL (4) ORAL,BL (5) XORAL,BL 9. 执行下列程序段后,AX和CF中的值是多少? STC MOVCX,0403H MOV AX,0A433H SARAX,CL XCHGCH,CL SHLAX,CL 10. 设(AX)=0119H,试分析执行下列程序段后,AX和CF的内容分别是什么? MOVCH,AH ADD AL,AH DAA XCHGAL,AH ADC AL,34H DAA XCHGAH,AL HLT 11. 分析下面的程序段,执行后AX和IP的内容是什么? MOVBX,16 MOVAX,0FFFFH MULBX JMPDX 12. 下列程序段运行后,HCOD和HCOD+1两字节单元内容是什么? HEXDB'0123456789ABCDEF' HCODDB?,? ︙ MOVBX,OFFSET HEX MOVAL,1AH MOVAH,AL ANDAL,0FH XLAT MOVHCOD[1],AL MOVCL,12 SHR AX,CL XLAT MOVHCOD,AL 13. 下列程序运行后,Z单元的内容是什么?简要说明程序的功能(设X、Y单元的内容分别为90H、0B0H)。 MOVAX,0 MOVAL,X ADDAL,Y ADCAH,0 MOVBL,2 DIVBL MOVZ,AL 14. 分析下面程序段, 程序运行后AL、BL中的内容分别是什么? MOVAL,200 SHRAL,1 MOVBL,AL MOVCL,2 SHR AL,CL ADDAL,BL 15. 分析下面程序段, 程序运行后AL、CF中的内容分别是什么? MOVAH,0 MOVAL,01H MOVBL,4 NEGAL DIVBL MOVCL,02H RCLAL,CL 16. 下列程序段执行后,CL内容分别是什么? CF是1还是0? MOVAL,1 MOVBL,AL MOVCL,AL NEGAL ADCCL,BL 17. 下列程序执行到NEXT时,CX和ZF的内容分别是什么? STR1DB 'COMPUTERNDPASCAL' SCA DB 'N' ︙ LEADI,STR1 MOVAL,SCA MOVCX,10H CLD REPNE SCASB NEXT: … 18. 已知DS和ES指向同一个段,且当前数据段从0000H到00FFH单元内容分别为01H,02H,03H,…,0FFH,00H。下列程序段执行后,0000~0009H的内容是什么? MOVSI,0000H MOVDI,0001H MOVCX,0080H CLD REPMOVSBV 19. 执行下列程序段后,SP及CF的值分别是多少? MOVSP,6000H PUSHF POP AX ORAL,01H PUSHAX POPF 20. 填入适当指令,使程序段能实现将AL中低位十六进制数转换为ASCII码。 ANDAL,0FH ADDAL,30H CMPAL,3AH JLLP2 LP2: … 1.4汇编语言程序设计 1.4.1例题 1. 设有一数据段DSEG,其中连续定义下列5个变量或常量,用段定义语句和数据定义语句写出数据段: (1) DATA1为一个字符串变量: 'WELCOME TO MASM!'。 (2) DATA2为十进制字节变量: 32,90,-20。 (3) DATA3为连续10个00H的字节变量。 (4) DATA4为双字变量,其初始值为12345678H。 (5) COUNT为一符号常量,其值为以上4个变量所用字节数。 解: 定义数据段如下。 DSEGSEGMENT DATA1DB'WELCOME TO MASM!' DATA2 DB32,90,-20 DATA3 DB10 DUP (00H) DATA4 DD12345678H COUNTEQU$-DATA1 DSEG ENDS 其中,$DATA1中$表示当前汇编地址计数器值,用其减去DATA1的偏移地址可得该数据段所用字节数。 2. 设有以下数据段定义: DSEGSEGMENT X1EQU30H X2EQU70H X3EQU0F7H DSEG ENDS 下列指令执行后,AL中的内容分别是多少? (1) MOVAL,X1+X2 (2) MOVAL,X2MOD X1 (3) MOVAL,X1EQX3 (4) MOVAL,X1ANDX3 (5) MOVAL,X1ORX3 (6) MOVAL,X2GTX1 解: (1) (AL)= 30H+70H = 0A0H (2) (AL)= 70H MOD 30H = 10H (3) X1 EQ X3 = 30H EQ 70H为逻辑运算,其值为假,故(AL)=00H (4) (AL) = X1 AND X3 = 30H AND 0F7H = 30H (5) (AL)= X1 OR X3 = 30H OR 0F7H = 0F7H (6) X2 GT X1 = 70H GT 30H为逻辑运算,其值为真,故(AL)=0FFH 3. 分析下列程序段,回答所提问题。 DA1DW1F28H DA2DB? ... XORBL,BL MOVAX,DA1 LOP: ANDAX,AX JZEXIT SHLAX,1 JNCLOP INCBL JMPLOP EXIT: MOV DA2,BL 试问: (1) 程序段执行后,DA2字节单元内容是什么? (2) 在程序段功能不变的情况下,是否可用SHR指令代替SHL指令? 解: XORBL,BL;(BL)=0 MOV AX,DA1 ;(AX)= 1F28H LOP: AND AX,AX;使标志位根据AX中内容而变化 JZ EXIT ;若(AX)=0,则转EXIT SHL AX,1;逻辑左移1位,移出位进入CF JNC LOP INC BL;若CF=1,则BL加1 JMP LOP EXIT: MOVDA2,BL (1) 如上分析,该程序段被用来统计DA1中内容含二进制1的个数。DA2字节单元内容为DA1中内容含二进制1的个数,也即(DA2)=7。 (2) 无论逻辑左移还是逻辑右移指令,均能将DA1中的二进制数位一位一位地移到CF中,其程序段功能不变,故可用SHR指令代替SHL指令。 4. 分析下列程序段,回答所提问题。 DA1DB87H DA2DB? ︙ XOR AH,AH MOV AL,DA1 MOV CL,4 ︙ SHRAL,CL MOV DL,10 MUL DL MOV BL,DA1 AND BL,0FH ADD AL,BL MOV DA2,AL 试问: