第1章 微机系统导论
1.2 微处理器、微型计算机和微型计算机系统之间有何联系与区别?
答:微处理器是微型计算机的中央处理器,微型计算机是微型计算机系统硬件部分的核心部件。
微处理器是指由一片或几片大规模集成电路组成的具有运算器和控制器功能的中央处理器部件。
微型计算机又称主机,是指以微处理器为核心,配上存储器、输入/输出接口电路及系统总线所组成的计算机。
微型计算机系统是指以微型计算机为中心,配以相应的外围设备(如硬盘、显示器、键盘、鼠标等)、电源和辅助电路(统称硬件)以及指挥微型计算机工作的软件系统(如系统软件、应用软件)所构成的系统。
1.3 一个基本的微机硬件系统的组成部分包括哪几部分?实际微机硬件系统一般都由哪些部件组成?
答:一个基本的微机硬件系统的组成包括微处理器芯片、存储器芯片与输入输出接口芯片。微处理器芯片是微机的运算和控制中心,存储器芯片(内存)用来存储程序和数据,输入输出接口芯片是微机与外设之间的接口。
主流微机硬件系统一般由主机(包括CPU、主存储器RAM、CPU外围芯片组和总线插槽)、外设接口卡、外部设备(如显示器、键盘、鼠标)及电源等部件组成。
1.6 一个最基本的微处理器由哪几部分组成?它们各自的主要功能是什么?
答:一个最基本的微处理器由运算器、控制器和内部寄存器阵列3个部分组成。
运算器又称为算术逻辑单元(ALU),用来进行算术或逻辑运算以及位移循环等操作;控制器包括指令寄存器(IR)、指令译码器(ID)、可编程逻辑阵列(PLA),三者共同作用完成取指控制、执指控制等操作;内部寄存器的数量和类型视具体的微处理器类型而定,一般包括累加器、数据寄存器、程序计数器、地址寄存器和标志寄存器等,用以存放对应的数据,供控制器和运算器使用。
1.7 试说明程序计数器PC在程序执行过程中的具体作用与功能特点。
答:PC中存放着正待取出的指令的地址。根据PC中的指令地址,CPU准备从存储器中取出将要执行的指令。通常程序按顺序逐条执行。任何时刻PC都指示要取的下一个字节或下一条指令(对单字节指令而言)所在的地址。因此,PC具有自动加1功能。
1.8 试说明标志寄存器F的基本功能是什么?它在程序执行过程中有何作用?
答:标志寄存器F用来寄存CPU执行指令时所产生的结果或状态的标志信号。如进行算术或逻辑运算时是否产生进位、半进位、溢出、结果等于零、奇偶性等状态的变化,通常需要将标志寄存器中这些运算后的结果或状态作为一种条件,用于判断程序是否转移。不同型号的微处理器对应的标志位的具体设置与功能也不同。
1.9 存储器的基本功能是什么?程序和数据是以何种代码形式来存储信息的?
答:存储器是计算机的存储和记忆部件,用来存放数据(包括原始数据、中间结果与最终结果)和程序。程序和数据在计算机内部都是用0、1二进制代码的形式来
示的,每一个0或1就叫做1位信息。
1.10 试说明位、字节、字长的基本概念及三者之间的关系。
答:位(bit)是用0或1表示的一个二进制信息最基本单位;字节(Byte)是由8位二进制代码表示的一个叫做位组的基本信息单位;字(Word)是指由2个字节组成的16位信息单位。字长是指计算机内部CPU一次可以处理二进制数字的位数,它通常是字节的整数倍。
第2章 微机运算基础
2.2 在进位记数制中,“基数”和“位权(或权)”的含义是什么?一个以b为基数的任意进制数N,它按位权展开式求值的一般通式是如何描述的?
答:基数就是表示该进位制所用字符或数码的个数;数制每一位所具有的值称为位权或简称权。数N的按位权展开式的一般通式为
式中,ki为第i位的数码;b为基数;bi为第i位的权;n为整数的总位数;m为小数的总位数。
2.3 将下列十进制数分别转换为二进制数。
(1) 147 (2) 4095 (3) 0.625 (4) 0.l5625
答: 方法1:整数部分:除2取余;小数部分:乘2取整
方法2:用特殊数字
(1) 147 = 128+16+2+1 = 27+24+21+20 = 1001 0011B
(2) 4095 = 4096-1 = 212-20 = 1111 1111 1111B
(3) 0.625 = 0.5+0.125 = 2-1+2-3 = 0.101B
(4) 0.l5625 = 0.00101B
2.4 将下列二进制数分别转换为BCD数。
(1) 1011 (2) 0.01 (3) 10101.101 (4) 11011.001
答:方法:先转换为十进制数,再转换为BCD数
(1) 1011B = 11D = 0001 0001BCD
(2) 0.01B = 0.25D = 0.0010 0101BCD
(3) 10101.101B = 21.625D = 0010 0001.0110 0010 0101BCD
(4) 11011.001B = 27.125D = 0010 0111.0001 0010 0101BCD
2.5 将下列二进制数分别转换为八进制数、十六进制数。
(1) 10101011B (2) 1011110011B
(3) 0.01101011B (4) 11101010.0011B
答: 方法: 二进制数转换为八进制数:3位变1位;
二进制数转换为十六进制数:4位变1位。
(1) 10101011B = 253Q = 0ABH
(2) 1011110011B = 1363Q = 2F3H
(3) 0.01101011B = 0.326Q = 0.6BH
(4) 11101010.0011B = 352.14Q = 0EA.3H
2.6 选取字长n为8位和16位两种情况,求下列十进制数的原码。
(1) X = +63 (2) Y = -63 (3) Z = +118 (4) W = -118
答:方法: 最高位(D7或D15)为符号位,其余位是数值部分的二进制形式。
(1) 8位:[ X ]原 = 0011 1111B, 16位:[ X ]原 = 0000 0000 0011 1111B
(2) 8位:[ Y ]原 = 1011 1111B, 16位:[ Y ]原 = 1000 0000 0011 1111B
(3) 8位:[ Z ]原 = 0111 0110B, 16位:[ Z ]原 = 0000 0000 0111 0110B
(4) 8位:[ W ]原 = 1111 0110B, 16位:[ W ]原 = 1000 0000 0111 0110B
2.7 选取字长n为8位和16位两种情况,求下列十进制数的补码。
(1) X = +65 (2) Y = -65 (3) Z = +127 (4) W = -128
答:方法: 最高位(D7或D15)为符号位,若为正数,则其余位是数值部分的二进制形式;若为负数,则其余位是数值部分的二进制形式按位取反后末位加1。
(1) 8位:[ X ]补 = 0100 0001B, 16位:[ X ]补= 0000 0000 0100 0001B
(2) 8位:[ Y ]补 = 1011 1111B, 16位:[ Y ]补= 1111 1111 1011 1111B
(3) 8位:[ Z ]补 = 0111 1111B, 16位:[ Z ]补= 0000 0000 0111 1111B
(4) 8位:[ W ]补 = 1000 0000B, 16位:[ W ]补= 1111 1111 1000 0000B
2.8 已知数的补码表示形式如下,分别求出数的真值与原码。
(1) [ X ]补 = 78H (2) [ Y ]补 = 87H
(3) [ Z ]补 = FFFH (4) [ W ]补= 800H
答:正数的原码与补码相同,负数的原码是补码的符号位不变,其余位按位取反后末位加1。
(1) [ X ]原 = 0111 1000B = 78H, X = 7×16+8 = 120
(2) [ Y ]原 = 1111 1001B =0F9H, Y = -(7×16+9) = -121
(3) [ Z ]原 = 0000 1111 1111 1111B = 0FFFH, Z = 4095
(4) [ W ]原 = 0000 1000 0000 0000B = 0800H, W = 2048
2.12 设X=87H,Y=78H,在下述两种情况下比较两数的大小。
(1) 均为无符号数 (2) 均为带符号数(设均为补码)
答:(1) 若均为无符号数,则X > Y
(2) 若均为带符号数,则最高位(符号位)为1的数为负数,最高位(符号位)为0的数为正数数,所以X < Y
2.13 选取字长n为8位,已知数的原码表示如下,求出其补码。
(1) [ X ]原 = 01010101 (2) [ Y ]原 = 10101010
(3) [ Z ]原 = 11111111 (4) [ W ]原 = 10000001
答:正数的补码与原码相同,负数的补码是原码的符号位不变,其余位按位取反后末位加1。
(1) [ X ]补 = 01010101B (2) [ Y ]补 = 11010110B
(3) [ Z ]补 = 10000001B (4) [ W ]补 = 11111111B
2.15 阐述微型计算机在算术运算时,所产生的“进位”与“溢出”二者之间的区别。
答:溢出是指带符号数的补码运算溢出,溢出及其判断方法:OF=D7C⊕D6C。进位是指运算结果的最高位向更高位的进位D7C。进位和溢出是两个不同性质的概念,不能混淆,两者没有必然的联系。
2.16 选字长n为8位,用补码列出竖式计算下列各式,并且回答是否有溢出。若有溢出,则是正溢出还是负溢出?
(1)0111 1001+0111 0000 (2)— 0111 1001— 0111 0001
(3)0111 1100 — 0111 1111 (4)— 0101 0001+0111 0001
答:(1)正溢出 (2)负溢出 (3)无溢出 (4)无溢出
第3章 8086/8088微处理器及其系统
3.2 8086 CPU有多少根数据线和地址线?它能寻址多少内存地址单元和I/O端口?8088 CPU有多少根数据线和地址线?为什么要
8088 CPU?
答:8086 CPU有16根数据线和20根地址线,可以寻址1MB的内存地址单元和64KB的I/O端口。
8088 CPU有16根数据线和20根地址线,但是8088的BIU通过总线控制电路与外部交换数据的总线宽度是8位,总线控制电路与专用寄存器之间的数据总线宽度也是8位。设计8088 CPU的目的是为了与Intel原有的8位外围接口芯片直接兼容。
3.6 逻辑地址和物理地址有何区别?为什么8086微处理器要引入“段加偏移”的技术思想?段加偏移的基本含义又是什么?试举例说明。
答:逻辑地址是指未定位之前在程序和指令中表示的一种地址,它包括两部分:段地址和偏移地址;物理地址又称为实际地址,它是指CPU对存储器进行访问时实际寻址所使用的地址。对8086 CPU而言,逻辑地址为16位,物理地址为20位,一个物理地址可对应多个逻辑地址。
“段加偏移”寻址机制允许重定位,极大地保证了系统兼容性。
CPU在处理数据时寻址的是20位的物理地址,限于8086/8088微处理器内部寄存器都是16位的,所以微处理器的地址加法器会自动地把16位段寄存器中的16位段地址左移4位,形成20位的段基址(段起始地址),然后同16位的偏移地址相加,才能形成20位的物理地址。这种方法称为段加偏移。
例如,若段地址为1123H,偏移地址为15H,将1123H左移4位,即11230H,则物理地址为PA = 11230H + 15H = 11245H。
3.14 IP寄存器的用途是什么?它提供的是什么信息?
答:IP是指令指针寄存器,在程序正常运行过程中,它用来存放BIU要取的下一条指令的偏移地址。IP在程序运行中能自动进行加1修正,使之总是指向要执行的下一条指令(字节)。IP与代码段寄存器CS组合构成指令的物理地址,以实现对代码段指令的自动跟踪。有些指令(调用子程序、中断等)能改变IP值或把IP值压入堆栈暂时保存,或者由堆栈弹出到IP以恢复指令指针的原值。
3.20 微处理器在什么情况下才执行总线周期?一个基本的总线周期由几个状态组成?在什么情况下需要插入等待状态?
答:当微处理器需要对存储器或I/O端口进行取指令或传送数据时,都需要它的总线接口单元BIU执行一个总线周期。
一个基本的总线周期由4个状态组成:T1 ~ T4。
当存储器或外设的速度较慢,不能及时地跟上CPU的速度时,存储器或外设就会通过“READY”信号线在T3状态启动之前向CPU发一“数据未准备好”信号,这样,CPU会在T3之后自动插入一个或多个等待状态TW,以等待存储器或外设准备好要传送的数据。
3.30 什么是寻址方式?8086/8088微处理器有哪几种主要的寻址方式?
答:寻址方式是指CPU根据指令功能所规定的操作码如何自动寻找相应的操作数或操作数所在地址的方式。8086/8088的操作数可位于寄存器、存储器或I/O端口中,CPU对其进行操作时就会涉及操作数的寻址方式。
8086/8088微处理器的主要寻址方式有:固定寻址、立即数寻址、寄存器寻址、存储器寻址等,其中存储器寻址又可分为:直接寻址和间接寻址,间接寻址又可分为:(相对)基址寻址、(相对)变址寻址、(相对)基址加变址寻址。
3.31 试写出寻址存储器操作数时计算有效地址EA的通式。
3.32 指出8086/8088下列指令源操作数的寻址方式。
(1)MOV AX, 1200H ;立即数寻址
(2) MOV BX, [1200H] ;直接寻址
(3) MOV BX, [SI] ;变址寻址
(4)MOV BX, [SI+1200H] ;相对变址寻址
(5)MOV [BX+SI], AL ;寄存器寻址
(6)ADD AX, [BX+DI+20H] ;相对基址加变址寻址
(7)MUL BL ;寄存器寻址
(8)JMP BX ;基址寻址(寄存器间接寻址)
(9)IN AL, DX ;间接端口寻址
(10)INC WORD PTR[BP+50H] ;相对基址寻址
3.33 指出8086/8088下列指令中存储器操作数物理地址的计算表达式。
(1)MOV AL, [DI] ;PA = DS×10H + DI
(2)MOV AX, [BX+SI] ;PA = DS×10H + BX + SI
(3)MOV AL, 8[BX+DI] ;PA = DS×10H + BX + DI + 8
(4)ADD AL, ES: [BX] ;PA = ES×10H + BX
(5)SUB AX, [2400H] ;PA = DS×10H + 2400H
(6)ADC AX, [BX+DI+1200H] ;PA = DS×10H + BX + DI + 1200H
(7)MOV CX, [BP+SI] ;PA = SS×10H + BP + SI
(8)INC BYTE PTR[DI] ;PA = DS×10H + DI
3.34 指出8086/8088下列指令的错误何在?
(1)MOV [SI], IP (2)MOV CS, AX
(3)MOV BL, SI+2 (4)MOV 60H, AL
(5)PUSH 2400H (6)INC [BX]
(7)MUL -60H (8)ADD [2400H], 2AH
(9)MOV [BX], [DI] (10)MOV SI, AL
(1)指令指针IP不能传送。
(2)CS段寄存器不能做操作数。
(3)传送类型不匹配,BL为8位,SI+2为16位。
(4)目的操作数不能为立即数。
(5)PUSH指令中操作数不能为立即数。
(6)应在指令前加伪指令BYTE PTR或WORD PTR表明是对字节进行加1操作还是对字进行加1操作。
(7)乘数不能为立即数。
(8)[2400H]前应加伪指令BYTE PTR或WORD PTR进行类型说明。
(9)两个操作数不能同为存储器操作数。
(10)类型不匹配,SI 为16位寄存器,而AL为8位寄存器。
3.36 阅读下列程序段,指出每条指令执行后有关寄存器的内容是多少?
MOV AX, 0ABCH ; AX ← 0ABCH
DEC AX ; AX ← 0ABBH
AND AX, 00FFH ;AX ← 00BBH (高8位屏蔽)
MOV CL, 4 ; CL ← 4
SAL AL, 1 ; AL ← 76H
MOV CL, AL ; CL ← 76H
ADD CL, 78H ; CL ← 0EEH
PUSH AX ; AX ← 0076H
POP BX ; BX ← 0076H
3.37 指出RET和IRET两条指令的区别,并说明各用在什么场合?
(1)RET和IRET是两条返回主程序的指令,但RET是与过程(子程序)调用指令CALL对应使用的过程返回指令,而IRET是与中断指令INT n对应使用的中断返回指令。
(2)RET指令应安排在子程序的出口,即子程序的最后一条指令处,它的功能是从堆栈顶部弹出由CALL指令压入的断点地址值IP或CS、IP,迫使CPU返回到调用程序的断点去继续执行。
(3)IRET指令总是安排在中断服务程序的出口处,由它控制从堆栈中弹出程序断点送回CS和IP中,弹出标志寄存器内容送回F中,迫使CPU返回到断点继续执行后续程序。
3.38 说明MOV BX, DATA和MOV BX, OFFSTE DATA指令之间的区别。
答: MOV BX, DATA是直接将DATA的值赋给BX寄存器;
MOV BX, OFFSTE DATA是将DATA在段内的偏移量赋给BX寄存器。
(注:DATA为变量名,它指内存中的一个数据区的名字,它可以作为指令中的存储器操作数来使用。变量仅对应于数据区中的第一个数据项,若需对数据区中其它数据项进行操作,必须用地址表达式指出哪个数据项是指令中的操作数。)
3.39 给定DS=1100H,BX=0200H,LIST=0250H,SI=0500H。试确定下面各条指令寻址存储器的地址。
(1)MOV LIST[SI], DX ;相对变址寻址
(2)MOV CL, LIST[BX+SI] ;相对基址加变址寻址
(3)MOV CH, [BX+SI] ;基址加变址寻址
(4)MOV DL, [BX+100H] ;相对基址寻址
答:
(1)PA = DS×10H + SI + LIST = 11000H + 0500H + 0250H = 11750H
(2)PA = DS×10H + BX + SI + LIST
= 11000H + 0200 + 0500H + 0250H = 11950H
(3)PA = DS×10H + BX + SI = 11000H + 0200H + 0500H = 11700H
(4)PA = DS×10H + BX + 100H = 11000H + 0200H + 100H = 11300H
3.40 假定PC机存储器低地址区有关单元的内容如下:
(20H)=3CH,(21H)=00H,(22H)=86H,(23H)=0EH且CS=2000H,IP=0010H,SS=1000H,SP=0100H,FLAGS=0240H,这时若执行INT 8指令,试问:
(1) 程序转向从何处执行(用物理地址回答)?
(2) 栈顶6个存储单元的地址(用逻辑地址回答)及内容分别是什么?
答:(1) CS = 0E86H,IP = 003CH
PA = CS×10H + IP = 0E860H + 003CH = 0E89CH
(2) 1000H: 00FAH 10H(12H)
1000H: 00FBH 00H
1000H: 00FCH 00H
1000H: 00FDH 20H
1000H: 00FEH 40H
1000H: 00FFH 02H
3.41 设SP=2000H,AX=3000H,BX=5000H,执行下列片段程序后,问SP=? AX=? BX=?
PUSH AX ; SP ← SP - 2 = 1FFEH,AX=3000H
PUSH BX ; SP ← SP - 2 = 1FFCH,BX=5000H
POP AX ; SP ← SP + 2 = 1FFEH,AX=5000H
答: SP = 1FFEH, AX = 5000H, BX = 5000H
3.43 若AX=5555H,BX=FF00H,试问在下列程序段执行后,AX=? BX=? CF=?
AND AX, BX ; AX = 5500,BX = FF00H
XOR AX, AX ; AX = 0000H
NOT BX ; BX = 00FFH
答: AX = 0000H, BX = 00FFH
由于AND、OR、XOR指令的运算结果使CF=0,NOT指令的运算结果不影响CF位,所以CF = 0。
3.44 若CS=E000H,说明代码段可寻址物理存储地址空间的范围。
答: 首地址为: CS×10H + 0000H = E0000H
末地址为: CS×10H + FFFFH = EFFFFH
故代码段可寻址物理存储地址空间的范围为E0000H ~ EFFFFH,共64KB。
3.45 若DS=3000H,BX=2000H,SI=0100H,ES=4000H,计算出下述各条指令中存储器操作数的物理地址。
(1) MOV [BX], AH (2) ADD AL, [BX+SI+1000H]
(3) MOV AL, [BX+SI] (4) SUB AL, ES: [BX]
答: (1) PA = DS×10H + BX = 30000H + 2000H = 32000H
(2) PA = DS×10H + BX + SI + 1000H
= 30000H + 2000H + 0100H + 1000H = 33100H
(3) PA = DS×10H + BX + SI = 30000H + 2000H + 0100H = 32100H
(4) PA = ES×10H + BX = 40000H + 2000H = 42000H
3.46 试比较SUB AL, 09H与CMP AL, 09H这两条指令的异同,若AL=08H,分别执行上述两条指令后,SF=? CF=? OF=? ZF=?
答: SUB AL, 09H ; AL← AL - 09H
结果返回AL寄存器,且根据结果置标志位。
CMP AL, 09H ; AL - 09H
只根据结果置标志位,结果不返回AL寄存器。
执行SUB AL, 09H指令后,AL=FFH, SF=1, CF=1, OF=0, ZF=0;
执行CMP AL, 09H指令后,AL=08H, SF=1, CF=1, OF=0, ZF=0。
3.47 选用最少的指令,实现下述要求的功能。
(1) AH的高4位清零;
(2) AL的高4位取反;
(3) AL的高4位移到低4位,高4位清零。
(4) AH的低4位移到高4位,低4位清零。
答: (1) AND AH, 0FH
(2) XOR AL, 0F0H
(3) MOV CL, 4
SHR AL, CL
(4) MOV CL, 4
SHL AH, CL
3.48 设BX=6D16H,AX=1100H,写出下列指令执行后BX寄存器的内容。
MOV CL, 06H
ROL AX, CL
SHR BX, CL
答: AX = 1100H = 0001 0001 0000 0000B
循环左移6位后:AX = 0100 0000 0000 0100B = 4004H
BX = 6D16H = 0110 1101 0001 0110B
逻辑右移6位后:BX = 0000 0001 1011 0100B = 01B4H
3.49 设初值AX=0119H,执行下列程序段后AX=?
MOV CH, AH ; CH ← 01H
ADD AL, AH ; AL ← 1AH
DAA ; AL ← 20H,CF = 0
XCHG AL, CH ; AL ← 01H,CH ← 20H
ADC AL, 34H ; AL ← 35H
DAA ; AL ← 35H
MOV AH, AL ; AH ← 35H
MOV AL, CH ; AL ← 20H
HLT
答: AX = 3520H
3.50 设初值AX=6264H,CX=0004H,在执行下列程序段后AX=?
AND AX, AX ; AX ← 6264H
JZ DONE ; AX=0,则转;AX≠0,顺序执行
SHL CX, 1 ; CX ← 0008H
ROR AX, CL ; AX ← 6462H
DONE: OR AX, 1234H ; AX ← 7676H
答: AX=7676H
3.51 写出可使AX清零的几条指令。
答: MOV AX, 0
SUB AX, AX
AND AX, 0000H
XOR AX, AX
3.71 设计一个程序段,将DH中的最左3位清0,而不改变DH中的其它位,结果存入BH中。
答: AND DH, 1FH
MOV BH, DH
3.73 设计一个程序段,将DI中的最右5位置1,而不改变DI中的其它位,结果存入SI中。
答: OR DI,001FH
MOV SI,DI
3.74 设计一个程序段,将AX中的最右4位置1,将AX中的最左3位清0,并且把AX中的7、8、9位取反。
答: OR AL, 0FH
AND AH, 1FH
XOR AX, 0380H
3.75 选择正确的指令以实现下列任务。
(1) 把DI右移3位,再把0移入最高位。
(2) 把AL中的所有位左移1位,使0移入最低位。
(3) AL循环左移3位。
(4) DX带进位位循环右移1位。
答: (1) MOV CL, 3
SHR DI, CL
(2) SAL AL, 1
(3) MOV CL, 3
ROL AL, CL
(4) RCR DX, 1
3.82 在执行中断返回指令IRET和过程(子程序)返回指令RET时,具体操作内容有什么区别?
答:执行中断返回指令IRET指令时,具体操作内容为:
(1)先将由SP所指定的堆栈内容弹出至IP,恢复IP值:
IP ← (SP), SP ← SP+2
(2)再将由SP所指定的堆栈内容弹出至CS,恢复CS值:
CS ← (SP), SP ← SP+2
(3)最后将由SP所指定的堆栈内容弹出至标志寄存器FLAGS,恢复标志寄存器的值:
FLAGS ← (SP), SP ← SP+2
执行过程(子程序)返回指令RET时,具体操作步骤同(1)、(2)步的内容,但没有第(3)步。
第4章 8086/8088汇编语言程序设计
4.2 下列程序段执行后,寄存器AX、BX、和CX的内容分别是多少?
ORG 0202H
DA_WORD DW 20H
MOV AX, DA_WORD ; AX = 0020H
MOV BX, OFFSET DA_WORD ; BX = 0202H
MOV CL, BYTE PTR DA_WORD ; CL = 20H
MOV CH, TYPE DA_WORD ; CH = 2
答:程序段执行后, AX=0020H, BX=0202H, CX=0220H。
4.7 写出下列逻辑地址的段地址,偏移地址和物理地址。
(1)4312H: 0B74H
(2)10ADH: 0DE98H
(3)8314H: 0FF64H
(4)78BCH: 0FD42H
答: (1)段地址:4312H,偏移地址:0B74H
物理地址:PA = 4312H×10H + 0B74H = 43C94H
(2)段地址:10ADH,偏移地址:0DE98H
物理地址:PA = 10ADH×10H + 0DE98H = 1E968H
(3)段地址:8314H, 偏移地址:0FF64H
物理地址:PA = 8314H×10H + 0FF64H = 83204H
(4)段地址:78BCH,偏移地址:0FD42H
物理地址:PA = 78BCH×10H + 0FD42H = 88902H
4.8 某程序设置的数据区如下所示。
DATA SEGMENT
DB1 DB 12H, 34H, 0, 56H
DW1 DW 78H, 90H, 0AB46H, 1234H
ADR1 DW DB1
ADR2 DW DW1
AAA DW $-DB1
DUF DB 5 DUP(0)
DATA ENDS
画出该数据段内容在内存中的存放形式(要求用十六进制补码表示,按字节组织)
答:
0
DB1
12H
12
ADR1
00H
1
34H
13
00H
2
00H
14
ADR2
04H
3
56H
15
00H
4
DW1
78H
16
AAA
10H
5
00H
17
00H
6
90H
18
BUF
00H
7
00H
19
00H
8
46H
20
00H
9
0ABH
21
00H
10
34H
22
00H
11
12H
4.9 假设BX=54A3H,变量VALUE中存放的内容为68H,确定下列各条指令单独执行后BX=?
(1)XOR BX, VALUE ; BX = 54CBH
(2)OR BX, VALUE ; BX = 54EBH
(3)AND BX, 00H ; BX = 0
(4)SUB BX, VALUE ; BX = 543BH
(5)XOR BX, 0FFH ; BX = 545CH
(6)TEST BX, 01H ; BX = 54A3H
4.11 假设数据段的定义如下所示:
P1 DW ?
P2 DB 32 DUP(?)
PLENTH EQU $-P1
试问PLENTH的值为多少?它表示什么意义?
答: PLENTH = 2 + 32 = 34
它表示以P1和P2开头的成组变量共占用了多少个字节的内存空间。
第5章 微机的存储器
5.4 某一RAM内部采用两个32选1的地址译码器,并且有一个数据输入端和一个数据输出端,试问:
(1)该RAM的容量是多少?
(2)基本存储电路采用何种译码电路?
(3)存储阵列排列成怎样一种阵列格式?
答: (1)容量是:32×32 = 1024bit = 1Kb;
(2)基本存储电路采用双译码方式;
(3)存储阵列排列成32×32的矩阵。
5.5 设有一个具有13位地址和8位字长的存储器,试问:
(1)存储器能存储多少字节信息?
(2)如果存储器由1K×4位RAM芯片组成,共计需要多少片?
(3)需要哪几位高位地址做片选译码来产生芯片选择信号?
答:
(1)存储器能存储信息:213×8位 = 8KB;
(2)若由1K×4位RAM芯片组成,则位扩充需要2片,容量扩充需要8片,共计2×8=16片;
(3)扩充的8组芯片需用3-8译码器进行片选,由于地址总线的A9~A0需要与各RAM芯片地址线并联,所以用高位地址A12、A11、A10作片选译码来产生芯片选择信号。
5.6 下列RAM各需要多少地址线进行寻址?多少条数据I/O线?
RAM
地址线
I/O线
512×4
9
4
1K×4
10
4
1K×8
10
8
2K×1
11
1
4K×1
12
1
16K×4
14
4
64K×1
16
1
256K×4
18
4
5.7 分别用1024×4位和4K×2位芯片构成64K×8位的随机存取存储器,各需多少片?
答:
(1)由1024×4位的芯片组成64K×8位的RAM芯片,位扩充需要2片,容量扩充需要64片,共计64×2=128片;
(2)用4K×2位的芯片组成64K×8位的RAM芯片,位扩充需要4片,容量扩充需要16片,共计16×4=64片。
5.8 在有16根地址总线的微机系统中,根据下面两种情况设计出存储器片选的译码电路及其与存储器芯片的连接电路。
(1)采用1K×4位存储器芯片,形成32K字节存储器。
(2)采用2K×8位存储器芯片,形成32K字节存储器。
答:
(1)由1K×4位的芯片组成32K字节存储器,位扩充需要2片,容量扩充需要32片,共计32×2=64片;
(2)用2K×8位的芯片组成32K字节存储器,不需要进行位数扩充,容量扩充需要16片,即共需16片。
5.10 使用下列RAM芯片,组成所需的存储容量,问各需多少RAM芯片?各需多少RAM芯片组?共需多少条寻址线?每块片子需多少条寻址线?
(1)512×2位的芯片,组成8KB的存储容量。
(2)1K×4位的芯片,组成64KB的存储容量。
答:(1)位扩充需要4片,容量扩充需要16片,共需4×16=64片(分为16组,每组4片),共需13根地址线,每块芯片需9条地址线。
(2)位扩充需要2片,容量扩充需要64片,共需2×64=128片(分为64组,每组2片),共需16根地址线,每块芯片需10条地址线。
5.16 256×4位的RAM芯片,组成4KB的存储容量,
(1)每片需要多少地址线?
(2)共需多少地址线?
(3)多少块芯片?
(4)多少芯片组?
答:
(1)256=28,故每片需要8根地址线。
(2)4K=212,故共需12根地址线。
(3)用256×4位的芯片组成4KB的存储器,位扩充需要2片,容量扩充需要16片,共计16×2=32片。
(4)2片为1组,共16个芯片组。
5.19 已知某RAM芯片的引脚共有12根地址线,8位数据线,该存储器的容量为多少字节?若该芯片所占存储空间的起始地址为1000H,其结束地址是多少?
答:
(1)存储器容量为212×8位 = 4KB;
(2)该存储器的绝对地址范围为000H ~ FFFH,所以,若该芯片所占存储空间的起始地址为1000H,则其结束地址为1FFFH。
5.23 已知某16位微机系统的CPU与RAM连接的部分示意图,若RAM采用每片容量为2K×2位的芯片,试填空回答下列问
(1)根据题意,本系统需要该种芯片( 32 )片
(2)设由74LS138的
和
端分别引出引线连至RAM1和RAM2两组芯片的
端,则RAM1和RAM2的地址范围分别是( 0FA800H ~ 0FAFFFH )与( 0FB000H ~ 0FB7FFH )。
说明:因为16位微机系统的存储器中数据仍是按字节存放,所以该题中存储器的位数最大可扩充为8位,因此需要4片2K×2位的芯片进行位扩充;另外,存储器的地址线共用了14根(A0~A13),所以容量是由2K扩充为16K(214),需要8片2K×2位的芯片。
综上,此16位微机系统的CPU进行存储器扩充时共需要2K×2位芯片的数目为4×8 = 32片。扩充后存储器的容量为16K×8位,即16KB。
(这里可参考一下教材中关于16位微处理器8086存储器的扩充)
第6章 输入输出与中断
6.2 接口电路的信息可以分为哪几类?接口电路的基本结构特点?
答:
(1)接口电路的信息可以分为:数据信息、状态信息和控制信息
(2)根据传送不同信息的需要,接口电路的基本结构有如下特点:
① 3种(数据、状态、控制)信息的性质不同,应通过不同的端口分别传送。
② 在用输入输出指令(IN/OUT)来寻址外设(实际寻址端口)的CPU中,外设的状态作为一种输入数据,而CPU的控制命令,是作为一种输出数据,从而可通过数据总线来分别传送。
③ 端口地址由CPU地址总线的低8位或低16位地址(如8086用DX间接寻址外设端口时)信息来确定,CPU根据I/O指令提供的端口地址来寻址端口,然后同外设交换信息。
6.3 CPU与外设交换数据的传送方式可分为哪几种?试简要说明它们各自的特点。
答:CPU与外设交换数据的传送方式可分为3种:程序传送、中断传送和直接存储器存取(DMA)传送。
程序查询输入输出传送方式适用于计算机工作任务较轻或CPU不太忙的情况;优点:能较好的协调外设和CPU之间定时的差别;程序和接口电路比较简单;缺点:CPU必须作程序等待循环,不断测试外设的状态,直至外设为交换数据准备就绪。此循环等待方式很花费时间,大大降低了CPU的运行效率。在实时控制系统中,一般具有多个工作速度不同的外设,CPU要为这些外设服务,程序查询传送方式不但浪费大量等待查询时间,而且很难使每个外设都工作在最佳状态。
中断方式由外设主动向CPU提出中断请求信号,CPU在每条指令执行的结尾阶段,均查询是否有中断请求信号,若有,则暂停执行现行程序,转去为申请中断的某个外设服务。CPU不必花费时间去查询外设的状态,由硬件完成对中断请求的查询,不占用CPU工作时间。但是中断方式下,CPU仍然要做很多工作,效率降低。例如,每进行1次传送,CPU都需要执行一次中断处理程序;CPU每次都要保护断点、标志寄存器,必要时还要保护其它寄存器;进入中断后,指令队列要清除,BIU(总线接口单元)要重新取指令,而EU(执行单元)要等待;中断返回时,仍要清除指令队列,BIU重新取指令,EU等待。
DMA传送方式让外设接口可直接与内存进行高速的数据传送,而不必经过CPU,可实现对存储器的直接存取。数据的传输速度基本上决定于外设和存储器的速度。DMA传输方式要利用系统总线进行数据传输。因此,在传输数据时,DMA控制器要向CPU发出占用总线的请求。一般用于高速成组的数据传送。
6.5 什么叫中断?什么叫中断源?
答:中断:使CPU暂停运行原来的程序,按照更为急迫事件的需要转去执行为中断源服务的程序(称为中断服务程序),待该程序处理完后,再返回运行原程序。
中断源:引起中断的事件或原因,或发出中断申请的来源。
6.7 什么叫中断系统?中断系统有哪些功能?微机的中断技术有什么优点?
答:(1)中断系统是指为实现中断而设置的各种硬件和软件,包括中断控制逻辑及相应管理中断的指令。
(2)中断系统应具有下列功能:
① 能响应中断、处理中断与返回
② 能实现优先权排队
③ 高级中断源能中断低级的中断处理
(3) 微机的中断技术可解决快速CPU与中、慢速外设速度不匹配的矛盾,以提高主机的工作效率。
6.11 在I/O控制方式中,中断和DMA有何主要异同?
答:两者都是由外设主动提出申请,但中断方式需要通过程序传送数据,并在处理的过程中还要“保护现场”和“恢复现场”,而DMA方式可以让外设与内存直接交换数据,不必经过CPU,所以处理速度更快,实时性更强。
6.12 向量中断与中断向量在概念上有何区别?中断向量与中断入口地址又有何区别?
答:(1)向量中断是通过中断向量来找中断入口地址进而转向中断服务程序的一种方法。中断向量是用来提供中断入口地址的一个地址指针。
(2)入口地址是指中断程序的实际地址,即段地址CS左移4位加偏移量IP所得的和。
6.13 什么是中断向量表?在8086/8088的中断向量表中有多少个不同的中断向量?已知中断类型号,如何在中断向量表中查找中断向量?
答:
(1)中断向量表也称中断入口地址表,用它来指出中断服务程序的入口地址。
(2)在8086/8088的中断向量表中有256个不同的中断向量。
(3)略
6.15 试比较主程序转入中断服务程序和主程序调用子程序的主要异同点。
答:两者都是从主程序处转而执行其他程序,都要保护断点,但中断服务程序还需要将标志寄存器F压入堆栈,并用IRET返回,而主程序调用子程序用RET返回。
6.16 试比较保护断点与保护现场的主要异同?
答:保护断点是将断点的CS和IP值压栈保护,而保护现场是将断点的标志寄存器和其它有关寄存器的内容压栈保护起来。
6.17对8086/8088 CPU的NMI引脚上的中断请求应当如何处理?
答:当8086/8088 CPU的NMI引脚上出现一上升沿的边沿触发有效请求信号(脉冲的有效宽度(高电平的持续时间)要大于两个时钟周期)时,它将由CPU内部的锁存器将其锁存起来。一旦NMI中断请求信号产生,不管标志位IF的状态如何,CPU都能响应此中断。