微机原理与接口技术第三版吴宁冯博琴试题库含答案.docx
《微机原理与接口技术第三版吴宁冯博琴试题库含答案.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术第三版吴宁冯博琴试题库含答案.docx(19页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术第三版吴宁冯博琴试题库含答案
1.假定〔BX〕=637DH,〔SI〕=2A9BH,位移量D=3237H,试确定在以下各种寻址方式下的有效地址是什么?
〔1〕立即寻址
〔2〕直接寻址
〔3〕使用BX的寄存器寻址
〔4〕使用BX的间接寻址
〔5〕使用BX的寄存器相对寻址
〔6〕基址变址寻址
〔7〕相对基址变址寻址
答:
〔1〕立即数寻址的有效地址是当前IP的内容;
〔2〕直接寻址,假设使用位移量D=3237H进行,则有效地址为3237H;
〔3〕使用BX的寄存器寻址时,操作数在BX寄存器中,因此无有效地址;
〔4〕使用BX的间接寻址时,有效地址在BX寄存器中,即有效地址=637DH;
〔5〕使用BX的寄存器相对寻址的有效地址=〔BX〕+D=637DH+3237H=95B4H;
〔6〕基址变址寻址的有效地址=〔BX〕+〔SI〕=637DH+2A9BH=8E18H;
〔7〕相对基址变址寻址的有效地址=〔BX〕+〔SI〕+D=C050H;
2.写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。
要求使用以下几种寻址方式:
〔1〕寄存器间接寻址
〔2〕寄存器相对寻址
〔3〕基址变址寻址
答:
〔1〕使用寄存器间接寻址,把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令为:
MOVBX,BLOCK
ADDBX,12
MOVDX,[BX]
〔2〕使用寄存器相对寻址,把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令为:
MOVBX,BLOCK
MOVDX,[BX+12]
〔3〕使用基址变址寻址,把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令为:
MOVBX,BLOCK
MOVSI,12
MOVDX,[BX+SI]
3.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明以下各条指令执行完后AX寄存器的内容。
〔1〕MOVAX,1200H
〔2〕MOVAX,BX
〔3〕MOVAX,[1200H]
〔4〕MOVAX,[BX]
〔5〕MOVAX,[BX+1100]
〔6〕MOVAX,[BX+SI]
〔7〕MOVAX,[BX+SI+1100]
答:
〔1〕指令MOVAX,1200H执行完后AX寄存器的内容为1200H;
〔2〕指令MOVAX,BX执行完后AX寄存器的内容为0100H;
〔3〕指令MOVAX,[1200H]是将从物理地址=〔DS〕*10H+1200H=21200H开始的两个单元内容送AX,执行完后AX寄存器的内容为4C2AH;
〔4〕指令MOVAX,[BX]是将从物理地址=〔DS〕*10H+〔BX〕=20100H开始的两个单元内容送AX,故执行完后AX寄存器的内容为3412H;
〔5〕指令MOVAX,[BX+1100]是将从物理地址=〔DS〕*10H+〔BX〕+1100H=21200H开始的两个单元内容送AX,故执行完后AX寄存器的内容为4C2AH;
〔6〕指令MOVAX,[BX+SI]是将从物理地址=〔DS〕*10H+〔BX〕+〔SI〕=20102H开始的两个单元内容送AX,故执行完后AX寄存器的内容为7856H;
〔7〕指令MOVAX,[BX+SI+1100]是将从物理地址=〔DS〕*10H+〔BX〕+〔SI〕+1100H=21202H开始的两个单元内容送AX,故执行完后AX寄存器的内容为65B7H;
4.假设已知(DS)=2900H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出以下源操作数字段的寻址方式是什么?
其物理地址值是多少?
〔1〕MOVAX,0ABH〔2〕MOVAX,BX
〔3〕MOVAX,[100H]〔4〕MOVAX,VAL
〔5〕MOVAX,[BX]〔6〕MOVAX,ES:
[BX]
〔7〕MOVAX,[BP]〔8〕MOVAX,[SI]
〔9〕MOVAX,[BX+10]〔10〕MOVAX,VAL[BX]
〔11〕MOVAX,[BX][SI]〔12〕MOVAX,[BP][SI]
答:
〔1〕在指令MOVAX,0ABH中,源操作数字段的寻址方式是立即数寻址,其物理地址值=〔CS〕*10H+〔IP〕;
〔2〕在指令MOVAX,BX中,源操作数字段的寻址方式是寄存器寻址,操作数在BX中,无物理地址;
〔3〕在指令MOVAX,[100H]中,源操作数字段的寻址方式是直接寻址,其物理地址值=〔DS〕*10H+100=29000H+100H=29100;
〔4〕在指令MOVAX,VAL中,源操作数字段的寻址方式是直接寻址,其物理地址值=〔DS〕*10H+50H=29000H+50H=29050H;
〔5〕在指令MOVAX,[BX]中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=〔DS〕*10H+〔BX〕=29000H+100H=29100H;
〔6〕在指令MOVAX,ES:
[BX]中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=〔ES〕*10H+〔BX〕=21000H+100H=21100H;
〔7〕在指令MOVAX,[BP]中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=〔SS〕*10H+〔BP〕=15000H+10H=15010H;
〔8〕在指令MOVAX,[SI]中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=〔DS〕*10H+〔SI〕=29000H+0A0H=290A0H;
〔9〕在指令MOVAX,[BX+10]中,源操作数字段的寻址方式是寄存器相对寻址,其物理地址值=〔DS〕*10H+〔BX〕+0AH=29000H+100H+0AH=2910AH;
〔10〕在指令MOVAX,VAL[BX]中,源操作数字段的寻址方式是寄存器相对寻址,其物理地址值=〔DS〕*10H+〔BX〕+50H=29000H+100H+50H=29150H;
〔11〕在指令MOVAX,[BX][SI]中,源操作数字段的寻址方式是基址变址寻址,其物理地址值=〔DS〕*10H+〔BX〕+〔SI〕=29000H+100H+0A0H=291A0H;
〔12〕在指令MOVAX,[BP][SI]中,源操作数字段的寻址方式是基址变址寻址,其物理地址值=〔SS〕*10H+〔BP〕+〔SI〕=15000H+10H+0A0H=150B0H
5.分别指出以下指令中的源操作数和目的操作数的寻址方式。
〔1〕MOVSI,200
〔2〕MOVCX,DATA[SI]
〔3〕ADDAX,[BX+DI]
〔4〕ANDAX,BX
〔5〕MOV[SI],AX
〔6〕PUSHF
答:
〔1〕目的操作数字段的寻址方式是寄存器寻址,源操作数字段的寻址方式是立即数寻址;
〔2〕目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式是寄存器相对寻址;
〔3〕目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式是基址变址寻址;
〔4〕目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式也是寄存器寻址;
〔5〕目的操作数的寻址方式是寄存器间接寻址,源操作数的寻址方式是寄存器寻址;
〔6〕目的操作数的寻址方式是寄存器间接寻址,源操作数的寻址方式是寄存器寻址;
6.试述指令MOVAX,2010H和MOVAX,DS:
[2010H]的区别。
答:
指令MOVAX,2010H是将立即数2010H送AX寄存器,而指令MOVAX,DS:
[2010H]是将DS段有效地址为2010H的两个单元的内容送AX。
7.写出以下指令中内存操作数的所在地址。
〔1〕MOVAL,[BX+5]
〔2〕MOV[BP+5],AX
〔3〕INCBYTEPTR[SI+3]
〔4〕MOVDL,ES:
[BX+DI]
〔5〕MOVBX,[BX+SI+2]
答:
〔1〕指令MOVAL,[BX+5]中内存操作数的所在地址=〔DS〕*10H+〔BX〕+5;
〔2〕指令MOV[BP+5],AX中内存操作数的所在地址=〔SS〕*10H+〔BP〕+5和〔SS〕*10H+〔BP〕+6;
〔3〕指令INCBYTEPTR[SI+3]中内存操作数的所在地址=〔DS〕+〔SI〕+3;
〔4〕指令MOVDL,ES:
[BX+DI]中内存操作数的所在地址=〔ES〕*10H+〔BX〕+〔DI〕;
〔5〕指令MOVBX,[BX+SI+2]中内存操作数的所在地址=〔DS〕*10H+〔BX〕+〔SI〕+2和〔DS〕*10H+〔BX〕+〔SI〕+3;
8.判断以下指令书写是否正确,如有错误,指出错在何处并用正确的程序段〔一条或多条指令〕实现原错误指令((8)、(13)除外)期望实现的操作。
〔1〕MOVAL,BX〔9〕MOVES,3278H
〔2〕MOVAL,SL〔10〕PUSHAL
〔3〕INC[BX]〔11〕POP[BX]
〔4〕MOV5,AL〔12〕MOV[1A8H],23DH
〔5〕MOV[BX],[SI]〔13〕PUSHIP
〔6〕MOVBL,F5H〔14〕MOV[AX],23DH
〔7〕MOVDX,2000H〔15〕SHLAX,5
〔8〕POPCS〔16〕MULAX,BX
答:
〔1〕MOVAL,BX错,源操作数为字类型,目的操作数为字节类型,二者不一致。
应改为:
MOVAX,BX或MOVAL,BL;
〔2〕MOVAL,SL错,SI寄存器不能分为高8位和低8位使用,即没有SL寄存器。
应改为:
MOVAX,SI
〔3〕INC[BX]错,未指定操作数的类型。
应改为:
INCBYTEPTR[BX]〔4〕MOV5,AL错,目的操作数使用了立即数,在指令中一般不允许。
应改为:
MOVDS:
[5],AL
〔5〕MOV[BX],[SI]错,源操作数和目的操作数均为内存单元,不允许。
应改为:
MOVAX,[SI]
MOV[BX],AX
〔6〕MOVBL,F5H错,源操作数错,以A~F开头的数字前应加0。
应改为:
MOVBL,0F5H
〔7〕MOVDX,2000H正确。
〔8〕POPCS错,不能将栈顶数据弹至CS中。
〔9〕MOVES,3278H错,立即数不能直接送ES寄存器。
应改为:
MOVAX,3278H
MOVES,AX
〔10〕PUSHAL错,栈操作不能按字节进行。
应改为:
PUSHAX
〔11〕POP[BX]正确。
〔12〕MOV[1A8H],23DH错,源操作数是立即数,目的操作数必须使用寄存器指出。
应改为:
MOVBX,1A8H
MOV[BX],23DH
〔13〕PUSHIP错,不能用IP寄存器做源操作数。
〔14〕MOV[AX],23DH错,不能用AX寄存器间接寻址。
应改为:
MOVBX,AX
MOV[BX],23DH
〔15〕SHLAX,5错,不能用大于己于1的立即数指出移位位数。
应改为:
MOVCL,5
SHLAX,CL
〔16〕MULAX,BX错,目的操作数AX是隐含的,不能在指令中写出。
应改为:
MULBX
9.设堆栈指针SP的初值为2000H,AX=3000H,BX=5000H,试问:
〔1〕执行指令PUSHAX后(SP)=?
〔2〕再执行PUSHBX及POPAX后(SP)=?
(AX)=?
(BX)=?
答:
〔1〕执行指令PUSHAX后(SP)=2000H-2=1FFEH;
〔2〕再执行PUSHBX及POPAX后(SP)=1FFEH,(AX)=5000H,(BX)=5000H
10.要想完成把[2000H]送[1000H]中,用指令:
MOV[1000H],[2000H]是否正确?
如果不正确,应用什么方法?
答:
把[2000H]送[1000H]中,用指令MOV[1000H],[2000H]不正确,应改为:
MOVAX,[2000H]MOV[1000H],AX
11.假设想从200中减去AL中的内容,用SUB200,AL是否正确?
如果不正确,应用什么方法?
答:
想从200中减去AL中的内容,用SUB200,AL不正确,应改为:
MOVBL,200SUBBL,AL
12分别写出实现如下功能的程序段
(1)双字减法〔被减数7B1D2A79H,减数53E2345FH〕。
(2)使用移位指令实现一个字乘18的运算。
(3)使用移位指令实现一个字除以10的运算。
(4)将AX中间8位,BX低四位,DX高四位拼成一个新字。
(5)将数据段中以BX为偏移地址的连续四个单元的内容颠倒过来
(6)将BX中的四位压缩BCD数用非压缩BCD数形式顺序放在AL、BL、CL、DL中。
答:
(1)双字减法的程序段是:
MOVAX,2A79H;被减数的低位字送AX
SUBAX,345FH;低位字相减,结果送AX
MOVBX,7B1DH;被减数的高位字送BX
SBBBX,53E2H;高位字相减处并减去低位字相减产生的借位,结果送BX
(2)使用移位指令实现一个字乘18的程序段是:
MOVAX,05F7H;被乘数送AX
SHLAX,1;被乘数乘以2,结果在AX中
MOVBX,AX;被乘数乘以2的结果暂存到BX
MOVCL,3;设置移位位数3
SHLAX,CL;被乘数再乘以8〔共乘以16〕,结果在AX中
ADDAX,BX;被乘数再乘以18,结果在AX中
(3)使用移位指令实现一个字除以10的运算,必须将X/10拆分成多项的和,而每一项都应是非的某次幂的倒数。
利用等比级数的前N项和公式,可求出A0=X/8,公比Q=-1/4,故X/10=X/8-X/32+X/128-X/512+...,
所求的程序段是:
MOVAX,FE00H;被除数送AX
MOVCL,3;设置移位位数3
SHRAX,CL;被乘数除以8,结果在AX中
MOVBX,AX;被乘数除以8的结果暂存到BX
MOVCL,2;设置移位位数2
SHRAX,CL;被乘数除以4〔累计除32〕,结果在AX中
SUBBX,AX;被除数/8-被除数/32,结果在BX中
MOVCL,2;设置移位位数2
SHRAX,CL;被乘数除以4〔累计除128〕,结果在AX中
ADDBX,AX;被除数/8-被除数/32+被除数/128,结果在BX中
MOVCL,2;设置移位位数2
SHRAX,CL;被乘数除以4〔累计除512〕,结果在AX中
SUBBX,AX;被除数/8-被除数/32+被除数/128-被除数/512,结果在BX中
(4)将AX中间8位,BX低四位,DX高四位拼成一个新字的程序段是:
ANDDX,0F000H;将DX的低12位清零,高4位不变
ANDAX,0FF0H;将AX的低4位清零,高4位清零,中间8位不变
ANDBX,0FH;将BX的高12位清零,低4位不变
ADDAX,BX
ADDAX,DX;按要求组成一个新字,结果放在AX中。
(5)将数据段中以BX为偏移地址的连续四个单元的内容颠倒过来的程序段是:
MOVAL,[BX];数据段中BX为偏移地址的字单元内容送AX
XCHGAL,[BX+3];数据段中BX+3为偏移地址的字单元内容与AX的内容交换
MOV[BX],AL;数据段中BX+3为偏移地址的字单元内容送BX为偏移地址的字单元
MOVAL,[BX+1];数据段中BX+1为偏移地址的字单元内容送AX
XCHGAL,[BX+2];数据段中BX+2为偏移地址的字单元内容与AX的内容交换
MOV[BX+1],AL;数据段中BX+2为偏移地址的字单元内容送BX+1为偏移地址的字单元
(6)将BX中的四位压缩BCD数用非压缩BCD数形式顺序放在AL、BL、CL、DL中的程序段是:
MOVDL,BL;四位压缩BCD数的低位字节送DL
ANDDL,0FH;DL的高4位清零,得四位非压缩BCD数的最低位,放入DL中
MOVCL,4;设置移位位数4
SHRBX,CL;BX中的数据逻辑右移4位,使四位压缩BCD数的次低位位于BL的低4位
MOVCH,BL;将BL的内容暂存到CH中保留
ANDCH,0FH;CH的高4位清零,得四位非压缩BCD数的次低位,放CH中
MOVCL,4;设置移位位数4
SHRBX,CL;BX中的数据逻辑右移4位,使四位压缩BCD数的次高位位于BL的低4位
MOVAL,BL;将BL的内容暂存到AL中保留
ANDBL,0FH;BL的高4位清零,得四位非压缩BCD数的次高位,放BL中
MOVCL,4;设置移位位数4
SHRAL,CL;使四位压缩BCD数的最高位位于AL的低4位,得四位非压缩BCD数的次高
;位,放入BL中
MOVCL,CH;将四位非压缩BCD数的次低位移入CL中
10.编写一个程序,要求运行时屏幕显示‘BELL’,同时响铃一次(响铃的ASCII码为07)。
答:
所求程序为:
CodeSEGMENT
ASSUMECS:
code
Start:
MOVDL,42H
MOVAH,2
INT21H
MOVDL,45H
MOVAH,2
INT21H
MOVDL,4CH
MOVAH,2
INT21H
MOVDL,4CH
MOVAH,2
INT21H
MOVDL,7
MOVAH,2
INT21H
MOVAH,4CH
INT21H
CodeENDS
ENDStart
11.假设在数据段X_SEG、附加段Y_SEG和堆栈段Z_SEG中分别定义了字变量X、Y和Z,试编制一完整的程序计算X+Y+Z,并将结果送X。
答:
所求程序为:
X_SEGSEGMENT
XDW12eH
X_SEGENDS
Y_SEGSEGMENT
YDW4d2H
Y_SEGENDS
Z_SEGSEGMENTSTACK‘STACK’
ZDW2CAH
Z_SEGENDS
CodeSEGMENT
ASSUMECS:
Code,DS:
X_SEG,ES:
Y_SEG,SS:
Z_SEG
Start:
MOVAX,X_SEG
MOVDS,AX
MOVAX,Y_SEG
MOVES,AX
MOVAX,ES:
Y
ADDX,AX
MOVBP,0
MOVAX,[BP+Z]
ADDX,AX
MOVAH,4CH
INT21H
CodeENDS
ENDStart
12.写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的DADD1和附加段E_SEG中的DADD2相加,并把结果存放在D_SEG段中的SUM中。
其中DADD1、DADD2和SUM均为双字类型,DADD1赋值为98765,DADD2赋值为-15893。
答:
所求程序为:
D_SEGSEGMENT
DADD1DD98765
SUMDD?
D_SEGENDS
E_SEGSEGMENT
DADD2DD-15893
E_SEGENDS
C_SEGSEGMENT
ASSUMECS:
C_SEG,DS:
D_SEG,ES:
E_SEG
Start:
MOVAX,D_SEG
MOVDS,AX
MOVAX,E_SEG
MOVES,AX
MOVAX,WORDPTRDADD1
MOVBX,WORDPTRDADD1+2
ADDAX,WORDPTRES:
DADD2
ADCBX,WORDPTRES:
DADD2+2
MOVWORDPTRSUM,AX
MOVWORDPTRSUM+2,BX
MOVAH,4CH
INT21H
C_SEGENDS
ENDStart
=======================================================
一、填空题
1、执行部件EU的组织有:
4个通用寄存器,4个专用寄存器和1个标志寄存器和算术逻辑部件。
2、8086CPU从偶地址访问内存1个字时需占用1个总线周期,而从奇地址访问内存1个字操作需占用2个总线周期。
3、IBM-PC机中的内存是按段存放信息的,一个段最大存贮空间为64K字节。
4、8086微处理机在最小模式下,用M/
来控制输出地址是访问内存还是访问I/O。
5、一台电脑能执行多少种指令,是在设计时确定的。
三、简答题
1.微处理器内部结构由哪些部件组成?
答案:
微处理器由两部分组成,总线接口单元和执行单元
2.论述8086CPU的最小方式和最大方式的区别。
8086CPU的最小方式和最大方式的区别是:
最小方式,MN/MX接+5V(MX为低电平),用于构成小型单处理机系统,支持系统工作的器件:
(1)时钟发生器,8284A,
(2)总线锁存器,74LS373,(3)总线收发器,74LS245,控制信号由CPU提供。
最大方式,MN/MX接地(MX为低电平),用于构成多处理机和协处理机系统,支持系统工作的器件:
(1)时钟发生器,8284A,
(2)总线锁存器,74LS373,(3)总线收发器,74LS245,(4)总线控制芯片,8288,控制信号由8288提供。
3.论述指令周期、机器周期和时钟周期间的关系。
执行一条指令所需要的时间称为指令周期;〔2〕.一个CPU同外部设备和内存储器之间进行信息交换过程所需要的时间称为总线周期;〔3〕.时钟脉冲的重复周期称为时钟周期;〔4〕.一个指令周期由假设干个总线周期组成,一个总线周期又由假设干个时钟周期组成;〔5〕.8086CPU的总线周期至少由4个时钟周期组成;〔6〕.总线周期完成一次数据传输包括:
传送地址,传送数据;〔7〕等待周期----在等待周期期间,总线上的状态一直保持不变;〔8〕空闲周期----总线上无数据传输操作
4.试比较8086CPU与8086CPU的异同之处。
8088CPU和8086CPU内部寄存器都是16位,数据总线都有是16位,地址总线都有是20位,指令系统相同。
主要不同点有:
(1)8086指令队列是6个字节长,而8088指令队列是4个字节长。
(2)外部数据总线位数不同,8086为16位AD0~AD15,8088为AD0~AD7
(3)34脚和28脚功能不同,34脚8086中是数据总线允许
/S7,8088是
,28脚,8086是M/
,808