微机原理基本概念复习Word下载.docx
《微机原理基本概念复习Word下载.docx》由会员分享,可在线阅读,更多相关《微机原理基本概念复习Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
15多字节数据存放方式:
图中0002H“字”单元的内容为:
[0002H]=1234H
0002H号“双字”单元的内容为:
[0002H]=H
16物理地址和逻辑地址的转换
例设代码段寄存器CS的内容为1000H,指令指针寄存器IP
的内容为2500H,即CS=1000H,IP=2500H,则访问代码段
存储单元的物理地址为:
17指令周期:
是指一条指令经取指、译码、读写操作数到执行完成的过程。
若干总线周期组成一个指令周期
18总线周期
是指CPU通过总线操作与外部(存储器或I/O端口)进行一次数据交换的过程
8086的基本总线周期需要4个时钟周期,4个时钟周期编号为T1、T2、T3和T4
总线周期中的时钟周期也被称作“T状态”,时钟周期的时间长度就是时钟频率的倒数
当需要延长总线周期时插入等待状态Tw,CPU进行内部操作,没有对外操作时,其引脚就处于空闲状态Ti
8086如果工作频率1MHZ,1个基本总线周期需要多长时间。
19指令代码由操作码和操作数两部分组成
寻址方式:
立即数寻址MOVAX,14
寄存器寻址:
MOVDS,AX
直接寻址:
MOVAX,[2000H],MOVBX,BUFFER
寄存器间接寻址MOVAX,[BX]
寄存器相对寻址MOVAX,[SI+06H]
基址变址寻址方式MOVAX,[BX+SI]
相对基址变址MOVAX,[BX+DI+6]
隐含寻址
MULBL;
(AL)×
(BL)→AX隐含了被乘数AL和乘积AX
20存储器寻址方式中的变量
WVARDW1234H
;
定义16位变量WVAR,具有初值1234H
21注意点
1.区别立即数寻址和直接寻址
MOVAX,126
MOVAX,[126]
2.区别寄存器寻址和寄存器间接寻址
MOVAX,BX
MOVAX,[BX]
3.双操作数指令中,不能同为存储器操作数。
4.CS不能为目的寄存器。
最基本的传送指令(MOV)
堆栈指令(PUSH,POP)
数据交换指令(XCHG)
换码指令XLAT
非法指令的主要现象:
两个操作数的类型不一致
无法确定是字节量还是字量操作
两个操作数都是存储器MOV[2000H],[3000H]
立即数直接送段寄存器MOVDS,3000H
目标操作数用立即数方式MOV2000H,AL
两个操作数都是段寄存器MOVDS,ES
在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令
两个操作数类型不一致
MOVAL,050AH;
非法指令,修正:
;
movax,050ah
MOVSI,DL;
movdh,0
movsi,dx
当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明
MOV[BX+SI],255;
;
movbyteptr[bx+si],255
byteptr说明是字节操作
movwordptr[bx+si],255
wordptr说明是字操作
8086/8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)
MOVbuf2,buf1;
假设buf2和buf1是两个字变量
movax,buf1
movbuf2,ax
假设buf2和buf1是两个字节变量
moval,buf1
movbuf2,al
8086指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活
MOVDS,ES;
movax,es
movds,ax
MOVDS,100H;
movax,100h
MOVCS,[SI];
非法指令
指令存在,但不能执行
例3-13把BLOCK1地址开始的10个字节数据传送到BLOCK2地址开始的10个字节单元处。
MOVCX,10
MOVSI,OFFSETBLOCK1
MOVDI,OFFSETBLOCK2
NEXT:
MOVAL,[SI]
MOV[DI],AL
INCSI
INCDI
DECCX
JNZNEXT
HLT
进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部
用堆栈交换AX与CX的值。
pushax
pushcx
popax
popcx
交换指令XCHG(
xchgal,byteptrwvar+1
ax=5599h,wvar=6611h
“byteptrwvar+1”强制为字节量,只取高字节与AL类型交换,否则数据类型不匹配
例3-18内存的数据段有一张0~9的平方表,首地址为TABLE,如图所示,用换码指令实现求数字4的平方。
MOVBX,OFFSETTABLE
MOVAL,4
XLAT
加法指令
2、减法指令
3、乘法指令
4、除法指令
加法指令:
ADD,ADC和INC
减法指令:
SUB,SBB,DEC,NEG和CMP
他们分别执行字或字节的加法和减法运算,除INC和DEC不影响CF标志外,其他按定义影响全部状态标志位
[例3-32]在数据段从BLOCK开始的存储单元中存放了两个8位无符号数,试比较它们的大小,将较大者传送到MAX单元。
LEABX,BLOCK
MOVAL,[BX]
INCBX
CMPAL,[BX]
JNCDONE
DONE:
MOVMAX,AL
HLT
逻辑指令AND、OR、XOR和TEST
屏蔽AL寄存器的低四位。
MOVAL,0FFH11111111
ANDAL,0F0H∧11110000
11110000
例3:
使某数的第4、5位置1。
MOVAL,03H00000011
ORAL,30H∨00110000
00110011
[例3-47]判断DATA单元的数据是否为0。
MOVAX,DATA
ORAX,AX
JZZERO
……
ZERO:
…….
例4:
使某数的D1、D0位取反,其它位不变。
MOVAL,11H00010001
XORAL,03H⊕00000011
=00010010
AND与TEST指令的关系,
同SUB与CMP指令的关系一样
例7:
检测AL中的最低位是否为1,若为1则转移。
MOVAL,data01000001
TESTAL,01H∧00000001
JNZNext00000001
Next:
MOVBL,0
TEST通常用于检测一些条件是否满足,但又不希望改变原来操作数的情况,该指令后通常带有条件转移指令。
移位指令:
移位指令的第一个操作数是指定的被移位的操作数,可以是寄存器或存储单元;
后一个操作数表示移位位数:
该操作数为1,表示移动一位
该操作数为CL,CL寄存器值表示移位位数(移位位数大于1只能CL表示)
SALSHLSARSHR
循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。
分为:
ROLreg/mem,1/CL;
不带进位循环左移
RORreg/mem,1/CL;
不带进位循环右移
RCLreg/mem,1/CL;
带进位循环左移
RCRreg/mem,1/CL;
带进位循环右移
循环移位指令按指令功能设置进位标志CF,但不影响SF、ZF、PF、AF标志,OF只当CNT=1时有效,移位后当最高有效位发生变化时(如1变0)OF=1,否则OF=0。
将中32位数值左移一位
shlax,1
rcldx,1
控制转移指令
JMPJZJNZ
例判断是否为字母Y
寄存器AL中是字母Y(含大小写),则令AH=0,否则令AH=-1
cmpal,’y’;
比较AL与小写字母y
jenext;
相等,转移
cmpal,’Y’;
不相等,
继续比较AL与大写字母Y
movah,-1;
不相等,令AH=-1
jmpdone;
无条件转移指令
next:
movah,0;
相等的处理:
令AH=0
done:
……
[例3-68]在内存中有一个首地址为ARRAY的数据区存放了200个8位有符号数,统计其中正数、负数、0的个数,并分别将统计结果存入PLUS、MINUS和ZERO单元中。
XORAL,AL
MOVPLUS,AL
MOVMINUS,AL
MOVZERO,AL
LEASI,ARRAY
MOVCX,200
CLD
LLAB:
LODSB
ORAL,AL
JSMLAB
JZZLAB
INCPLUS
JMPNEXT
MLAB:
INCMINUS
ZLAB:
INCZERO
DECCX
JNZLLAB
HLT
LOOPlabel;
循环指令
IRET
伪指令:
DB,DW,byteptr
例2:
操作数可以是字符串,例如
STRDB‘HELLO’
汇编后的情况如图:
某数据段定义为
DATASEGMENT
S1DB0,1,2,3,4,5
S2DB‘12345’
COUNTEQU$-S1
S3DBCOUNTDUP
(2)
DATAENDS
画出该数据段在存储器中的存储形式
DOS系统功能调用介绍
(1)从键盘输入一个字符(功能号=1)
MOVAH,1
INT21H
<
AL中有键入的字符>
(1)在显示器上显示一个字符(功能号=2)
MOVAH,2
MOVDL,<
要显示的字符>
例:
在显示器上显示一个字符‘A’
MOVDL,’A’;
或MOVDL,41H
(2)显示字符串(功能号=9)
MOVAH,9
LEADX,<
字符串>
注意:
被显示的字符串必须以’$’结束。
分支程序设计
4-31求符号字节数X的绝对值,X用补码表示
DATASEGMENT
XDB-50
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,X;
取X
TESTAL,80H;
测试符号位
JZDONE;
若大于0,转done
NEGAL;
若小于0,求补得到|x|
MOVX,AL;
保存
DONE:
MOVAH,4CH
CODEENDS
ENDSTART
关于存储器:
扩展存储器所需存储芯片的数量计算:
若用一个容量为mK×
n位的存储芯片构成容量为MK×
N位(假设M>m,N>n,即需字位同时扩展)的存储器,则这个存储器所需要的存储芯片数为(M/m)×
(N/n)。
RAM芯片的容量:
为220×
16b,问
(1)该芯片地址线多少,
(2)数据线多少
SRAM与CPU连接:
CPU数据总线不相同,连接不一样。
8086CPU的16数据总线,其高8位数据线D15-D8接存储器的奇地址体
低8位数据线D7-D0接存储器的偶地址体,
根据BHE(选择奇地址库)和A0(选择偶地址库)的不同状态组合决定对存储器做字操作还是字节操作
存储器与CPU地址总线的连接:
低位地址线直接和存储芯片的地址信号连接作为片内地址译码
高位地址线主要用来产生选片信号(称为片间地址译码),以决定每个存储芯片在整个存储单元中的地址范围,避免各芯片地址空间的重叠。
片选译码的几种方法:
①全译码:
所有的地址线全用上,无地址重叠。
②部分译码:
部分高位地址没有用,存在地址重叠。
(3)全译码
,每个存储单元的地址都是唯一的,不存在地址重复,但译码电路可能比较复杂、连线也较多
I/O端口与存储器统一编址概念
I/O端口独立编址概念
8086采用独立编址
I/O端口地址译码的一般原则:
把CPU用于I/O端口寻址的地址线分为高位地址线和低位地址线两部分:
例6-1,某8088最小系统,I/O接口译码电路如图
A0-A9选择端口
CPU和外设间的数据传送方式
程序控制方式
中断控制方式
DMA方式
程序控制方式
无条件传送方式
查询传送方式
查询传送方式
CPU从接口中读取状态字
CPU检测状态字
传送数据
a)查询式输入的算法:
(1)用指令检测Ready:
INAL,三态缓冲器(或状态寄存器)的地址
(2)若Ready=0,返回
(1)
(3)若Ready=1,发出
INAL,输入接口数据寄存器的端口地址。
查询输入:
MOVBX,OFFSETSTORE
IN_TEST:
INAL,状态口地址
TESTAL,80H
JZIN_TEST
INAL,数据口地址
MOV[BX],AL
INCBX
…
、
b)查询式输出:
OUT_TEST:
INAL,100;
状态端口
TESTAL,80H
JNZOUT_TEST
MOVAL,[BX]
OUT101,AL;
数据端口
…
中断概念:
中断向量表是存放中断向量的一个特定的内存区域。
中断向量,就是中断服务子程序的入口地址。
中断向量表:
中断服务程序的入口地址(首地址)
逻辑地址含有段地址CS和偏移地址IP(共32位),其中低字是偏移地址、高字是段地址
8086微处理器从物理地址00000H开始,依次安排各个中断向量,向量号也从0开始
256个中断占用1KB区域,就形成中断向量表
8259:
完全嵌套方式(默认工作方式):
中断请求按优先级IR0~IR7处理,IR0优先级最高,IR7最低。
当有中断发生时,如果有更高级的中断请求到来,会发生中断嵌套。
中断结束命令
(1)自动中断结束模式(AEOI)
自动结束方式
一进入中断就将ISR中对应的状态标志清除,因为ISR是优先仲裁的依据,所以这种方式只能用在不会出现嵌套的简单场合。
(2)非自动中断结束方式(EOI)
②一般结束方式:
当发出中断结束命令后,用结束指令把当前中断服务寄存器(ISR)中优先级最高的(正在处理的)IS位清除。
(最常用)
8259初始化:
(2)ICW2(中断向量命令字)
向8259A写入ICW1命令字后,应立即向8259A送ICW2。
ICW2用于确定8259A每根IR线上的中断向量号;
(其实确定的是IR0线上的中断向量
设置中断向量号
命令字中,T7~T3为中断向量号的高5位,低3位设为0
根据此命令,8259A自动确定低3位:
IR0为000、IR1为001、……、IR7为111
1)OCW1(中断屏蔽命令字)
屏蔽命令字
内容写入中断屏蔽寄存器IMR
Di=Mi对应IRi,为1禁止IRi中断;
为0允许IRi中断。
各位互相独立。
8255:
例:
若要求8255A#1的各个端口处在如下的工作方式:
端口A方式0输入,端口B方式1输出,端口C(上半部)PC7~PC4输出,端口C(下半部)PC3~PC0输入
解:
方式控制字=B或95H,
初始化程序:
CWREQU0FBH;
8255A#1控制字寄存器端口地址
MOVAL,B
OUTCWR,AL
例8-2使端口C的PC7置1的控制字为00001111B,PC3置0控制字00000110。
8255控制口地址00EEH:
相应的汇编程序为:
MOVAL,0FH
MOVDX,00EEH
OUTDX,AL
MOVAL,06H
注意使端口C按位置位或复位的控制字也是写入至控制字寄存器。
例题8-3
8255工作于方式0,以查询的方式输出,与打印机连接如图所示
程序:
PP:
MOVAL,81H;
控制字A口输出,c高4位输出,低4位输入,方式0
OUT0D6H,AL
MOVAL,0DH;
00001101B
OUT0D6H,AL;
PC6=1,发出STB高电平
MOVCX,100
LEADI,DATAPTR;
DI指向首地址
LPST:
INAL,0D4H;
读C口
ANDAL,04H;
查busy信号
JNZLPST;
如忙,等待
MOVAL,[DI];
不忙,取出一个字节数据
OUT0D0H,AL;
A口输出并锁存字符
MOVAL,0CH;
00001100B
STB=0
INCAL;
AL=00001101
STB=1
INCDI
LOOPLPST
…