西工大 微机原理 试题 例题汇总.docx
- 文档编号:10407905
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:30
- 大小:32.76KB
西工大 微机原理 试题 例题汇总.docx
《西工大 微机原理 试题 例题汇总.docx》由会员分享,可在线阅读,更多相关《西工大 微机原理 试题 例题汇总.docx(30页珍藏版)》请在冰点文库上搜索。
西工大微机原理试题例题汇总
第三章80X86寻址方式和指令系统
二、典型题解析
例3.1设DS=2000H,SS=3000H,BP=0200H,SI=4000H,BUF=1000H,EAX=00001000H,EBX=00002000H,假设按16位实模式操作,确定下列每条指令访问内存的物理地址,并且指出源操作数及目的操作数的寻址方式。
(1)MOVAL,[1234H]
(2)MOVEDX,[BX]
(3)MOVCL,[BX+100H]
(4)MOV[SI],EBX
(5)MOVAH,BUF[BX+SI]
(6)MOVEAX,[BP+1234H]
分析:
DS给出数据段的段基址,因此,数据段的起始物理地址为(DS)×10H=20000H。
ES给出堆栈段的段基址,因此,堆栈段的起始物理地址为(SS)×10H=30000H。
若是存储器寻址,根据寻址方式的不同,可求出相应的有效EA,再加上段的起始物理地址即为将访问的内存单元的物理地址。
解
(1)源操作数在数据段中,为直接寻址方式。
EA=1234H
物理地址=20000H+1234H=21234H
目的操作数为寄存器寻址
(2)源操作数在数据段中,为寄存器间接寻址。
EA=(BX)=2000H
物理地址=20000H+2000H=22000H
目的操作数为寄存器寻址
(3)源操作数在数据段中,为寄存器相对寻址。
EA=(BX)+100H=2100H
物理地址=20000H+2100H=22100H
目的操作数为寄存器寻址
(4)源操作数为寄存器寻址
目的源操作数在数据段中,为寄存器间接寻址。
EA=(SI)=4000H
物理地址=20000H+4000H=24000H
(5)源操作数在数据段中,为相对基址变址寻址。
EA=(BX)+(SI)+BUF=2000H+4000H+1000H=7000H
物理地址=20000H+7000H=27000H
目的操作数为寄存器寻址
(6)由于源操作数方括号中出现了BP,所以源操作数在堆栈段中,为寄存器相对寻址。
EA=(BP)+1234H=0200H+1234H=1434H
物理地址=30000H+1434H=31434H
目的操作数为寄存器寻址
【评注】注意操作数的位置,是立即数还是在寄存器中,或在存储器中。
若为存储器寻址,还要判断操作数是在数据段中还是在堆栈段中。
注意区别直接寻址方式和立即寻址方式,
(1)中源操作数是[1234H],该指令是要把数据段中1234H单元的内容送AL,并非将1234H送AL,是一种直接寻址方式。
使用寄存器间接寻址时应注意和寄存器寻址方式的区别。
(2)中源操作数是[BX],BX寄存器中的内容2000H是一个地址,该指令是要把数据段中以2000H单元为首的一个双字数据送EDX寄存器中,并非将2000H送EDX。
所以该指令源操作数为寄存器间接寻址。
例3.2(AL)=9AH,(BL)=0BCH,当分别进行下列指令运算后,请写出标志位的内容。
(1)ADDAL,BL;ZF=___,PF=___,CF=___,SF=___,OF=___。
(2)SUBAL,BL;ZF=___,PF=___,CF=___,SF=___,OF=___。
(3)ANDAL,BL;ZF=___,PF=___,CF=___,SF=___,OF=___。
(4)ORAL,BL;ZF=___,PF=___,CF=___,SF=___,OF=___。
(5)XORAL,BL;ZF=___,PF=___,CF=___,SF=___,OF=___。
解
(1)ADDAL,BL
10011010(9AH)
+10111100(0BCH)
01010110(有进位)
所以,ZF=0,PF=1,CF=1,SF=0,OF=1
(2)SUBAL,BL
10011010(9AH)
-10111100(0BCH)
11011110(有借位)
所以,ZF=0,PF=1,CF=1,SF=1,OF=0
(3)对于“与”、“或”和“异或”逻辑运算,将使CF=0,OF=0,而SF、ZF和PF则根据运算结果设置。
ANDAL,BL
10011010(9AH)
∧10111100(0BCH)
10011000
所以,ZF=0,PF=0,CF=0,SF=1,OF=0
(3)ORAL,BL
10011010(9AH)
∨10111100(0BCH)
10111110
所以,ZF=0,PF=1,CF=0,SF=1,OF=0
(4)XORAL,BL
10011010(9AH)
10111100(0BCH)
00100110
所以,ZF=0,PF=0,CF=0,SF=0,OF=0
例3.3判断下列指令是否正确,若有错误,请指出原因,并改正。
(1)MOVBL,OFFSETBLOCK
(2)LEADI,[BX+SI]
(3)PUSHAL
(4)POPCS
(5)OUTCX,AL
(6)MOVES,DS
(7)JMPBYTEPTR[SI]
(8)MOVAX,[SI+DI]
(9)MOV[BX+BP],AX
(10)ADDAX,F000H
解
(1)错误。
OFFSETBLOCK是指变量BLOCK的偏移地址,不能送往8位的寄存器中,应改为MOVBX,OFFSETBLOCK
(2)正确。
(3)错误。
堆栈操作不能进行字节操作。
应改为PUSHAX
(4)错误。
不能给CS赋值。
可以改为别的段寄存器,比如POPDS
(5)错误。
I/O指令中只能用DX作为间接寻址的寄存器,应该改为OUTDX,AL。
(6)错误。
段寄存器之间不能传送数据。
要完成该语句的功能,应改为MOVAX,DS
MOVES,AX
(7)错误。
转移地址必须是16位或32位。
可改为JMPWORDPTR[SI]
(8)错误。
SI和DI两个变址不能同时出现在方括号里,可以是一个基址加一个变址,可改为MOVAX,[BX+DI]
(9)错误。
BX和BP两个基址不能同时出现在方括号里。
可以改为MOV[BX+SI],AX
(10)错误。
F000H是一个以字母打头的数字,为了和变量区别,应书写成0F000H,所以应改为ADDAX,0F000H
例3.4查表指令和串操作指令都采用隐含寻址,那么它们的地址分别都有哪些约定?
解查表指令XLAT隐含:
表首地址存于BX中,表中偏移量在AL中。
段基址在DS中,有效地址为BX和AL之和。
串操作指令隐含:
源串的段基址在DS中,串元素偏移地址为(E)SI;目的串段基址在ES中,串元素偏移地址在(E)DI中。
每次串操作之后,(E)SI和(E)DI都会自动修改。
例3.5根据题意各写一条指令
①用逻辑指令将EAX清0
②将BX的高8位清0
③将CX的低4位和高4位取反
④将DX的低8位置1
⑤对AX的内容算术右移两位
分析:
这些功能需要用逻辑运算指令来实现。
AND指令常用于将操作数中某些位清0,只须将要清0的位与0,其它不变的位与1即可;OR指令常用于将操作数中某些位置1,只须将要置1的位或1,其它不变的位或0即可;XOR指令常用于将操作数中某些位取反,只须将要取反的位异或1,其它不变的位异或0即可;也常用XOR指令将某个寄存器清0。
算术右移用SAR指令。
解①ANDEAX,0或XOREAX,EAX
②ANDBX,00FFH
③XORCX,0F00FH
④ORDX,00FFH
⑤SARAX,2
例3.6写出把首地址为BUF的字节缓冲区中第5个字节数送AL寄存器的指令,要求使用以下几种寻址方式:
(1)寄存器间接寻址
(2)寄存器相对寻址
(3)基址变址寻址
解
(1)LEABX,BUF+4
MOVAL,[BX];寄存器间接寻址
(2)LEABX,BUF
MOVAL,[BX+4];寄存器相对寻址
(3)LEABX,BUF
MOVSI,4
MOVAL,[BX+SI];基址变址寻址
例3.7试分别使用数据传送指令、交换指令和堆栈操作指令,实现将首地址为BLOCK的内存单元中两个数据字交换。
BLOCK变量定义如下:
BLOCKDW10H,20H
解
(1)用数据传送指令完成:
MOVAX,BLOCK
MOVBX,BLOCK+2;由于字数据,故20H的地址为BLOCK+2
MOVBLOCK,BX
MOVBLOCK+2,AX
(2)用交换指令完成:
XCHGAX,BLOCK
XCHGAX,BLOCK+2
XCHGBLOCK,AX
(3)用堆栈指令完成:
PUSHBLOCK;10H入栈
PUSHBLOCK+2;20H入栈
POPBLOCK;栈顶20H出栈,存入BLOCK
POPBLOCK+2;10H出栈,存入BLOCK+2
【评注】注意:
①因为操作数在存储器单元中,10H和20H在指令中不能以立即数的形式出现;②由于是字数据,在取第二个字时,地址应为BLOCK+2;③用堆栈指令来完成时,一定要按照先进后出的原则来操作。
例3.8下列程序段执行后,AL和CL的内容分别是什么?
MOVAX,1234H
MOVBX,5678H
ADDAL,BL
DAA
MOVCL,AL
MOVAL,AH
ADCAL,BH
DAA
分析:
由于使用了十进制调整指令DAA,故相加的两个操作数必然是以BCD码的形式表示的,而且是以压缩格式的BCD码存放的。
本题实际上是十进制1234和5678两个数相加,和为6912。
根据程序,高位存于AL,低位存于CL中。
解(AL)=69(CL)=12
例3.9设一个字节数据X存放在AL寄存器中,试说明下列程序的功能。
XORAH,AH
SALAL,1
MOVBX,AX
MOVCL,2
SALAX,CL
ADDAX,BX
解SAL为算术左移指令,如果无溢出,左移一位相当于乘以2,左移2位相当于乘以4,依此类推。
本程序中首先对存于AL中的数X左移了一位,AX中数变为了2X,同时送入BX,故BX中的数也为2X;然后对AX左移了2位,即对AX扩大了4倍,这时AX中的数变为了8X;最后加上BX的值2X,最后AX变为了10X。
故本程序段的功能为:
X扩大10倍后存入AX中。
例3.10下列程序是将两个8位组合BCD数(各占4个字节)相加求和的程序。
设两BCD数已存入以BUF1、BUF2为首地址的内存单元中,且低位在低地址单元,高位在高地址单元,结果存回BUF1处。
程序中含有若干错误,请改正之。
.MODELSMALL
.DATA
BUF1DB54H,76H,32H,10H
BUF2DB23H,88H,06H,20H
.CODE
.STARTUP
MOVCX,4
LEASI,BUF1
LEADI,BUF2
CLC
NEXT:
MOVAL,[SI]
ADDAL,[DI]
AAA
MOV[SI],AL
INCSI
INCDI
LOOPNEXT
.EXIT
END
解有两个错误:
1ADDAL,[DI]指令不对。
因为对于多字节加法运算,高位部分对应相加时必须考虑低位上的进位情况,应改为ADCAL,[DI]
2AAA指令不对。
由于BUF1和BUF2中存放的是组合BCD码,调整时就应该用组合型BCD码加法调整指令,而AAA为非组合型BCD码加法调整指令,应改为:
DAA
例3.11读程序段,说明其功能。
(其中,DATA1,DATA2,DATA3均为符号地址)
(1)MOVAX,DATA1
SUBAX,DATA2
MOVDATA3,AX
MOVAX,DATA1+2
SBBAX,DATA2+2
MOVDATA3+2,AX
(2)ORAX,0FF00H
XORBX,0F00FH
ANDCX,00FFH
XORDX,DX
解
(1)段程序的功能是:
以DATA1为首地址的双字减去以DATA2为首地址的双字,结果存放在以DATA3为首的四个单元中。
(2)段程序的功能:
对AX的高8位置1;对BX的高4位和低4位取反;对CX的高8位清0;对DX寄存器清0。
例3.12十进制数0~9与BCD码和字型码的相互转换关系如表3.1。
请编写指令,将5转换成共阳极LED显示的字型代码。
表3.1BCD码与字型码的相互关系表
十进制数
BCD码
g
f
e
d
c
b
a
字型代码
TABLE+0
0
0000
1
0
0
0
0
0
0
40H
1
0001
1
1
1
1
0
0
1
79H
2
0010
0
1
0
0
1
0
0
24H
3
0011
0
1
1
0
0
0
0
30H
4
0100
0
0
1
1
0
0
1
19H
TABLE+5
5
0101
0
0
1
0
0
1
0
12H
6
0110
0
0
0
0
0
1
0
02H
7
0111
1
1
1
1
0
0
0
78H
8
1000
0
0
0
0
0
0
0
00H
9
1001
0
0
1
1
0
0
0
18H
分析
(1)理解表3.1:
表中七段显示代码中高电平“1”表示不亮,低电平“0”表示亮。
如:
共阳极LED显示的字型码“0”(即十进制数“0”)只有g不亮,为高电平“1”。
(2)对于顺序表,我们可用查表指令XLAT来实现查表功能。
解
(1)设表格存放在内存的首址以标号TABLE表示。
将表格首址放入BX中,将表格偏移量放入AL中。
本例中偏移量为05H。
(2)执行XLAT指令:
EA=(BX)+(AL)
AL=(EA)
(3)用如下指令实现
MOVAX,SEGTABLE
MOVDS,AX
MOVBX,OFFSETTABLE
MOVAL,05
XLAT
该程序执行后(AL)=12H
【评注】查表指令用于查表很简便,应熟悉这个隐含寻址指令的执行过程。
例3.13算术运算综合举例,计算
(S-(X×Y+Z))/X
其中X,Y,Z,S均为16位带符号数,已经分别装入X,Y,Z,S单元中,要求上式计算结果的商存入AX,余数存入DX寄存器。
试编制程序段完成算式功能。
分析:
X,Y,Z,S均为16位带符号数,因此对于加、减运算我们要用到ADC和SBB,对于乘除运算要用到指令IMUL和IDIV。
X×Y的积为32位数,要进行双字扩展。
被除数也必须进行高位扩展。
解完成该算术运算式的程序段如下
MOVAX,X
IMULY;X×Y
MOVCX,AX;CX中存放积的低位
MOVBX,DX;BX中存放积的高位
MOVAX,Z
CWD;Z带符号扩展为32位
ADDCX,AX;32位Z与积的高、低16位分别相加
ADCBX,DX;X×Y+Z,高16位加时必须用ADC指令
MOVAX,S
CWD;S带符号扩展为32位
SUBAX,CX;S-(X×Y+Z)
SBBDX,BX;高16位减时必须用SBB指令
IDIVX;(S-(X×Y+Z))/X,商在AX中,余数在DX中。
【评注】本例考查对有符号、无符号乘除指令及如何进行双字节加减运算的掌握情况。
三、习题
一.填空题:
1.计算机中的指令由________和________组成。
2.指出下列指令源操作数的寻址方式:
①MOVAX,BLOCK[SI]________________
②MOVAX,[SI]________________
③MOVAX,[6000H]________________
④MOVAX,[BX+SI]________________
⑤MOVAX,BX________________
⑥MOVAX,1500H________________
⑦MOVAX,80[BX+DI]________________
⑧MOVAX,[DI+60]________________
3.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,填入下列指令执行后AX寄存器的内容:
①MOVAX,1200H;AX=________
②MOVAX,BX;AX=________
③MOVAX,[1200];AX=________
④MOVAX,[BX];AX=________
⑤MOVAX,1100H[BX];AX=________
⑥MOVAX,[BX][SI];AX=________
⑦MOVAX,1100H[BX][SI];AX=________
4.对于指令XCHGBX,[BP+SI],如果指令执行前,(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F246H)=4154H,则执行指令后:
(BX)=_________,(2F246H)=_________。
5.指令LOOPZ/LOOPE是结果_________或_________发生转移的指令;而指令LOOPNZ/LOOPNE则是结果_________或_________发生转移的指令。
6.XLAT指令规定BX寄存器存放__________,AL寄存器中存放_________。
7.如果BUF为数据段中5400H单元的符号名,其中存放的内容为1234H,当执行指令MOVBX,BUF后,BX的内容为_________;而当执行LEABX,BUF后,BX的内容是_________。
8.串操作指令规定源串在_________段中,用_________来寻址源操作数;目的串在_________段中,用_________来寻址目的操作数。
9.近过程(NEAR)的RET指令把当前栈顶的一个字弹出到______;远过程(FAR)的RET指令弹出一个字到______后又弹出一个字到______。
10.中断返回指令IRET执行后,从堆栈顺序弹出三个字分别送到_________、_________、_________。
11.设(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H,执行指令PUSHAX后,(SP)=_________;若再执行指令:
PUSHBX
POPAX
后,(SP)=_________,(AX)=_________,(BX)=_________。
12.阅读下面的程序。
在______________________的情况下,本段程序的执行结果是(AH)=0;在____________________的情况下,其结果为(AH)=0FFH。
INAL,20H
TESTAL,80H
JZA
MOVAH,0
JMPB
A:
MOVAH,0FFH
B:
HLT
13.下列程序段是比较AX、BX、CX中带符号数的大小,将最大的数放在AX中。
请将程序填充完整。
CMPAX,BX
(1)_______NEXT
XCHGAX,BX
NEXT:
(2)_______CX,AX
JGEOUT
(3)_______AX,CX
OUT:
......
14.若(AX)=3F50H,(BX)=1728H,执行SUBAX,BX指令后,(AX)=__________,标志位AF,SF,CF,ZF,OF,PF的状态相应为________________。
15.设(SS)=2250H,(SP)=0140H,若在堆栈中存入5个数据,则栈顶的物理地址为__________,如果再从堆栈中取出3个数据,则栈顶的物理地址为__________。
16.MOVAL,‘A’指令的源操作数的寻址方式为___________。
17.若BP=1500H,SI=2500H,DS=2000H,ES=3000H,SS=4000H,假设按16位实模式操作,则指令MOVAL,[BP+SI+4200H],其源操作数地寻址方式为___________,访问内存的物理地址为_________。
18.MOVEAX,[BP+5000H],若按实模式操作,设BP=1500H,DS=2000H,ES=3000H,SS=4000H,则源操作数的物理地址为___________。
19.指出下列每条指令中源操作数的寻址方式:
①MOVAX,[4000H];____________
②MOVAL,[BX+DI];____________
③MOVEAX,[BP+5000H];____________
④MOVAL,[EBX*4+80H];____________
20.实地址方式的数据寻址方式有___________________________。
21.对于串操作指令,源串是以______内容为段基址,是以_____内容为偏移地址;目的串是以______内容为段基址,是以_____内容为偏移地址。
22.将AX寄存器的内容清"0"的指令有____________________________________________________________。
23.以CX寄存器内容为计数对象的指令有_____________________。
24.CPU工作在实方式下,若指令MOVAL,[BP+SI],其源操作数的寻址方式为_______________,假设BP=1500H,SI=2500H,ES=3000H,SS=4000H,则源操作数的物理地址为___________。
25.输入/输出指令间接寻址必须通过________寄存器。
二.选择题:
1.MOVAX,[BX+SI]的源操作数的物理地址是________。
A.(DS)×16+(BX)+(SI)B.(ES)×16+(BX)+(SI)
C.(SS)×16+(BX)+(SI)D.(CS)×16+(BX)+(SI)
2.MOVAX,[BP+SI]的源操作数的物理地址是________。
A.(DS)×16+(BP)+(SI)B.(ES)×16+(BP)+(SI)
C.(SS)×16+(BP)+(SI)D.(CS)×16+(BP)+(SI)
3.MOVAX,ES:
[BX+SI]的源操作数的物理地址是________。
A.(DS)×16+(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西工大 微机原理 试题 例题汇总 微机 原理 例题 汇总