微机原理期末考试重点总结.docx
《微机原理期末考试重点总结.docx》由会员分享,可在线阅读,更多相关《微机原理期末考试重点总结.docx(26页珍藏版)》请在冰豆网上搜索。
微机原理期末考试重点总结
把寻找操作数的方式叫做(操作数)寻址方式
立即数寻址方式
寄存器寻址方式
存储器寻址方式
1、直接寻址方式2、寄存器间接寻址方式
3、寄存器相对寻址方式4、基址变址寻址方式5、相对基址变址寻址方式
微处理器的定义
微处理器即中央处理单元,采用大规模集成电路技术制成的半导体芯片,内部集成了计算机的主要部件:
控制器、运算器、寄存器组。
微处理器通过执行指令序列完成指定的操作,处理器能够执行全部指令的集合就是该处理器的指令系统。
微机的总线结构的好处,使用特点。
包括总线定义,分类。
总线定义:
指传递信息的一组公用导线,
总线结构的好处:
总线结构使得微机系统组态灵活,扩展方便。
使用特点:
在某个时刻只有一个总线主控设备控制系统总线。
某一时刻只能有一个设备向总线发送信号,但可以有多个设备同时从总线上获取信号。
总线按传输信号可以分为
数据总线(用于CPU与其他部件之间传递信息,具有三态功能,且是双向的)、
地址总线(用于传递CPU要访问的存储单元或I/O接口的地址信号)、
控制总线(连接CPU的控制部件和内存、I/O设备等,用来控制内存和I/O设备的全部工作)
冯⋅诺依曼存储程序工作原理
1、将采取二进制形式表示数据和指令。
指令由操作码和地址码组成
2、将程序和数据存放在存储器中,计算机在工作时从存储器取出指令加以执行,自动完成计算任务。
3、指令的执行是顺序的,即一般按照指令在存储器中存放的顺序执行,程序分支由转移指令实现。
4、计算机由存储器、运算器、控制器、输入设备和输出设备五大基本部件组成,并规定了各部件的基本功能。
8086微处理器的构成、每一个T状态的主要工作。
基本的存储读、写总线周期构成。
常用的控制信号。
总线周期是指CPU通过总线与外部(存储器或I/O端口)进行一次数据交换的过程,即完成一次总线操作的时间
指令周期是指一条指令经取指、译码、操作数读写直到指令完成所需要的时间。
存储器读总线周期:
T1状态——输出存储器的地址
T2状态——输出控制信号-RD,选通存储器;DEN信号,选通数据收发器
T3和Tw状态——检测数据传送是否能够完成
T4状态——前沿读取数据,完成数据传送
存储器写总线周期:
T1状态——输出20位存储器地址A19~A0
T2状态——-WR信号有效,-DEN信号有效以输出数据D7~D0
T3和Tw状态——-WR、-DEN等控制信号持续有效,T3时钟下降沿检测READY信号,决定是否插入Tw;Tw期间,各信号延续状态。
T4状态——完成数据传送,并准备过渡到下一操作。
-WR、-DEN转为无效。
常用的控制信号:
ALE地址锁存允许,输出、三态、高电平有效
IO/-M:
I/O或存储器访问,输出、三态
-WR:
写控制,输出、三态、低电平有效
-RD:
读控制,输出、三态、低电平有效
INTR、-INTA等
存储器地址的译码问题
全译码:
所有的系统地址线均参与对存储单元的译码寻址
特点:
采用全译码,每个存储单元的地址都是唯一的,不存在地址重复
译码电路可能比较复杂、连线也较多
部分译码:
只有部分(高位)地址线参与对存储芯片的译码
特点:
每个存储单元将对应多个地址(地址重复),需要选取一个可用地址
可简化译码电路的设计、但系统的部分地址空间将被浪费
存储芯片为什么要设置片选信号?
它与系统地址总线有哪些连接方式?
采用何种连接方式可避免地址重复?
采用哪些连接方式可节省用于译码的硬件?
解答:
片选信号说明该存储器芯片是否被选中正常工作,设置它可以比较方便地实现多个存储器芯片组成大容量的存储空间
存储器片选信号通常与CPU地址总线的高位地址线相关联,可以采用“全译码”、“部分译码”、“线选译码”方式
采用全译码方式可以避免地址重复
采用部分或线选译码可以节省译码硬件
8086微处理器的内部结构,EU、BIU的定义和作用,流水线。
BIU(总线接口单元):
由指令队列、指令指针、段寄存器、地址加法器和总线控制逻辑构成。
该单元管理着8088与系统总线的接口、负责CPU对存储器和外设进行访问。
EU(执行单元):
由ALU、通用寄存器、标志寄存器和指令译码逻辑等构成,它负责指令的译码、执行和数据的运算。
两个单元相互独立,分别完成各自操作。
两个单元可以并行执行,实现指令取指和执行的流水线操作
8086的寻址方式。
物理地址和逻辑地址的定义。
两者之间转换。
8086系统存储器采用分段管理方式。
(要求很熟练)
对于每个存储器单元都有一个唯一的20位地址,称为物理地址。
在8088的总线内部和用户编程时,所采用的“段地址:
偏移地址”形式,称为逻辑地址。
一个存储器单元可以拥有多个逻辑地址,但可能拥有唯一的物理地址。
转换过程:
先将段寄存器提供的16位段地址左移四位,低位补0,恢复为20位地址,然后与由各种寻址方式提供的16位偏移地址相加,即得到20位的物理地址。
8086微处理器的内部构成。
8086的寄存器结构,标志寄存器中每一个标志位的含义及应用。
8086复位时各寄存器的初始状态。
内部构成:
算术逻辑单元(运算器)、寄存器组、指令处理单元(控制器)
寄存器结构:
8086/8088共有8个的通用寄存器,1个标志寄存器,4个段寄存器和1个指令指针寄存器。
进位标志CF:
计算结果的最高有效位有进位,则CF=1,否则CF=0
溢出标志OF:
若算术运算的结果有溢出,则OF=1;否则OF=0
全零标志位ZF:
若运算结果为全0,则ZF=1,否则ZF=0
符号标志CF:
运算结果最高位为1,则SF=1;否则SF=0
奇偶标志位PF:
当运算结果最低字节中1的个数为零或偶数时,PF=1;否则PF=0(奇校验)
辅助进位标志AF:
运算时D3位(低半字节)有进位或借位时,AF=1;否则AF=0
方向标志DF:
存储地址自动增加,DF=1,否则DF=0
中断允许标志:
IF=1,则允许中断,IF=0,则禁止中断
陷阱标志TF:
TF=0,处理器正常工作;TF=1,处理器每执行一条指令就中断一次
中断向量表。
掌握中断向量表的构成,计算中断类型号,中断服务程序入口地址。
中断的工作过程。
中断向量表是一种表数据结构,是中断向量号与其对应的中断服务程序入口之间的链接表。
该地址包括:
偏移地址IP、段地址CS(共32位)
每个中断向量的低字是偏移地址、高字是段地址,需占用4个字节(低对低,高对高)。
8088微处理器从物理地址000H开始到3FFH(1KB),依次安排各个中断向量,向量号从0到255。
256个中断向量所占用的1KB区域,称中断向量表
中断向量的存放首址=N*4
中断类型:
8088CPU具有哪些中断类型?
各种中断如何产生,如何得到中断向量号?
除法错中断:
在执行除法指令时,除数为0或商超过了寄存器所能表达的范围产生
指令中断:
在执行中断指令INTn时产生
溢出中断:
在执行溢出中断指令INTO时,溢出标志OF为1产生
单步中断:
单步标志TF为1,在每条指令执行结束后产生
非屏蔽中断:
外部通过NMI请求信号向微处理器提出请求时产生
可屏蔽中断:
外部通过INTR请求信号向微处理器提出请求,并在允许可屏蔽中断的条件下产生
(2)除法错中断、溢出中断、单步中断、非屏蔽中断的向量号是8086微处理器内部已经确定
指令中断的操作数n就是向量号
可屏蔽中断的向量号在响应中断时通过数据总线从外部获得
什么是8259A的中断结束字(EOI)?
(1)IRi被响应时,ISR中对应的Di位被置1;
(2)中断处理完毕,相应的Di位应置0。
(3)向8259A送中断结束指令,使ISR的某位清0,指令的内容叫作中断结束字。
8259A中IRR、IMR和ISR三个寄存器的含义
中断请求寄存器IRR:
保存8条外界中断请求信号IR0~IR7的请求状态
Di位为1表示IRi引脚有中断请求;为0表示无请求
中断屏蔽寄存器IMR:
保存对中断请求信号IRi的屏蔽状态
Di位为1表示IRi中断被屏蔽(禁止);为0表示允许
中断服务寄存器ISR:
保存正在被8259A处理的中断的状态
Di位为1表示IRi中断正在处理中;为0表示没有被处理
中断的概念。
中断向量表的含义。
深入理解8259的工作方式,优先权设置、中断结束处理、中断源屏蔽、中断触发等等。
8259的初始化编程。
中断服务程序编写。
中断:
指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。
优先权设置:
在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套
中断结束处理:
自动中断结束方式、普通中断结束方式、特殊中断结束方式;
中断向量表的含义:
256个中断向量所占用的1KB区域,称中断向量表
计算机主机和I/O设备之间进行数据传送的方法。
重点掌握查询方式完成数据传送的流程,要会编程。
查询传送的特点是:
工作可靠,适用面宽,但传送效率低
查询输入接口(考电路):
代码如下:
movdx,8000h;dx指向状态端口
Status:
inal,dx;读状态端口
testal,01h;测试标志位D0
jzstatus;D0=0,未就绪,继续查询
incdx;D0=1,就绪,DX指向数据端口
inal,dx;从数据端口输入数据
中断传送:
中断传送是一种效率更高的程序传送方式;
中断过程的完成由中断系统(硬件,如8259和CPU)和中断服务程序(软件)共同控制完成
中断工作过程:
1、中断请求(外设)2、中断响应(CPU)
3、关中断(CPU)4、断点保护(CPU)
5、中断识别(软件/硬件)6、现场保护(用户)
7、中断服务(用户)8、恢复现场(用户)
9、开中断(用户/CPU)10、中断返回(IRET/用户)
最小组态的写总线周期时序:
如何限制只能输入小写字母(61h~7Ah,课本P22),否则要求重新输入。
.data
msgdb'notalowercase,inputagain',
db0dh,0ah,'$'
input:
movah,1;输入小写字母
int21h
cmpal,61h
jlonce-again
cmpal,7Ah
jaonce-again
jmpconvert
once-again:
movdx,offsetmsg
movah,9
int21h
jmpinput
convert:
subal,20h;转换为大写字母
……
采用查表法,实现一位16进制数转换为ASCII码显示
04h——34h(4)0bh——42h(B)
ASCIIdb30h,31h,32h,33h,34h,35h,36h,37h,38h,39h
;对应0~9的ASCII码
db41h,42h,43h,44h,45h,46h
;对应A~F的ASCII码
hexdb04h,0bh
;假设两个16进制数
;代码段
movbx,offsetASCII
;BX指向ASCII码表
moval,hex
;AL取得一位16进制数;恰好就是ASCII码表中的位移
andal,0fh
;只有低4位是有效的,高4位清0
xlat;换码:
AL←DS:
[BX+AL]
movdl,al;欲显示的ASCII码送DL
movah,2;2号DOS功能调用
int21h;显示一个ASCII码字符
moval,hex+1;转换并显示下一个数据
andal,0fh
xlat
movdl,al
movah,2
int21h
编写一个源程序,在键盘上按一个键,将从AL返回的ASCII码值显示出来,如果按下ESC键则程序退出。
(可调用书中的HTOASC子程序)
HTOASCproc
andal,0fh;al低四位保存待转;换的16进制数
cmpal,9
jbehtoasc1
addal,37h;是A~F,加37H
ret;子程序返回
htoasc1:
addal,30h;0~9,加30H
ret;子程序返回
HTOASCendp
pushax
movcl,4
roral,cl
callHTOASC
calldisp_a_char
popax
callHTOASC
calldisp_a_char
把从键盘输入的一个小写字母用大写字母显示出来(大小写字母转换)。
movah,1;输入小写字母
int21h
subal,20h;转换为大写字母
movdl,al
movah,2
int21h;显示
写一个子程序,根据入口参数AL=0、1、2,依次实现对大写字母转换成小写、小写转换成大写或大小写字母互换。
欲转换的字符串在string中,用0表示结束。
lucaseproc
pushbx
movbx,offsetstring
cmpal,0
jecase0cmpal,1jzcase1cmpal,2jzcase2jmpdone
case0:
cmpbyteptr[bx],0jedone
cmpbyteptr[bx],’A’jbnext0
cmpbyteptr[bx],’Z’janext0
addbyteptr[bx],20h
next0:
incbx
jmpcase0
case1:
cmpbyteptr[bx],0
jedone
cmpbyteptr[bx],’a’
jbnext1
cmpbyteptr[bx],’z’
janext1
subbyteptr[bx],20h
next1:
incbx
jmpcase1
case2:
cmpbyteptr[bx],0jedone
cmpbyteptr[bx],’A’jbnext2
cmpbyteptr[bx],’Z’janext20
addbyteptr[bx],20h
jmpnext2
next20:
cmpbyteptr[bx],’a’
jbnext2
cmpbyteptr[bx],’z’
janext2
subbyteptr[bx],20h
next2:
incbx
jmpcase2
done:
popbx
ret
lucaseendp
循环累加(调用子程序)
arraydb12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h
countequ$-array;数组元素个数
resultdb?
;校验和;代码段(主程序)
movbx,offsetarray;BX←数组的偏移地址
movcx,count;CX←数组的元素个数
callchecksum;调用求和过程
movresult,al;处理出口参数
checksumproc
xoral,al;累加器清0
sum:
addal,[bx];求和
incbx;指向下一个字节
loopsumRet
Checksumendp
计算AX中有符号数的绝对值
cmpax,0
jgenonneg;条件满足(AX≥0),转移
negax;条件不满足,求补(即绝对值P43)
nonneg:
movresult,ax;保存结果;不恰当的分支
cmpax,0
jlyesneg;条件满足(AX<0),转移
jmpnonneg
yesneg:
negax;条件满足,求补
nonneg:
movresult,ax;保存结果
设置两个变量maxay和minay存放最大和最小值
arraydw10
dw-3,0,20,900,587,-632,777,234,-34,-56
maxaydw?
;存放最大值
minaydw?
;存放最小值
leasi,array
movcx,[si];取得元素个数
deccx;减1后是循环次数
addsi,2movax,[si]movbx,ax
maxck:
addsi,2
cmp[si],ax;与下一个数据比较
jleminck
movax,[si];AX取得更大的数据
jmpnext
minck:
cmp[si],bx
jgenext
movbx,[si];BX取得更小的数据
next:
loopmaxck;计数循环
movmaxay,ax;保存最大值
movminay,bx;保存最小值
挑出数组中正数(不含0)和负数,分别形成正、负数组
DATASSEGMENT
countequ10
arraydw23h,9801h…ayplusdwcountdup(0)ayminusdwcountdup(0)
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
movsi,offsetarray
movdi,offsetayplus
movbx,offsetayminus
movax,ds
moves,ax
movcx,count
cld
again:
lodsw
cmpax,0
jlminus
jznext
minus:
xchgbx,di
stosw
xchgbx,di
next:
loopagain
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
8259A的初始化程序段(7.8)
mov al,13H;写入ICW1:
设定边沿触发方式,单片方式
mov dx,0FFDCH
out dx,al
jmp intr1
intr1:
mov al,90H;写入ICW2:
设定IR0的中断向量号为90h
mov dx,0FFDEH
out dx,al
jmp intr2
intr2:
mov al,1;写入ICW4:
设定普通嵌套方式,普通中断方式
mov dx,0FFDEH
out dx,al
8259的初始化编程:
主片:
moval,11h;写入ICW1
out20h,al
intr1:
moval,08h;写入ICW2
out21h,al
intr2:
moval,04h;写入ICW3
out21h,al
intr3:
moval,05h;写入ICW4
out21h,al
从片:
moval,11h;写入ICW1
out0a0h,al
intr5:
moval,70h;写入ICW2
out0a1h,al
intr6:
moval,02h;写入ICW3
out0a1h,al
intr7:
moval,01h;写入ICW4
out0a1h,al
试按如下要求分别编写8253的初始化程序,已知8253的计数器0~2和控制字I/O地址依次为204H~207H。
⑶使计数器2工作在方式2,计数值为02F0H。
moval,0b4h
movdx,207h
outdx,al
movax,02f0h
movdx,206h
outdx,al;先写入低字节
moval,ah
outdx,al;后写入高字节
8255的初始化编程
要求:
A口:
方式1输入、CH口:
输出、CL口:
输入、B口:
方式0输出
方式控制字:
10110001B或B1H
初始化的程序段:
movdx,0fffeh;假设控制端口为FFFEH
moval,0b1h;方式控制字
outdx,al;送到控制端口
某系统中8253芯片中计数器的0-2和控制字端口地址分别是FFF0H~FFF3H。
编写8253两个计数器初始化程序及两个计数器的连通图。
计数器0的计数值:
5M/1K=5000=1388H
方式控制字:
00100101=25H、2DH、35H、3DH(十进制计数)
00100100=24H、2CH、34H、3CH(二进制计数)
计数器1的计数值:
1000
方式控制字:
01101001=69H、79H
(十进制计数)
01101000=68H、78H
(二进制计数)
MOVDX,0FFF3H
MOVAL,25H;通道0,只写高字节,方式2,十进制
OUTDX,AL
MOVDX,0FFF0H
MOVAL,50H;计数初值5000
OUTDX,AL
MOVDX,0FFF3H
MOVAL,69H;通道1,方式4
OUTDX,AL
MOVDX,0FFF1H
MOVAL,10H;计数初值1000
OUTDX,AL
3、某字符输出设备(如打印机),其数据口和状态口的地址均为80H。
在读取状态时,当标志位D7=0时,表明该设备闲,可以接收一个字符,请编写利用查询方式进行数据传送的程序段。
要求将存放于符号地址addr处的一串字符(以$为结束标志)输出给该设备。
movbx,offsetaddr;利用offset操作符,可在汇编过程中得到addr的偏移地址
again:
movah,[bx]
cmpah,’$’
jzdone
status:
inal,80h;查询一次
testal,80h;两个80h不一样
jnzstatus;D7=1,表示设备忙,继续查询
moval,ah
out80h,al;输出一个字节
incbx
jmpagain;循环
done:
……
如图10.23为用一片8255A控制8个8段共阴极LED数码管的电路。
现要求按下某个开关,其代表的数字(K1为1,K2为2,…K8为8)在数码管从左到右循环显示(已有一个延时子程序delay可以调用),直到按下另一个开关。
假定8255A的数据端口A、B、C及控制端口的地址依次为FFF8H~FFFBH。
编写完成上述功能的程序,应包括8255A的初始化、控制程序和数码管的显示代码表
;显示代码表
tabledb0c0h;对应0(任意)
db0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h;对应1~8
;8255A初始化
movdx,0fffbh
moval,10001001b;=