SWT微机原理与接口技术期末复习参考资料.docx
《SWT微机原理与接口技术期末复习参考资料.docx》由会员分享,可在线阅读,更多相关《SWT微机原理与接口技术期末复习参考资料.docx(19页珍藏版)》请在冰豆网上搜索。
SWT微机原理与接口技术期末复习参考资料
一.填空题
1.在计算机中存储容量单位中,1KB=1024字节。
2.计算机系统中的三总线通常是指地址总线,数据总线,控制总线。
3.8086/8088内4个段寄存器CS,DS,SS,ES的中文名分别是代码段寄存器、数据段寄存器、堆栈段寄存器、附加段寄存器。
4.在16位寻址方式下的机制寻址方式中,基址寄存器为BH、BL,变址寄存器位SI、DI。
5.源程序的基本结构为、
6.每个指令有两个部分构成,即操作码和操作数。
7.10100110B=166D=A6H=O。
8.8086CPU是由EU和BIU两部分组成的。
9.8086/8088标志寄存器中CF、DF、SF的中位名分别为进位标志位、方向标志位、符号标志位。
10.CPU是微型计算机的核心芯片,而且无论哪种CPU其内部组成都大同小异,既包括运算器、控制器、寄存器。
11.在通用传送指令MOV中规定,目的操作数不能同时为存储器操作数、段寄存器、IP&CS。
12.8086/8088内4个段寄存器都是16位的,在用于内存寻址时作为段地址,20位物理地址是有段寄存器的段地址左移4位后,在与16位偏移量经过相加运算而得到。
二.选择题
1.常用的数据定义伪指令有(A)种。
A.3B.4C.5D.6
2.若屏蔽某几位可用指令(A)
A.ANDB.ORC.NOTD.XOR
3.微处理器8086字符串操作,用来存放源串偏移地址的寄存器是(C)。
A.BPB.SPC.SID.DI
4.若当减法运算X-Y中,是SF=1,OF=1,说明两者比较结果为(A)
A.XYC.X≦YD.X≧Y
5.8086/8088CPU中,标志寄存器的第11位OF位是(C)
A.符号标志位B.零标志位C.溢出标志位D.方向标志位
6.CPU中运算器的主要功能是()
A.算数运算B.逻辑运算C.算术运算和逻辑运算D.函数运算
7.如对某一寄存器清零可以使用下面命令()。
A.ANDB.ORC.NOTD.XOR
8.BCD码运算中,设AL=25H,BL=71H,进行BCD码减法运算后,AL=()。
A.67HB.54HC.43HD.0B4H
9.下列指令中,错误的是()
A.MOVAX,100B.POPFC.ADDOFFSET[BX][SI]D.DECDI
10.中断向量地址是指()
A.子程序入口地址B.中断服务例行入口地址C.中断服务入口地址的地址
D.例行程序地址
三.判断题。
1.8086CPU的逻辑段允许段的重复和交叉。
()
2.8086微处理器的标志寄存器FLAGS是16位的,每一位都有含义。
()
3.按约定,串操作指明都是以DS:
SI来寻址源串,以ES:
DI来寻址目的串,所以指令中不必显示指明操作数。
()
4.在8086系统中,所有中断都要执行两个中断响应总线周期。
()
5.指令语句与伪指令需经汇编程序翻译为机器代码后才能执行。
()
四.简答题。
1.8位和16位二进制数的原码、补码和反码可表示的数的范围分别是多少?
解:
(1)对于8位二进制数的原码、补码和反码可表示的数的范围如下:
1原码:
11111111B~01111111B(-127~+127)。
2反码:
10000000B~01111111B(-127~+127)。
3补码:
10000000B~01111111B(-128~+127).。
(2)对16位二进制数的原码、补码和反码可表示的数的范围如下:
①原码:
FFFFH~7FFFH(-32767~+32767);
②反码:
8000H~7FFFH(-32767~+32767);
③补码:
8000H~7FFFH(-32768~+32767).
2.8086/8088系统中,存储器为什么要分段?
一个段最大为多少字节?
最少为多少字节?
解:
8086/8088有20条地址总线,可寻址的最大物理内存容量为1MB(
),其中任何一个内存单元都有一个20位的地址,也就是内存单元的物理地址。
由于8086/8088的内部寄存器只有16位,而访问内存单元在多数情况下都要通过寄存器间接寻址,因此,8086/8088就采用了将地址空间分段的方法,即将1MB的地址空间分为若干个64KB的段,然后再用段基地址加上段内偏移地址来访问物理存储器。
3.I/O接口的主要功能有哪些?
有哪两种编制方式?
在8086/8088系统中采用哪一种编制方式?
解:
由I/O接口在系统中的位置可以得出接口电路具有如下功能:
(1)I/O地址译码与设备选择;
(2)信息的输入/输出;
(3)命令、数据和状态的缓冲与锁存;
(4)信息转换。
在微型计算机系统中,I/O端口的编址通常有两种不同的方式:
与内存单元统一编址、独立编址;8086/8088采用独立编址。
4.在8086/8088CPU中,标志寄存器包含哪些标志位?
各位为0(为1)分别表示什么含义?
解:
如图:
包括6个状态标志和3个控制标志:
(1)状态标志如下:
①CF:
进位标志位。
最高为向前有(借)进位时,CF=1;否则CF=0。
②PF:
奇偶标志位。
当运算结果的低8位中1的个数为偶数时,PF=1;为奇数时PF=0.
③AF:
辅助进位标志位。
在加减法操作中,D
向
有进位借位发生时,AF=1,否则AF=0.
④ZF:
零标志位。
当运算结果为零时ZF=1,否则ZF=0.
⑤SF:
符号标志位。
当运算结果的最高位为1时SF=1,否则SF=0.
⑥OF:
溢出标志位。
当算数的运算结果超出了带符号数的范围,即溢出时OF=1;否则OF=0.
(2)控制标志位
①TF:
陷阱标志位。
当TF=1时,激活处理器的调试特性,使CPU处于单步执行指令的工作方式。
每执行一条指令后的,自动产生一次单步中断,从而使用户能够逐条指令的检查程序。
②IF:
中断允许标志位。
IF=1使CPU可以响应可屏蔽中断请求。
IF=0使CPU禁止响应可屏蔽中断请求。
③DF:
方向标志位。
方向标志位在执行串操作指令时控制操作的方向。
DF=1时按减地址方式进行,即从高地址开始,每进行一次操作,地址指针自动减1(或减2);DF=0时则按照增地址方式进行。
5.CPU满足什么条件能够响应可屏蔽中断?
解:
当INTR信号有效时,如果中断允许标志位IF=1,则CPU就会在当前指令执行完毕后,产生两个连续的中断响应总线周期。
6.8086/8088CPU中,有哪些通用寄存器和专用寄存器?
解:
8086/8088CPU内部共有14个16位寄存器。
按其功能可分为三大类,即通用寄存器(8个)、段寄存器(4个)、控制寄存器(2个)
1)通用寄存器
(1)数据寄存器
①AX:
累加器;②BX:
基址寄存器;③CX:
计数寄存器;④DX:
数据寄存器。
(2)地址指针寄存器
①SP:
堆栈指针寄存器②BP:
基址指针寄存器
(3)变址寄存器
①SI:
源变址寄存器②DI:
目的变址寄存器
2)段寄存器
①CS:
代码段寄存器②SS:
堆栈段寄存器③DS:
数据段寄存器④ES:
附加段寄存器
3)控制寄存器
①IP:
指令指针寄存器②FLAGS:
标志寄存器
5.分析题
1.读下列程序段,若(AL)=5BH,执行程序后(AL)=H。
MOVBL,AL
MOVCL,8
AGAINROLBL,1
RCRAL,1
LOOPAGAIN
2.如程序的数据段定义如下,写出各指令语句独立执行后的结果:
DSEGSEGMENT
DATA1DB10H,20H,30H
DATA2DW10HDUP(?
)
STRINGDB‘123’
DSEGENDS
(1)MOVAL,DATA
解:
(2)MOVBX,OFFSETDATA2
解:
(3)LEASI,STRING
ADDDI,SI
解:
3.设(DS)=6000H,(ES)=2000H,(SS)=1500H,(SI)=00A0H,(BX)=0800H,(BP)=1200H,数据变量VAR为0500H。
请分别指出下列各条指令源操作数的寻址方式?
它的物理地址是多少?
(1)MOVAX,AVR
解:
(2)MOVDI,ES:
[BX]
解:
(3)MOVBX,20H[BX]
解:
4.设堆栈指针SP的初始值为2300H,(AX)=50ABH,(BX)=1234H。
执行指令PUSHAX后,(SP)=?
在执行指令PUSHBX及POPAX之后,(SP)=?
(AX)=?
(BX)=?
解:
六编程题
1.把内存中首地址为MEM1的200个字节送到首地址为MEM2的区域中。
解:
程序如下:
MOVSI,0FFSETMEM1;源数据块首地址(偏移地址)送SI
MOVDI,0FFSETMEM2;目标首地址(偏移地址)送DI
MOVCX,200;数据块长度送CX,即=训坏次数CX
NEXT:
MOVAL,[SI];源数据块中当前字节送AL
MOV[DI],AL;AL内容送目标地址,完成一个字节数据的传送
INCSI;SI加1,修改源地址指针
INCDI;DI加1,修改目标地址指针
DECCX;CX减1,修改循环次数
JNZNEXT;如循环次数(CX)不为零,则转移到NEXT标号处
HLT;停止
2.编写一个程序,将2000H:
1200H地址开始的100个字节传送到6000H:
0000H开始的内存单元中。
解:
程序如下:
MOVAX,2000H
MOVDS,AX;设定源串段地址
MOVAX,6000H
MOVES,AX;设定目标串段地址
MOVSI,1200H;设定源串偏移地址
MOVDI,100;串长度送CX
CLD;DF=0,使地址指针按增量方向修改
REPMOVSB;每传送一个字节,自动修改地址指针及CX直至CX=0
HLT;暂停执行
3.统计以BUFFER为起始地址的100个单元中负数的个数,并将统计出来的负数个数送NUM单元中。
解:
程序如下:
4.编写程序,将数据区中以字节变量BUFFER为首地址的100个单元清零。
解:
程序如下:
DATASEGMENT
BUFFERDB100DUP(?
)
COUNTDW100;定义地址区长度
DATAENDS;
STACKSEGMENT
DW32DUP(?
)
STACKENDS;
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX;初始化数据
MOVAX,STACK
MOVSS,AX;初始化堆栈段
MOVCX,COUNT
LEABX,BUFFER
ADDCX,BX
AGAIN:
MOVBYTEPTR[BX],0;实现100个单元清零
INCBX
CMPBX,CX
JBAGAIN
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
5.编写一个程序,从4000H开始的单元中放油32个有符号数,要求统计出其中负数的个数,并将个数存于BUFFER单元中。
解:
XORDX,DX;清DX内容,DX用于存放中间结果MOVSI,4000H;SI←起始地址
MOVCX,20H;CX←统计次数
AGAIN:
MOVAL,[SI];AL←取第一个数
INCSI;地址指针加1
TESTAL,80H;测试所取得数是否为负数
JZNEXT;不为负数则转NEXT
INCDX;如为负数则转DX←DX+1
NEXT:
DECCX;CX←CX-1
JNZAGAIN;若CX≠0则继续检查下一个
MOVBUFFER,DX;统计结果送BUFFER单元
6.编写一个程序段,比较两个字符串是否相同,并找出其中第一个不相同等的字符的地址,将该地址送BX,不相等的字符送AL。
两个字符串的长度均为200B,M1为源串首地址,M2为目标串首地址。
解:
程序如下:
LEASI,M1;SI←源串首地址
LEADI,M2;DI←目标串首地址
MOVCX,200;CX←串长度
CLD;DF=0,使地址指针按增量方向修改
REPECMPSB;如相等则重复比较
JZSTOP;若ZF=1,表示两数据串完全相等,转STOP
DECSI;否则SI-1,指向不相等单元的内容
MOVBX,SI;BX←不相等单元的地址
MOVAL,[SI];AL←不相等单元的内容
STOP:
HLT;停止
7.把以DATA为首地址的两个连续单元中的16为无符号数乘以10.
解:
程序如下:
(因为10x=8x+2x=
所以可以用左移指令实现该运算)
LEASI,DATA;DATA单元的偏移地址送SI
MOVAX,[SI];AX←被除数
SHLAX,1;AX=DATA*2
MOVBX,AX;暂存BX
MOVCL,2;CL←移位次数
SHLAX,CL;AX=DATA*8
ADDAX,BX;AX=DATA*10
HLT
8.在当前数据段DATA1开始的顺序80个单元中,存放着80位同学某门功课的考试成绩(0~100)。
编写程序统计≥90分、80~89分、70~79分、60~69分以及<60分的人数,并将结果放到统一数据段的DATA2开始的5个单元中。
解:
程序如下:
DATASEGMENT
DATA1DB80DUP(?
);假定学生成绩已放入这80个单元中
DATA2DB5DUP(0);统计结果:
≥90、80~89、70~79、60~69、<60
DATAENDS;
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
ATART:
MOVAX,DATA
MOVCX,80;统计人数送CX
LEASI,DATA1;SI指向学生成绩
LEADI,DATA2;DI指向统计结果
AGNIN:
MOVAL,[SI];取一个学生的成绩
CMPAL,90;大于90分吗?
JCNEXT1;若不大于,继续判断
JNCBYTEPTR[DI];否则90分以上的人数加1
JMPSTO;转循环控制处理
NEXT1:
CMPAL,80;大于80分吗?
JCNEXT2;若不大于,继续判断
INCBYTEPTR[DI+1];否则80分以上的人数加1
JMPSTO;转循环控制处理
NEXT2:
CMPAL,70;大于70分吗?
JCNEXT3;若不大于,继续判断
INCBYTEPTR[DI+2];否则70分以上的人数加1
JMPSTO;转循环控制处理
NEXT3:
CMPAL,60;大于60分吗?
JCNEXT4;若不大于,继续判断
INCBYTEPTR[DI+3];否则60分以上的人数加1
JMPSTO;转循环控制处理
NEXT4:
INCBYTEPTR[DI+4];60分以下的人数加1
STO:
INCSI;指向下一个学生成绩
LOOPAGAIN;循环,直到所有成绩都统计完
MOVAH,4CH;返回DOS
INT21H
CODEENDS
ENDSTART
9.求从TABLE开始的10个无符号字节数的和,结果放到SUM单元中。
解:
程序如下:
DATASEGMENT;定义数据段
TABLEDB12H,23H,34H,45H,56H;10个加数
DB67H,78H,89H,9AH,0FDH
SUMDW?
DATAENDS;
CODESEGMENT;定义代码段
ASSUMECS:
CODE,DS:
DATA,ES:
DATA
STARTMOVAX,DATA
MOVDS,AX;初始化DS
MOVES,AX;初始化ES
LEASI,TABLE;SI指向TABLE
MOVCX,10;循环计数器
XORAX,AX;AX为中间结果
NEXT:
ADDAL,[SI];把一个数加到AL中
ADCAH,0;若有进位,则加到AH中
INCSI;指向下一个数
LOOPNEXT;若未加完继续循环
MOVSUM,AX;如结束,存结果于SUM
HLT;结束
CODEENDS;代码段结束
ENDSTART;汇编结束,起始运行地址为START
10.存储器块清零
Blockequ2220h
movdptr,#Block;起始地址
movr0,#0;清256字节
clra
Loop:
movx@dptr,a
incdptr;指向下一个地址
djnzr0,Loop;记数减一
ljmp$
end
11.二进制到BCD转换
;将A拆为三个BCD码,并存入Result开始的叁个单元
Resultequ20h
org0
ljmpStart
BinToBCD:
movb,#100
divab
movResult,a;除以100,得百位数
mova,b
movb,#10
divab
movResult+1,a;余数除以10,得十位数
movResult+2,b;余数为个位数
ret
Start:
movsp,#40h
mova,#123
callBinToBCD
ljmp$
end
12.二进制到ASCII码转换
;将A拆为二个ASCII码,并存入Result开始的二个单元
Resultequ20h
org0
ljmpStart
ASCIITab:
db'0123456789ABCDEF';定义数字对应的ASCII表
BinToHex:
movdptr,#ASCIITab
movb,a;暂存A
swapa
anla,#0fh;取高四位
movca,@a+dptr;查ASCII表
movResult,a
mova,b;恢复A
anla,#0fh;取低四位
movca,@a+dptr;查ASCII表
movResult+1,a
ret
Start:
movsp,#40h
mova,#1ah
callBinToHex
ljmp$
end
13.内存块移动
;移动3000H-->4000H,256字节
movr0,#30h
movr1,#00h
movr2,#40h
movr3,#00h
movr7,#0
Loop:
movdph,r0
movdpl,r1
movxa,@dptr
movdph,r2
movdpl,r3
movx@dptr,a
cjner1,#0ffh,Goon1
incr0
Goon1:
incr1
cjner3,#0ffh,Goon2
incr2
Goon2:
incr3
djnzr7,Loop
ljmp$
end
14.程序跳转表
org0
ljmpStart
Func0:
mova,#0
ret
Func1:
mova,#1
ret
Func2:
mova,#2
ret
Func3:
mova,#3
ret
FuncEnter:
adda,acc;ajmp为二字节指令,调用号X2
movdptr,#FuncTab
jmp@a+dptr
FuncTab:
ajmpFunc0
ajmpFunc1
ajmpFunc2
ajmpFunc3
Start:
mova,#0
callFuncEnter
mova,#1
callFuncEnter
mova,#2
callFuncEnter
mova,#3
callFuncEnter
ljmp$
End
15.数据排序
Sizeequ10;数据个数
Arrayequ50h;数据起始地址
Changeequ0;交换标志
Sort:
movr0,#Array
movr7,#Size-1
clrChange
Goon:
mova,@r0
movr2,a
incr0
movB,@r0
cjnea,B,NotEqual
sjmpNext
NotEqual:
jcNext;前小后大,不交换
setbChange;前大后小,置交换标志
xcha,@r0;交换
decr0
xcha,@r0
incr0
Next:
djnzr7,Goon
jbChange,Sort
ljmp$
end