微机基础原理课后习题集解答.doc
-/微机原理习题第一章 绪论习题与答案1. 把下列二进制数转换成十进制数、十六进制数及BCD码形式。(1) 10110010B =(2) 01011101.101B =解:(1) 10110010B = 178D = B2H = (0001 0111 1000)BCD(2) 01011101.101B = 93.625D = 5D.AH= (1001 0011.0110 0010 0101)BCD2. 把下列十进制数转换成二进制数。(1) 100D =(2) 1000D =(3) 67.21D =解:(1) 100D = 01100100B(2) 1000D = 1111101000B(3) 67.21D = 1000011.0011B3. 把下列十六进制数转换成十进制数、二进制数。(1) 2B5H =(2) 4CD.A5H =解: (1) 2B5H = 693D = 0010 1011 0101B (2) 4CD.A5H = 1229.6445D = 0100 1100 1101.1010 0101 B4. 计算下列各式。(1) A7H+B8H =(2) E4H-A6H =解:(1) A7H+B8H = 15FH(2) E4H-A6H = 3EH5. 写出下列十进制数的原码、反码和补码。(1) +89(2) -37解:(1) +89 原码、反码和补码为: 01011001B(2) -37 原码 = 10100101 B -37 反码 = 11011010 B-37 补码 = 11011011 B6求下列用二进制补码表示的十进制数 (1)(01001101)补 = (2)(10110101)补 =解: (1)(01001101)补 = 77D (2)(10110101)补 = -75D 7请用8位二进制数写出下列字符带奇校验的ASCII码。 (1)C: 1000011 (2)O: 1001111 (3)M: 1001101 (4)P: 1010000解: (1)C:0 1000011 (2)O: 0 1001111 (3)M:1 1001101 (4)P: 1 10100008请用8位二进制数写出下列字符带偶校验的ASCII码。 (1)+:0101011 (2)=: 0111101 (3)#:0100011 (4): 0111110解: (1)+:0 0101011 (2)=: 1 0111101 (3)#:1 0100011 (4): 1 01111109叙述 CPU 中PC的作用。解:PC是CPU中的程序计数器,其作用是提供要执行指令的地址。 第二章 微处理器体系与结构习题与答案1. 80868088 CPU 由哪两大部分组成?请分别叙述它们的功能。解:8086/8088 CPU均由两个独立的逻辑单元组成,一个称为总线接口单元BIU(Bus Interface Unit),另一个称为执行单元EU(Execution Unit)。总线接口单元BIU取指令时,从存储器指定地址取出指令送入指令队列排队;执行指令时,根据EU命令对指定存储器单元或I/O端口存取数据。执行单元EU任务是执行指令,进行全部算术逻辑运算、完全偏移地址的计算,向总线接口单元BIU提供指令执行结果的数据和偏移地址,并对通用寄存器和标志寄存器进行管理。2. 80868088与传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点?解:总线接口部分和执行部分是分开的,每当EU执行一条指令时,造成指令队列空出2个或空出一个指令字节时 ,BIU马上从内存中取出下面一条或几条指令,以添满他的指令队列。这样,一般情况下,CPU在执行完一条指令后,便可马上执行下一条指令,不像以往8位CPU那样,执行完一条指令后,需等待下一条指令。即EU从指令队列中取指令、执行指令和BIU补充指令队列的工作是同时进行的。这样大大提高了CPU利用率,降低了系统都对存储器速度的要求。 3. 状态标志和控制标志有何不同?80868088的状态标志和控制标志分别有哪些?解:8086/8088 CPU设立了一个两字节的标志寄存器,共九个标志。其中标志位O、S、Z、A、P、C是反映前一次涉及ALU操作结果的状态标志,D、I、T是控制CPU操作特征的控制标志。4. 80868088 CPU寻址存储器时,什么是物理地址?逻辑地址?它们之间有何关系?解:8086/8088系统中每个存储单元都有一个物理地址,物理地址就是存储单元的实际地址编码。在CPU与存贮器之间进行任何信息交换时,需利用物理地址来查找所需要的访问的存储单元。逻辑地址由段地址和偏移地址两部分组成。逻辑地址的表示格式为:段地址:偏移地址。知道了逻辑地址,可以求出它对应的物理地址:物理地址=段地址10H+偏移地址。5. 段寄存器CS1200H,指令指针寄存器IPFF00H,此时,指令的物理地址为多少?指向这一物理地址的CS值和IP值是唯一的吗?解:根据:物理地址=段地址10H+偏移地址,指令的物理地址为21F00H。指向这一物理地址的CS值和IP值不唯一。6. 8086 CPU中 信号和A0信号是通过怎样的组合解决存储器和外设端口的读写的?这种组合决定了8086系统中存储器偶地址体及奇地址体之间应该用什么信号区分?怎样区分?解:若存取一个字节的数据,总是用一个总线周期来完成该操作;若存取一个字,则依该字是规则字还是不规则字需用一个或两个总线周期来完成。对规则字,只用一个总线周期来完成16位数据的传送,而对于非规则字则用相邻两个总线周期来完成该字的存储操作,先取其奇地址字节(即数据的低位字节),然后存取偶地址字节。在组成存储系统时,总是偶地址单元的数据通过AD0AD7传送,而奇地址单元的数据通过AD8AD15传送,即通过总线高字节传送。 信号和A0信号控制存储器读写见下表:操作A0 使用的数据总线存取规则字 00AD15AD0传送偶地址的一个字节10AD7AD0传送奇地址的一个字节01AD15AD8存取非规则字 01AD15AD8(第一个总线周期)10AD7AD0(第二个总线周期)11为非法码7什么叫总线?为什么各种微型计算机系统中普遍采用总线结构?答:总线是模块与模块之间传送信息的一组公用信号线。总线标准的建立使得各种符合标准的模块可以很方便地挂在总线上,使系统扩展和升级变得高效、简单、易行。因此微型计算机系统中普遍采用总线结构。8微型计算机系统总线从功能上分为哪三类?它们各自的功能是什么?答:微型计算机系统总线从功能上分为地址总线、数据总线和控制总线三类。地址总线用于指出数据的来源或去向,单向;数据总线提供了模块间数据传输的路径,双向;控制总线用来传送各种控制信号或状态信息以便更好协调各功能部件的工作。98086/8088 CPU 分为哪两个部分?如何协调工作?答:EU是执行部件,主要的功能是执行指令和形成有效地址。BIU是总线接口部件,与片外存储器及I/O接口电路传输数据,主要功能是形成实际地址、预取指令和存取操作数。EU经过BIU进行片外操作数的访问,BIU为EU提供将要执行的指令。EU与BIU可分别独立工作,当EU不需BIU提供服务时,BIU可进行填充指令队列的操作。108086/8088 CPU的地址总线有多少位?其寻址范围是多少?答:8086/8088 CPU的地址总线共20 位,最大可寻址1MB空间。118086/8088 CPU使用的存储器为什么要分段?怎么分段?答:8086/8088为16位CPU,其内部的ALU、相关的地址寄存器(如SP、IP以及BX、BP、SI、DI)等都是16位的,因而对存储器地址的处理也只能是16位操作,即8086/8088的直接寻址能力在64KB范围内。而实际上8086/8088有20条地址线,它的最大寻址空间为1MB。这就产生了一个矛盾,即如何用16位的地址寄存器去表示一个20位的存储器物理地址?实际使用的解决办法是:将1MB大小的存储空间分为若干“段”,每段不超过64KB。这样,一个20位的物理地址就可以用“16位段基址:16位偏移量”的形式(称为逻辑地址)来表示了,其中段地址存放在8086/8088的段寄存器中。128086/8088 CPU 中有几个通用寄存器?有几个变址寄存器?有几个指针寄存器?通常哪几个寄存器亦可作为地址寄存器使用?答:8086/8088 CPU 中共有:8个16位的通用寄存器AX、BX、CX、DX 、BP、SP、SI、DI;2个变址寄存器SI、DI;2个指针寄存器BP、SP;其中BX、BP、SI、DI 亦可作地址寄存器。13Intel 8086与8088有何区别?答:8086与8088的区别主要表现在以下几个方面:第一、8086的指令队列可以容纳6个字节,每个总线周期在存储器中取出2个字节指令代码填入队列。而8088只能容纳4个字节,且每个总线周期只能取出1个字节指令代码。第二、8086外部数据总线宽度为16位,8088外部数据总线宽度只有8位。注意:8086和8088外部数据总线的宽度不同将导致扩展主存储器及输入/输出接口时系统地址线和数据线连接方式的不同。第三、其他不同的引脚定义:(1)AD15AD0,在8086中为地址/数据复用,而在8088中AD15AD8 改为A15A8只作地址线用;(2)34、28号引脚定义不同。148086/8088CPU工作在最小模式时:当CPU访问存储器时,要利用哪些信号?当CPU访问外设接口时,要利用哪些信号?答:8086/8088 CPU工作在最小模式时,若访问存储器,需用到以下信号:、ALE、DEN、READY、AD0AD15、A19/S6A16/S3。若访问外设,需用到以下信号:、ALE、DEN、READY、AD0AD15。15试指出下列运算后的各个状态标志,并说明进位标志和溢出标志的区别:(1)1278H3469H答:CF=0 AF=1 ZF=0 SF=0 OF=0 PF=1(2)54E3H27A0H答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=0(3)3881H3597H答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=1(4)01E3H01E3H答:CF=0 AF=0 ZF=1 SF=0 OF=0 PF=1其中,进位标志CF 用于判别无符号数运算是否超出数的表示范围,而溢出标志OF 用于判别带符号数运算是否超出数的表示范围。奇偶标志PF 只能判断结果低8 位中“1”的个数为奇数还是偶数。16什么是逻辑地址?什么是物理地址?它们之间有什么联系?各用在何处?答:逻辑地址由两个16 位的部分即段基址和偏移量组成,一般在程序中出现的地址都表示为逻辑地址形式;物理地址是一个20 位的地址,它是唯一能代表存储空间每个字节单元的地址,一般只出现在地址总线上。由于8086/8088CPU 中的寄存器只有16 位长,所以程序不能直接存放20 位的物理地址,而必须借助逻辑地址,即用两个16 位的寄存器来表示物理地址。他们之间的关系是:物理地址段基址*16偏移量;另外,一个物理地址可对应多个逻辑地址。17设现行数据段位于存储器0B0000H0BFFFFH 单元,DS 段寄存器内容为多少?答: DS 段寄存器内容为0B000H。18在8086中,逻辑地址、偏移地址、物理地址分别指的是什么? 答:逻辑地址是在程序中对存储器地址的一种表示方法,由段基址和段内偏移地址两部分组成,都是16位的二进制代码,如1234H:0088H。偏移地址是指段内某个存储单元相对该段首地址的差值。物理地址是8086芯片引线送出的20位地址码,物理地址=段基址*16+偏移地址,用来指出一个特定的存储单元。19给定一个存放数据的内存单元的偏移地址是20C0H,(DS)=0C0E0H,求出该内存单元的物理地址。答:物理地址:0C2EC0H。208086/8088为什么采用地址/数据引线复用技术?答:考虑到芯片成本和体积,8086/8088采用40条引线的封装结构。40条引线引出8086/8088的所有信号是不够用的,采用地址/数据线复用引线方法可以解决这一矛盾,从逻辑角度,地址与数据信号不会同时出现,二者可以分时复用同一组引线。21怎样确定8086的最大或最小工作模式? 答:引线的逻辑状态决定8086的工作模式,引线接高电平,8086被设定为最小模式,引线接低电平,8086被设定为最大模式。228086基本总线周期是如何组成的?答:基本总线周期由4个时钟(CLK)周期组成,按时间顺序定义为T1、T2、T3、T4。23在基于8086的微计算机系统中,存储器是如何组织的?存储器是如何与处理器总线连接的?信号起什么作用?答:8086为16位微处理器,可访问1M字节的存储器空间;1M字节的存储器分为两个512K字节的存储体,分别命名为偶存储体和奇存储体;偶体的数据线连接D7D0,“体选”信号接地址线A0;奇体的数据线连接D15D8,“体选”信号接信号;A0信号有效时允许访问偶体中的低字节存储单元,信号有效时允许访问奇体中的高字节存储单元,实现8086的低字节访问、高字节访问及字访问。24有一个由20个字组成的数据区,其起始地址为610AH:1CE7H。试写出该数据区首末单元的实际地址PA。首单元地址:610A0H+1CE7H=62D87H末单元地址:62D87H27H=62DAEH25有两个16位的字31DAH、5E7FH,它们在8086系统存储器中的地址为00130H和00135H,试画出它们的存储器示意图。地址内容00130H0DAH00131H31H00132H00133H00134H00135H7F00136H5E26试说明8086CPU的控制引脚ALE的作用。答:8086的低位地址线与数据线复用,为保证地址线维持足够的时间,需使用ALE信号将低位地址线通过锁存器保存,以形成系统地址总线。第三章 80x86指令系统习题与答案1、指出下列指令中操作数的寻址方式(8086系统)。(1) MOV AX,100 (2) MOV AX,100(3) MOV DL,BP+SI (4) MOV BX,CX(5) MOV DX,SI (6) MOV 1234HBX,DS(7) MOV DI+5678H,AL (8) MOV 12BPDI,BH(9) POP CX (10)MOV AX,BX+SI+10解: 目的操作数源操作数(1) MOV AX,100寄存器寻址立即数寻址(2) MOV AX,100寄存器寻址直接寻址(3) MOV DL,BP+SI寄存器寻址基址变址寻址(4) MOV BX,CX寄存器间接寻址寄存器寻址(5) MOV DX,SI寄存器寻址寄存器间接寻址(6) MOV 1234HBX,DS寄存器相对寻址寄存器寻址(7) MOV DI+5678H,AL寄存器相对寻址寄存器寻址(8) MOV 12BPDI,BH相对基址变址寻址寄存器寻址(9) POP CX隐含为堆栈寄存器寻址(10)MOV AX,BX+SI+10寄存器寻址相对基址变址寻址2、指出下列指令中操作数的寻址方式(80386系统)。(1) MOV EBX+12H,AX (2) MOV EBP+EDI*2,EBX(3) MOV EBX*4,BX (4) MOV EDX,EAX+ESI*8-12H解:目的操作数源操作数(1)寄存器相对寻址 寄存器寻址 (2)基址比例变址寻址寄存器寻址(3)比例变址寻址 寄存器寻址(4)寄存器寻址相对基址比例变址寻址 3、指出以下指令中,哪些指令是非法的,并说明为什么(8086系统)。(1) PUSH 1234H (2) MOV CS,AX(3) IN AX, 300 (4) MOV AX,DX+12(5) MOV BX,BX (6) MOV DS,1000H(7) XCHG AL,AL (8) MOV AL,100H(9) MOV DX,AL (10)LEA BL,BX+5(11)LEA DX,BX (12)MOV 1000H,12H(13)ADD AX,DS (14)SUB 0100H,BYTE PTR 0001(15)SHL BL,2 (16)SHR CL,CL(17)MUL AL,BL (18)INT 400解:(1)非法,8086系统不允许PUSH指令的操作数为立即数;(2)非法,MOV指令中CS不能作为目的操作数;(3)非法,端口号大于0FFH;(4)非法,DX不能出现在中括号内;(5)合法;(6)非法,不能把立即数赋给段寄存器;(7)合法;(8)非法,源操作数大于0FFH,不能赋给8位寄存器AL;(9)非法,源操作数是8位寄存器,目的操作数却是16位寄存器,不匹配;(10)非法,LEA指令得到的是16位偏移量,但目的操作数是8位寄存器;(11)非法,LEA指令的源操作数只能是存储器操作数;(12)非法,指令存在歧义,无法确定传送的是字节还是字;(13)非法,段寄存器不能参与算术运算;(14)非法,源和目的寄存器不能同为存储器操作数;(15)非法,在8086系统中,移位次数大于1时需要将移位次数存放到CL中;(16)合法;(17)非法,在8086系统中MUL指令没有双操作数的用法;(18)非法,中断类型号大于0FFH。4、指出以下指令中,哪些指令是非法的,并说明为什么(80386系统)。(1) MOV AX,12EBXSI*16 (2) RCR EAX,10(3) PUSH 5678H (4) POP 1000H(5) MOV EAX+EAX,EAX (6) MOV AL,ESP+ESP*2(7) MOV BL,AX+12 (8) IMUL AL,BL,12解:(1)非法,比例因子只能是1、2、4、8,不能是16;(2)合法;(3)合法;(4)非法,POP指令的目的操作数不能是立即数;(5)合法;(6)非法,ESP只能作为基址寄存器,不能作为变址寄存器;(7)非法,在386系统中AX不能作为基址寄存器,也不能作为变址寄存器;(8)合法。5、假设(AX)=1234H,(BX)=5678H,(SP)=1000H,指出执行下面的程序段后,各相关寄存器及堆栈段中的内容。PUSH AX ;(AX)=?,(BX)=?,(SP)=?,栈顶字节SP=?, 栈顶第二字节SP+1=?PUSH BX ;(AX)=?,(BX)=?,(SP)=?,栈顶字节SP=?, 栈顶第二字节SP+1=?POP AX ;(AX)=?,(BX)=?,(SP)=?,栈顶字节SP=?, 栈顶第二字节SP+1=?解:(AX)=1234H,(BX)=5678H,(SP)=0FFEH,栈顶字节SP=34H,栈顶第二字节SP+1=12H(AX)=1234H,(BX)=5678H,(SP)=0FFCH,栈顶字节SP=78H,栈顶第二字节SP+1=56H(AX)=5678H,(BX)=5678H,(SP)=0FFEH,栈顶字节SP=34H,栈顶第二字节SP+1=12H6、假设A、B、C、D、X、Y为字节变量,AA、BB、YY为字变量,试利用算术运算指令编写程序段,完成以下各算术运算题。(1)计算YYA+B*C,其中A、B、C都是无符号数;(2)计算(AA+BB)/(C-D),商赋给X,余数赋给Y,其中AA、BB、C、D都是带符号数;(3)计算YY(A-B)*C,其中A、B、C都是未组合BCD码。解:(1)MOV AL,B MUL C ADD AL,A ADC AH,0 MOV YY,AX(2)MOV AX,AA ADD AX,BB MOV BL,C SUB BL,D IDIV BL MOV X,AL MOV Y,AH(3)MOV AL,A SUB AL,B AAS MUL CAAMMOV YY, AX7、利用移位指令编写程序段,实现以下运算。(1)计算AXAX*10,其中AX为无符号数;(2)32位带符号数存放在寄存器DX和AX中,其中DX存放高16位,AX存放低16位计算(DX,AX)(DX,AX)*2。(3)32位带符号数存放在寄存器DX和AX中,其中DX存放高16位,AX存放低16位计算(DX,AX)(DX,AX)/2。解:(1)SHL AX,1 MOV BX,AX SHL AX,1 SHL AX,1 ADD AX,BX(2)SAL AX,1 RCL DX,1(3)SAR DX,1RCR AX,1 8、指出以下指令执行后,标志寄存器OF、SF、ZF、AF、PF、CF的状态。(1)(AL)=0FFH,(BL)=20H,执行指令:ADD AL,BL(2)(AL)=01H, (BL)=02H,执行指令:CMP AL,BL(3)(AL)=0FFH,执行指令:INC AL(4)(AL)=0,执行指令:DEC AL(5)(AL)=0F0H,(BL)=04H,执行指令:IMUL BL(6)(AX)=1F0H,(BL)=08H,执行指令:DIV BL(7)(AL)=12H, (BL)=34H,执行指令:TEST AL,BL(8)(AL)=98H,执行指令:SAL AL,1解:OFSFZFAFPFCF(1)000001(2)010111(3)00111(4)01011(5)00(6)(7)00000(8)10011注:0表示结果为0,1表示结果为1,表示结果不变,表示结果不确定。9、在8086系统下,编写实现如下功能的程序段:(1)从地址为80H的端口中读入一个字节;(2)如果该字节最高位为“1”,则将字节0FFH送到地址为81H的端口中,并退出程序;(3)如果该字节最高位为“0”,则转向第(1)步,继续循环扫描。解: 参考程序段:AGAIN: IN AL, 80HTEST AL, 80HJZ AGAINMOV AL, 0FFHOUT 81H, AL10、我们知道,MOV指令并不能直接修改CS、IP的值,但事实上,我们还可以通过其他方法来达到修改CS、IP的目的。试编写一个程序段,使该程序段运行后,(CS)=0100H,(IP)=0000H。解:方法一、利用段间返回指令RETF:MOV AX,0100HPUSH AX ;段基址入栈MOV AX,0PUSH AX ;偏移量入栈RETF方法二、利用JMP指令实现段间跳转,假设ADDR为双字变量:MOV WORD PTR ADDR,0 ;WORD PTR ADDR偏移量MOV WORD PTR ADDR+2, 0100H ;WORD PTR ADDR+2段基址JMP DWORD PTR ADDR 11.写出能完成下述操作的指令。 (1)将立即数 1234H 送至 DS 寄存器。 (2)将存储单元 3000H 和内容送至 4000H 单元。 (3)将累加器 AX 与寄存器 CX 中的内容对调。 答案: (1)MOV AX, 1234H MOV DS, AX (2) MOV AX, 3000H MOV 4000H, AX (3) XCHG AX, CX 12.编程:将数据段中以 BX 为偏移地址的连续 4 单元的内容颠倒过来。 答案: MOV AL, BX XCHG AL, BX+3 MOV BX, AL MOV AL,BX+1 XCHG AL, BX+2 MOV BX+1, AL 13.将 AX 寄存器清零有 4 种方法,试写出这 4 条指令。 答案:MOV AX, 00H SUB AX, AX AND AX, 00H XOR AX, AX 14.使用一条逻辑运算指令实现下列要求: (1)使 AL 高 4 位不变,低 4 位为 0。 (2)使 AL 最高位置 1,后 7 位不变。 (3)使 AL 中的 bit3、bit4 变反,其余位不变。 (4)测试判断 CL 中的 bit2、bit5、bit7 是否都为 1。 答案: (1) AND AL, 0F0H (2)OR AL, 80H (3)XOR AL 18H (4)TEST AL, 0A4H 15.试分析下面的程序段完成什么功能。 MOV CL, 4 SHL AX, CL SHL BL, CL MOV AL, BL SHR DH, CL OR AL, DH 答案:将 AX 中间 8 位,BX 的低 4 位,DX 的高 4 位组成一个新字存放在 AX 中。 16.若要将源串 100 个字节数据传送到目标串单元中去,设源串首址的偏移地址为 2500H, 目标串首址的偏移地址为 1400H,请编写程序实现以下功能。 (1)完成源串到目标串的搬移。 (2)比较两串是否完全相同,若两串相同,则 BX 寄存器内容为 0;若两串不同,则 BX 指向 源串中第一个不相同字节的地址,且该字节的内容保留在 AL 的寄存器中。 答案: (1) CLD MOV CX, 100 MOV SI, 2500H MOV DI, 1400H REP MOVSB (2) CLD MOV CX, 100 MOV SI, 2500 MOV DI, 1400 REPE CMPSB JZ EQQ DEC SI MOV BX, SI MOV AL, SI JMP STOP EQQ: MOV BX, 0 STOP: HLT 17设若标志寄存器原值为0A11H,(SP)=0060H,(AL)=4。下列几条指令执行后,标志寄存器、AX、SP的值分别是多少?PUSHFLAHFXCHG AH,ALPUSH AXSAHFPOPF答:指令执行后标志寄存器的值为0411H,AX=0411H ,SP=005EH。18假如在程序的括号中分别填入指令:(1) LOOP L20(2) LOOPNE L20(3) LOOPE L20试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是什么? BEGIN:MOVAX,01MOVBX,02MOVDX,03MOVCX,04L20:INC AXADDBX,AXSHR DX,1( )答案: (1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0(2)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 0(3)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 119变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。答案:MOVAX, 0MOVAL, N1SUB AL, N2AASMOVDL, ALMOVAL, N1+1SBBAL, N2+1AASMOVDH, AL20在已学的指令中,可实现累加器清0的单条指令有哪些?比较它们的功能。答:(1)MOVAX,0;仅将累加器清0,不会影响任何标志位(2)SUBAX,AX;累加器清0的同时影响所有状态标志,具体地有:ZF、PF置1,CF、AF、SF、OF均清0(3)ANDAX,0;将累加器清0,ZF、PF置1,CF、OF、SF清0(4)XORAX,AX;将累加器清0,ZF、PF置1,CF、OF、SF清021已知(DS)=2000H,有关的内存单元值为:(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,符号COUNT的偏移地址为1200H。执行下列指令后,寄存器AX、BX、SI的值分别是多少?MOVBX,OFFSET COUNTMOVSI,BXMOVAX,COUNTSIBX答:执行结果为(BX)=1200H,(SI)=1000H,(AX)=3040H。22设若内存单元DATA在数据段中偏移量为24C0H处,24C0H24C3H单元中依次存放着55H、66H、77H、88H。下列几条指令执行后,寄存器AX、BX、CL、SI、DS的值分别是多少?MOVAX,DATALEASI,DATAMOVCL,SILDSBX,DATA答:执行结果为(AX)=6655H,(BX)=6655H,(CL)=55H,(SI)=24C0H,(DS)=8877H。23若(AX)=26D3H,(CX)=7908H,CF=1,执行下列指令后,寄存器AX、CX的值分别是多少?CF=?OF=?SALCH,1RCRAX,CLROLAL,1答:执行结果为(AX)=0A64CH,(CX)=0F208H,CF=OF=0。24已知有程序段如下:MOVAL,35HMOVDL,ALANDDL,0FHANDAL,0F0HMOVCL,4SHRAL,CLMOVBL,10MULBLADDAL,DL执行之后,AL的值等于多少?该程序段完成了什么功能?答:程序段执行后(AL)=23H。该程序段实现了将AL中的1个组合BCD码转换为十六进制数并存回AL中的功能。25下面的程序执行后,DX、AX的值分别是多少?;以X为首址的字单元中的数据依次为1234H、5678H;以Y为首址的字单元中的数据依次为8765H、4321HLEASI,XLEADI,YMOVDX,SI2MOVAX,XADDAX,XADCDX,SI2CMPDX,DI2JLL2CMPAX,YJLL1JMPEXITL1: MOVAX,1JMPEXITL2: MOVAX,2EXIT:答:执行结果为(AX)=2,(DX)=0ACF0H。26设VAR字单元的值为x,F1字单元的值为y,试编程按以下要求给y赋值: 2x30 y = 0 30x12x30,则转PLUS2CMPAX,1JLMIN2;x1,则转MIN2MOVF1,0;30x1,y=0JMPGO
收藏
- 资源描述:
-
-/
微机原理习题
第一章 绪论
习题与答案
1. 把下列二进制数转换成十进制数、十六进制数及BCD码形式。
(1) 10110010B =
(2) 01011101.101B =
解:
(1) 10110010B = 178D = B2H = (0001 0111 1000)BCD
(2) 01011101.101B = 93.625D = 5D.AH
= (1001 0011.0110 0010 0101)BCD
2. 把下列十进制数转换成二进制数。
(1) 100D =
(2) 1000D =
(3) 67.21D =
解:
(1) 100D = 01100100B
(2) 1000D = 1111101000B
(3) 67.21D = 1000011.0011B
3. 把下列十六进制数转换成十进制数、二进制数。
(1) 2B5H =
(2) 4CD.A5H =
解:
(1) 2B5H = 693D = 0010 1011 0101B
(2) 4CD.A5H = 1229.6445D = 0100 1100 1101.1010 0101 B
4. 计算下列各式。
(1) A7H+B8H =
(2) E4H-A6H =
解:
(1) A7H+B8H = 15FH
(2) E4H-A6H = 3EH
5. 写出下列十进制数的原码、反码和补码。
(1) +89
(2) -37
解:
(1) [+89 ] 原码、反码和补码为: 01011001B
(2) [-37] 原码 = 10100101 B
[-37] 反码 = 11011010 B
[-37] 补码 = 11011011 B
6.求下列用二进制补码表示的十进制数
(1)(01001101)补 =
(2)(10110101)补 =
解:
(1)(01001101)补 = 77D
(2)(10110101)补 = -75D
7.请用8位二进制数写出下列字符带奇校验的ASCII码。
(1)C: 1000011 (2)O: 1001111
(3)M: 1001101 (4)P: 1010000
解:
(1)C:0 1000011 (2)O: 0 1001111
(3)M:1 1001101 (4)P: 1 1010000
8.请用8位二进制数写出下列字符带偶校验的ASCII码。
(1)+:0101011 (2)=: 0111101
(3)#:0100011 (4)>: 0111110
解:
(1)+:0 0101011 (2)=: 1 0111101
(3)#:1 0100011 (4)>: 1 0111110
9.叙述 CPU 中PC的作用。
解:PC是CPU中的程序计数器,其作用是提供要执行指令的地址。
第二章 微处理器体系与结构
习题与答案
1. 8086/8088 CPU 由哪两大部分组成?请分别叙述它们的功能。
解:8086/8088 CPU均由两个独立的逻辑单元组成,一个称为总线接口单元BIU(Bus Interface Unit),另一个称为执行单元EU(Execution Unit)。
总线接口单元BIU取指令时,从存储器指定地址取出指令送入指令队列排队;执行指令时,根据EU命令对指定存储器单元或I/O端口存取数据。
执行单元EU任务是执行指令,进行全部算术逻辑运算、完全偏移地址的计算,向总线接口单元BIU提供指令执行结果的数据和偏移地址,并对通用寄存器和标志寄存器进行管理。
2. 8086/8088与传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点?
解:总线接口部分和执行部分是分开的,每当EU执行一条指令时,造成指令队列空出2个或空出一个指令字节时 ,BIU马上从内存中取出下面一条或几条指令,以添满他的指令队列。这样,一般情况下,CPU在执行完一条指令后,便可马上执行下一条指令,不像以往8位CPU那样,执行完一条指令后,需等待下一条指令。即EU从指令队列中取指令、执行指令和BIU补充指令队列的工作是同时进行的。这样大大提高了CPU利用率,降低了系统都对存储器速度的要求。
3. 状态标志和控制标志有何不同?8086/8088的状态标志和控制标志分别有哪些?
解:8086/8088 CPU设立了一个两字节的标志寄存器,共九个标志。其中标志位O、S、Z、A、P、C是反映前一次涉及ALU操作结果的状态标志,D、I、T是控制CPU操作特征的控制标志。
4. 8086/8088 CPU寻址存储器时,什么是物理地址?逻辑地址?它们之间有何关系?
解:8086/8088系统中每个存储单元都有一个物理地址,物理地址就是存储单元的实际地址编码。在CPU与存贮器之间进行任何信息交换时,需利用物理地址来查找所需要的访问的存储单元。逻辑地址由段地址和偏移地址两部分组成。
逻辑地址的表示格式为:段地址:偏移地址。知道了逻辑地址,可以求出它对应的物理地址:物理地址=段地址10H+偏移地址。
5. 段寄存器CS=1200H,指令指针寄存器IP=FF00H,此时,指令的物理地址为多少?指向这一物理地址的CS值和IP值是唯一的吗?
解:根据:物理地址=段地址10H+偏移地址,指令的物理地址为21F00H。指向这一物理地址的CS值和IP值不唯一。
6. 8086 CPU中 信号和A0信号是通过怎样的组合解决存储器和外设端口的读/写的?这种组合决定了8086系统中存储器偶地址体及奇地址体之间应该用什么信号区分?怎样区分?
解:若存取一个字节的数据,总是用一个总线周期来完成该操作;若存取一个字,则依该字是规则字还是不规则字需用一个或两个总线周期来完成。对规则字,只用一个总线周期来完成16位数据的传送,而对于非规则字则用相邻两个总线周期来完成该字的存储操作,先取其奇地址字节(即数据的低位字节),然后存取偶地址字节。在组成存储系统时,总是偶地址单元的数据通过AD0~AD7传送,而奇地址单元的数据通过AD8~AD15传送,即通过总线高字节传送。 信号和A0信号控制存储器读写见下表:
操作
A0
使用的数据总线
存取规则字
0
0
AD15~AD0
传送偶地址的一个字节
1
0
AD7~AD0
传送奇地址的一个字节
0
1
AD15~AD8
存取非规则字
0
1
AD15~AD8(第一个总线周期)
1
0
AD7~AD0(第二个总线周期)
1
1
为非法码
7.什么叫总线?为什么各种微型计算机系统中普遍采用总线结构?
答:总线是模块与模块之间传送信息的一组公用信号线。
总线标准的建立使得各种符合标准的模块可以很方便地挂在总线上,使系统扩展和升级变得高效、简单、易行。因此微型计算机系统中普遍采用总线结构。
8.微型计算机系统总线从功能上分为哪三类?它们各自的功能是什么?
答:微型计算机系统总线从功能上分为地址总线、数据总线和控制总线三类。地址总线用于指出数据的来源或去向,单向;数据总线提供了模块间数据传输的路径,双向;控制总线用来传送各种控制信号或状态信息以便更好协调各功能部件的工作。
9.8086/8088 CPU 分为哪两个部分?如何协调工作?
答:EU是执行部件,主要的功能是执行指令和形成有效地址。BIU是总线接口部件,与片外存储器及I/O接口电路传输数据,主要功能是形成实际地址、预取指令和存取操作数。EU经过BIU进行片外操作数的访问,BIU为EU提供将要执行的指令。EU与BIU可分别独立工作,当EU不需BIU提供服务时,BIU可进行填充指令队列的操作。
10.8086/8088 CPU的地址总线有多少位?其寻址范围是多少?
答:8086/8088 CPU的地址总线共20 位,最大可寻址1MB空间。
11.8086/8088 CPU使用的存储器为什么要分段?怎么分段?
答:8086/8088为16位CPU,其内部的ALU、相关的地址寄存器(如SP、IP以及BX、BP、SI、DI)等都是16位的,因而对存储器地址的处理也只能是16位操作,即8086/8088的直接寻址能力在64KB范围内。而实际上8086/8088有20条地址线,它的最大寻址空间为1MB。这就产生了一个矛盾,即如何用16位的地址寄存器去表示一个20位的存储器物理地址?
实际使用的解决办法是:将1MB大小的存储空间分为若干“段”,每段不超过64KB。这样,一个20位的物理地址就可以用“16位段基址:16位偏移量”的形式(称为逻辑地址)来表示了,其中段地址存放在8086/8088的段寄存器中。
12.8086/8088 CPU 中有几个通用寄存器?有几个变址寄存器?有几个指针寄存器?通常哪几个寄存器亦可作为地址寄存器使用?
答:8086/8088 CPU 中共有:
8个16位的通用寄存器AX、BX、CX、DX 、BP、SP、SI、DI;
2个变址寄存器SI、DI;
2个指针寄存器BP、SP;
其中BX、BP、SI、DI 亦可作地址寄存器。
13.Intel 8086与8088有何区别?
答:8086与8088的区别主要表现在以下几个方面:
第一、8086的指令队列可以容纳6个字节,每个总线周期在存储器中取出2个字节指令代码填入队列。而8088只能容纳4个字节,且每个总线周期只能取出1个字节指令代码。
第二、8086外部数据总线宽度为16位,8088外部数据总线宽度只有8位。注意:8086和8088外部数据总线的宽度不同将导致扩展主存储器及输入/输出接口时系统地址线和数据线连接方式的不同。
第三、其他不同的引脚定义:(1)AD15~AD0,在8086中为地址/数据复用,而在8088中AD15~AD8 改为A15~A8只作地址线用;(2)34、28号引脚定义不同。
14.8086/8088CPU工作在最小模式时:当CPU访问存储器时,要利用哪些信号?当CPU访问外设接口时,要利用哪些信号?
答:8086/8088 CPU工作在最小模式时,若访问存储器,需用到以下信号:、ALE、、DEN、READY、、、、AD0~AD15、A19/S6~A16/S3。若访问外设,需用到以下信号:、ALE、、DEN、READY、、、AD0~AD15。
15.试指出下列运算后的各个状态标志,并说明进位标志和溢出标志的区别:
(1)1278H+3469H
答:CF=0 AF=1 ZF=0 SF=0 OF=0 PF=1
(2)54E3H-27A0H
答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=0
(3)3881H+3597H
答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=1
(4)01E3H-01E3H
答:CF=0 AF=0 ZF=1 SF=0 OF=0 PF=1
其中,进位标志CF 用于判别无符号数运算是否超出数的表示范围,而溢出标志OF 用于判别带符号数运算是否超出数的表示范围。
奇偶标志PF 只能判断结果低8 位中“1”的个数为奇数还是偶数。
16.什么是逻辑地址?什么是物理地址?它们之间有什么联系?各用在何处?
答:逻辑地址由两个16 位的部分即段基址和偏移量组成,一般在程序中出现的地址都表示为逻辑地址形式;物理地址是一个20 位的地址,它是唯一能代表存储空间每个字节单元的地址,一般只出现在地址总线上。
由于8086/8088CPU 中的寄存器只有16 位长,所以程序不能直接存放20 位的物理地址,而必须借助逻辑地址,即用两个16 位的寄存器来表示物理地址。他们之间的关系是:物理地址=段基址*16+偏移量;另外,一个物理地址可对应多个逻辑地址。
17.设现行数据段位于存储器0B0000H~0BFFFFH 单元,DS 段寄存器内容为多少?
答: DS 段寄存器内容为0B000H。
18.在8086中,逻辑地址、偏移地址、物理地址分别指的是什么?
答:逻辑地址是在程序中对存储器地址的一种表示方法,由段基址和段内偏移地址两部分组成,都是16位的二进制代码,如1234H:0088H。偏移地址是指段内某个存储单元相对该段首地址的差值。物理地址是8086芯片引线送出的20位地址码,物理地址=段基址*16+偏移地址,用来指出一个特定的存储单元。
19.给定一个存放数据的内存单元的偏移地址是20C0H,(DS)=0C0E0H,求出该内存单元的物理地址。
答:物理地址:0C2EC0H。
20.8086/8088为什么采用地址/数据引线复用技术?
答:考虑到芯片成本和体积,8086/8088采用40条引线的封装结构。40条引线引出8086/8088的所有信号是不够用的,采用地址/数据线复用引线方法可以解决这一矛盾,从逻辑角度,地址与数据信号不会同时出现,二者可以分时复用同一组引线。
21.怎样确定8086的最大或最小工作模式?
答:引线的逻辑状态决定8086的工作模式,引线接高电平,8086被设定为最小模式,引线接低电平,8086被设定为最大模式。
22.8086基本总线周期是如何组成的?
答:基本总线周期由4个时钟(CLK)周期组成,按时间顺序定义为T1、T2、T3、T4。
23.在基于8086的微计算机系统中,存储器是如何组织的?存储器是如何与处理器总线连接的?信号起什么作用?
答:8086为16位微处理器,可访问1M字节的存储器空间;1M字节的存储器分为两个512K字节的存储体,分别命名为偶存储体和奇存储体;偶体的数据线连接D7~D0,“体选”信号接地址线A0;奇体的数据线连接D15~D8,“体选”信号接信号;A0信号有效时允许访问偶体中的低字节存储单元,信号有效时允许访问奇体中的高字节存储单元,实现8086的低字节访问、高字节访问及字访问。
24.有一个由20个字组成的数据区,其起始地址为610AH:1CE7H。试写出该数据区首末单元的实际地址PA。
首单元地址:610A0H+1CE7H=62D87H
末单元地址:62D87H+27H=62DAEH
25.有两个16位的字31DAH、5E7FH,它们在8086系统存储器中的地址为00130H和00135H,试画出它们的存储器示意图。
地址
内容
00130H
0DAH
00131H
31H
00132H
00133H
00134H
00135H
7F
00136H
5E
26.试说明8086CPU的控制引脚ALE的作用。
答:8086的低位地址线与数据线复用,为保证地址线维持足够的时间,需使用ALE信号将低位地址线通过锁存器保存,以形成系统地址总线。
第三章 80x86指令系统
习题与答案
1、指出下列指令中操作数的寻址方式(8086系统)。
(1) MOV AX,100 (2) MOV AX,[100]
(3) MOV DL,[BP+SI] (4) MOV [BX],CX
(5) MOV DX,[SI] (6) MOV 1234H[BX],DS
(7) MOV [DI+5678H],AL (8) MOV 12[BP][DI],BH
(9) POP CX (10)MOV AX,[BX+SI+10]
解:
目的操作数
源操作数
(1) MOV AX,100
寄存器寻址
立即数寻址
(2) MOV AX,[100]
寄存器寻址
直接寻址
(3) MOV DL,[BP+SI]
寄存器寻址
基址变址寻址
(4) MOV [BX],CX
寄存器间接寻址
寄存器寻址
(5) MOV DX,[SI]
寄存器寻址
寄存器间接寻址
(6) MOV 1234H[BX],DS
寄存器相对寻址
寄存器寻址
(7) MOV [DI+5678H],AL
寄存器相对寻址
寄存器寻址
(8) MOV 12[BP][DI],BH
相对基址变址寻址
寄存器寻址
(9) POP CX
隐含为堆栈
寄存器寻址
(10)MOV AX,[BX+SI+10]
寄存器寻址
相对基址变址寻址
2、指出下列指令中操作数的寻址方式(80386系统)。
(1) MOV [EBX+12H],AX (2) MOV [EBP+EDI*2],EBX
(3) MOV [EBX*4],BX (4) MOV EDX,[EAX+ESI*8-12H]
解:
目的操作数
源操作数
(1)寄存器相对寻址
寄存器寻址
(2)基址比例变址寻址
寄存器寻址
(3)比例变址寻址
寄存器寻址
(4)寄存器寻址
相对基址比例变址寻址
3、指出以下指令中,哪些指令是非法的,并说明为什么(8086系统)。
(1) PUSH 1234H (2) MOV CS,AX
(3) IN AX, 300 (4) MOV AX,[DX+12]
(5) MOV BX,[BX] (6) MOV DS,1000H
(7) XCHG AL,AL (8) MOV AL,100H
(9) MOV DX,AL (10)LEA BL,[BX+5]
(11)LEA DX,BX (12)MOV [1000H],12H
(13)ADD AX,DS (14)SUB [0100H],BYTE PTR [0001]
(15)SHL BL,2 (16)SHR CL,CL
(17)MUL AL,BL (18)INT 400
解:(1)非法,8086系统不允许PUSH指令的操作数为立即数;
(2)非法,MOV指令中CS不能作为目的操作数;
(3)非法,端口号大于0FFH;
(4)非法,DX不能出现在中括号[]内;
(5)合法;
(6)非法,不能把立即数赋给段寄存器;
(7)合法;
(8)非法,源操作数大于0FFH,不能赋给8位寄存器AL;
(9)非法,源操作数是8位寄存器,目的操作数却是16位寄存器,不匹配;
(10)非法,LEA指令得到的是16位偏移量,但目的操作数是8位寄存器;
(11)非法,LEA指令的源操作数只能是存储器操作数;
(12)非法,指令存在歧义,无法确定传送的是字节还是字;
(13)非法,段寄存器不能参与算术运算;
(14)非法,源和目的寄存器不能同为存储器操作数;
(15)非法,在8086系统中,移位次数大于1时需要将移位次数存放到CL中;
(16)合法;
(17)非法,在8086系统中MUL指令没有双操作数的用法;
(18)非法,中断类型号大于0FFH。
4、指出以下指令中,哪些指令是非法的,并说明为什么(80386系统)。
(1) MOV AX,12[EBX][SI*16] (2) RCR EAX,10
(3) PUSH 5678H (4) POP 1000H
(5) MOV [EAX+EAX],EAX (6) MOV AL,[ESP+ESP*2]
(7) MOV BL,[AX+12] (8) IMUL AL,BL,12
解:(1)非法,比例因子只能是1、2、4、8,不能是16;
(2)合法;
(3)合法;
(4)非法,POP指令的目的操作数不能是立即数;
(5)合法;
(6)非法,ESP只能作为基址寄存器,不能作为变址寄存器;
(7)非法,在386系统中AX不能作为基址寄存器,也不能作为变址寄存器;
(8)合法。
5、假设(AX)=1234H,(BX)=5678H,(SP)=1000H,指出执行下面的程序段后,各相关寄存器及堆栈段中的内容。
PUSH AX ;(AX)=?,(BX)=?,(SP)=?,栈顶字节[SP]=?, 栈顶第二字节[SP+1]=?
PUSH BX ;(AX)=?,(BX)=?,(SP)=?,栈顶字节[SP]=?, 栈顶第二字节[SP+1]=?
POP AX ;(AX)=?,(BX)=?,(SP)=?,栈顶字节[SP]=?, 栈顶第二字节[SP+1]=?
解:(AX)=1234H,(BX)=5678H,(SP)=0FFEH,栈顶字节[SP]=34H,栈顶第二字节[SP+1]=12H
(AX)=1234H,(BX)=5678H,(SP)=0FFCH,栈顶字节[SP]=78H,栈顶第二字节[SP+1]=56H
(AX)=5678H,(BX)=5678H,(SP)=0FFEH,栈顶字节[SP]=34H,栈顶第二字节[SP+1]=12H
6、假设A、B、C、D、X、Y为字节变量,AA、BB、YY为字变量,试利用算术运算指令编写程序段,完成以下各算术运算题。
(1)计算YY←A+B*C,其中A、B、C都是无符号数;
(2)计算(AA+BB)/(C-D),商赋给X,余数赋给Y,其中AA、BB、C、D都是带符号数;
(3)计算YY←(A-B)*C,其中A、B、C都是未组合BCD码。
解:
(1)MOV AL,B
MUL C
ADD AL,A
ADC AH,0
MOV YY,AX
(2)MOV AX,AA
ADD AX,BB
MOV BL,C
SUB BL,D
IDIV BL
MOV X,AL
MOV Y,AH
(3)MOV AL,A
SUB AL,B
AAS
MUL C
AAM
MOV YY, AX
7、利用移位指令编写程序段,实现以下运算。
(1)计算AX←AX*10,其中AX为无符号数;
(2)32位带符号数存放在寄存器DX和AX中,其中DX存放高16位,AX存放低16位计算(DX,AX)←(DX,AX)*2。
(3)32位带符号数存放在寄存器DX和AX中,其中DX存放高16位,AX存放低16位计算(DX,AX)←(DX,AX)/2。
解:
(1)SHL AX,1
MOV BX,AX
SHL AX,1
SHL AX,1
ADD AX,BX
(2)SAL AX,1
RCL DX,1
(3)SAR DX,1
RCR AX,1
8、指出以下指令执行后,标志寄存器OF、SF、ZF、AF、PF、CF的状态。
(1)(AL)=0FFH,(BL)=20H,执行指令:ADD AL,BL
(2)(AL)=01H, (BL)=02H,执行指令:CMP AL,BL
(3)(AL)=0FFH,执行指令:INC AL
(4)(AL)=0,执行指令:DEC AL
(5)(AL)=0F0H,(BL)=04H,执行指令:IMUL BL
(6)(AX)=1F0H,(BL)=08H,执行指令:DIV BL
(7)(AL)=12H, (BL)=34H,执行指令:TEST AL,BL
(8)(AL)=98H,执行指令:SAL AL,1
解:
OF
SF
ZF
AF
PF
CF
(1)
0
0
0
0
0
1
(2)
0
1
0
1
1
1
(3)
0
0
1
1
1
(4)
0
1
0
1
1
(5)
0
—
—
—
—
0
(6)
—
—
—
—
—
—
(7)
0
0
0
—
0
0
(8)
1
0
0
—
1
1
注:0表示结果为0,1表示结果为1,表示结果不变,—表示结果不确定。
9、在8086系统下,编写实现如下功能的程序段:
(1)从地址为80H的端口中读入一个字节;
(2)如果该字节最高位为“1”,则将字节0FFH送到地址为81H的端口中,并退出程序;
(3)如果该字节最高位为“0”,则转向第(1)步,继续循环扫描。
解: 参考程序段:
AGAIN: IN AL, 80H
TEST AL, 80H
JZ AGAIN
MOV AL, 0FFH
OUT 81H, AL
10、我们知道,MOV指令并不能直接修改CS、IP的值,但事实上,我们还可以通过其他方法来达到修改CS、IP的目的。试编写一个程序段,使该程序段运行后,(CS)=0100H,(IP)=0000H。
解:
方法一、利用段间返回指令RETF:
MOV AX,0100H
PUSH AX ;段基址入栈
MOV AX,0
PUSH AX ;偏移量入栈
RETF
方法二、利用JMP指令实现段间跳转,假设ADDR为双字变量:
MOV WORD PTR ADDR,0 ;WORD PTR ADDR←偏移量
MOV WORD PTR ADDR+2, 0100H ;WORD PTR ADDR+2←段基址
JMP DWORD PTR ADDR
11.写出能完成下述操作的指令。
(1)将立即数 1234H 送至 DS 寄存器。
(2)将存储单元 3000H 和内容送至 4000H 单元。
(3)将累加器 AX 与寄存器 CX 中的内容对调。
答案: (1)MOV AX, 1234H
MOV DS, AX
(2) MOV AX, [3000H]
MOV [4000H], AX
(3) XCHG AX, CX
12.编程:将数据段中以 BX 为偏移地址的连续 4 单元的内容颠倒过来。
答案: MOV AL, [BX]
XCHG AL, [BX+3]
MOV [BX], AL
MOV AL,[BX+1]
XCHG AL, [BX+2]
MOV [BX+1], AL
13.将 AX 寄存器清零有 4 种方法,试写出这 4 条指令。
答案:MOV AX, 00H
SUB AX, AX
AND AX, 00H
XOR AX, AX
14.使用一条逻辑运算指令实现下列要求: (1)使 AL 高 4 位不变,低 4 位为 0。 (2)使 AL 最高位置 1,后 7 位不变。 (3)使 AL 中的 bit3、bit4 变反,其余位不变。 (4)测试判断 CL 中的 bit2、bit5、bit7 是否都为 1。
答案: (1) AND AL, 0F0H
(2)OR AL, 80H
(3)XOR AL 18H
(4)TEST AL, 0A4H
15.试分析下面的程序段完成什么功能。
MOV CL, 4
SHL AX, CL
SHL BL, CL
MOV AL, BL
SHR DH, CL
OR AL, DH
答案:将 AX 中间 8 位,BX 的低 4 位,DX 的高 4 位组成一个新字存放在 AX 中。
16.若要将源串 100 个字节数据传送到目标串单元中去,设源串首址的偏移地址为 2500H, 目标串首址的偏移地址为 1400H,请编写程序实现以下功能。 (1)完成源串到目标串的搬移。 (2)比较两串是否完全相同,若两串相同,则 BX 寄存器内容为 0;若两串不同,则 BX 指向 源串中第一个不相同字节的地址,且该字节的内容保留在 AL 的寄存器中。
答案: (1) CLD
MOV CX, 100
MOV SI, 2500H
MOV DI, 1400H
REP MOVSB
(2) CLD
MOV CX, 100
MOV SI, 2500
MOV DI, 1400
REPE CMPSB
JZ EQQ
DEC SI
MOV BX, SI
MOV AL, [SI]
JMP STOP
EQQ: MOV BX, 0
STOP: HLT
17.设若标志寄存器原值为0A11H,(SP)=0060H,(AL)=4。下列几条指令执行后,标志寄存器、AX、SP的值分别是多少?
PUSHF
LAHF
XCHG AH,AL
PUSH AX
SAHF
POPF
答:指令执行后标志寄存器的值为0411H,AX=0411H ,SP=005EH。
18.假如在程序的括号中分别填入指令:
(1) LOOP L20
(2) LOOPNE L20
(3) LOOPE L20
试说明在三种情况下, 当程序执行完后, AX、BX、CX、DX四个寄存器的内容分别是什么?
BEGIN: MOV AX,01
MOV BX,02
MOV DX,03
MOV CX,04
L20: INC AX
ADD BX,AX
SHR DX,1
( )
答案: (1)(AX)= 5 (BX)= 16 (CX)= 0 (DX)= 0
(2)(AX)= 3 (BX)= 7 (CX)= 2 (DX)= 0
(3)(AX)= 2 (BX)= 4 (CX)= 3 (DX)= 1
19.变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。
答案: MOV AX, 0
MOV AL, N1
SUB AL, N2
AAS
MOV DL, AL
MOV AL, N1+1
SBB AL, N2+1
AAS
MOV DH, AL
20.在已学的指令中,可实现累加器清0的单条指令有哪些?比较它们的功能。
答:(1)MOV AX,0 ;仅将累加器清0,不会影响任何标志位
(2)SUB AX,AX ;累加器清0的同时影响所有状态标志,具体地有:ZF、PF置1,CF、AF、SF、OF均清0
(3)AND AX,0 ;将累加器清0,ZF、PF置1,CF、OF、SF清0
(4)XOR AX,AX ;将累加器清0,ZF、PF置1,CF、OF、SF清0
21.已知(DS)=2000H,有关的内存单元值为:(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,符号COUNT的偏移地址为1200H。执行下列指令后,寄存器AX、BX、SI的值分别是多少?
MOV BX,OFFSET COUNT
MOV SI,[BX]
MOV AX,COUNT[SI][BX]
答:执行结果为(BX)=1200H,(SI)=1000H,(AX)=3040H。
22.设若内存单元DATA在数据段中偏移量为24C0H处,24C0H~24C3H单元中依次存放着55H、66H、77H、88H。下列几条指令执行后,寄存器AX、BX、CL、SI、DS的值分别是多少?
MOV AX,DATA
LEA SI,DATA
MOV CL,[SI]
LDS BX,DATA
答:执行结果为(AX)=6655H,(BX)=6655H,(CL)=55H,(SI)=24C0H,(DS)=8877H。
23.若(AX)=26D3H,(CX)=7908H,CF=1,执行下列指令后,寄存器AX、CX的值分别是多少?CF=?OF=?
SAL CH,1
RCR AX,CL
ROL AL,1
答:执行结果为(AX)=0A64CH,(CX)=0F208H,CF=OF=0。
24.已知有程序段如下:
MOV AL,35H
MOV DL,AL
AND DL,0FH
AND AL,0F0H
MOV CL,4
SHR AL,CL
MOV BL,10
MUL BL
ADD AL,DL
执行之后,AL的值等于多少?该程序段完成了什么功能?
答:程序段执行后(AL)=23H。该程序段实现了将AL中的1个组合BCD码转换为十六进制数并存回AL中的功能。
25.下面的程序执行后,DX、AX的值分别是多少?
;以X为首址的字单元中的数据依次为1234H、5678H
;以Y为首址的字单元中的数据依次为8765H、4321H
LEA SI,X
LEA DI,Y
MOV DX,[SI+2]
MOV AX,X
ADD AX,X
ADC DX,[SI+2]
CMP DX,[DI+2]
JL L2
CMP AX,Y
JL L1
JMP EXIT
L1: MOV AX,1
JMP EXIT
L2: MOV AX,2
EXIT:……
答:执行结果为(AX)=2,(DX)=0ACF0H。
26.设VAR字单元的值为x,F1字单元的值为y,试编程按以下要求给y赋值:
2 x>30
y = 0 30≥x≥1
-2 x<1
答:一种可能的程序段实现如下:
MOV AX,VAR ;AX x
CMP AX,30
JG PLUS2 ;x>30,则转PLUS2
CMP AX,1
JL MIN2 ;x<1,则转MIN2
MOV F1,0 ;30≥x≥1,y=0
JMP GO
展开阅读全文