一、8086CPU功能结构:
1.1执行部件EU
组成:
AX BX CX DX
BP SP SI DI
FLAGS
ALU EU控制
功能:
1.从指令队列中取指令、译码、执行指令
2.通过ALU来进行数据的运算,运算结果存储在标志寄存器中
3.向BIU提供操作数的内存或l/О端口的地址。
4.管理标志寄存器和指令操作数。
1.2总线执行部件BIU
组成:
CS DS ES SS
IP
地址加法器、总线控制
指令地址
功能:
功能:
1外部总线连接,完成EU所需的总线操作,计算形成20位的物理地址。
2.从内存储器中取出指令送指令队列排队。
2按EU的要求读写内存、l/O中的操作数。
CF进位;
AF半进位;
PF奇偶----偶 1、奇 0;
ZF零;
SF符号;
OF溢出;
二.8086存储、寻址
2.1逻辑地址到物理地址
段地址:段内偏移地址的表示方法称逻辑地址
物理地址PA=段地址×16+偏移地址(EA)
2.2寻址方式
直接寻址:EA(有效地址)又指令直接给出->MOV AX,[2000H]
寄存器间接寻址:有效地址EA由某个寄存器给出->表示方法:[BX]、[BP]、[SI]、[DI]->mov ax [bx]
基址寻址:EA=基址寻址器:BX、BP + 立即数->MOV AX,[BX+3]、MOV AX,3[BX]、MOV [BP],Dl
变址寻址:EA=变址寻址器:SI、DI + 立即数->MoV AX,[SI+1000H]、MOV [DI+200H],CL
基址变址寻址:EA=基址寻址器+变址寻址器
基址变址位移寻址:EA=基址寻址器+变址寻址器+立即数
练习:
三、指令
3.1数据传送指令
例2:编写指令序列把12H送给内存单元300H:200H。
MOV AX,300H
MOV DS,AX
MOV BETY PTR [200H],12H
3.2算数逻辑指令
ADD 操作数不能使用段寄存器
ADC ADC d,c------->(d) <-(d)+(s)+CF
INC INC d --------->d=d+1
SUB SUB d,s----------->(d) <-(d)-(s)
SBB SBB d,s----------->(d) <-(d)-(s)-cf
DEC DEC d--------->d=d-1
NEG NEG d ---> (d)<非(d)+1
3.3逻辑运算与移位指令
逻辑运算指令 ADD OR XOR NOT TEST 移位指令
SHL---SHL d,CL---右边补0,左边进入CF---无符号数*2^CL
SHR---SHR d,CL---左边补0,右边进入CF---无符号数/2^CL
SAL---SAL d,CL---右边补0,左边进入CF---无符号数*2^CL
SAR---SAR d,CL---符号位不变,右边进入CF---有符号数/2^CL
ROL---ROL d,CL---左边进入CF的同时进入最右边
ROR---ROR d,CL---右边进入CF的同时进入最左边
3.4控制转移指令
JMP---JMP d---无条件转移
CALL---CALL n----无条件调用子程序
RET---RET n---无条件返回n中
J?---J? d---条件转移
JZ---等于0
JNZ---不等于0
JA---无符号 大于
JNA---无符号 不大于
JB---无符号 小于
JNB---无符号 不小于
JG---有符号 大于
JNG------有符号 不大于
JL---有符号 小于
JNL---有符号 不小于
LOOP---循环
编写将内存以ES:1000H开始的256个字节单元清零的程序.
MOV CX,256
MOV SI,1000H
LOP: AND ES:[SI],00000000B
INC SI
LOOP LOP
试编写程序,统计以DS:80O0H为起始地址的连续200个字节单元中的0的个数。
MOV CX,200
MOV SI,8000H
MOV AL,0
LOP:CMP BYTE PTR [SI],0
JNZ NEXT
INC AL
NEXT:INC SI
LOOP LOP
在以DS:3301H为首地址的存储单元中,连续存放了50个无符号的字节数据,要求在其中找出最小值,并将它放在地址为DS:3300H的字节单元中。试编写程序。
MOV SI,3301H
MOV CX,49
MOV AL,[SI]
LOP:INC SI
CMP AL,[SI]
JNA NEXT
MOV AL,[SI]
NEXT:LOOP LOP
MOV [3300],AL
四、汇编程序设计
$-array;array的元素个数
DOS系统功能调用
键盘单字符输入(1号)
输出单字符(2号)
输出字符串(09号)
五、内存储器技术
字扩展、位扩展、字位扩展
片选控制器方法:
线选法:地址中的高位部分不经译码,直接用它们分别作各个芯片的片选信号。 例:
8.输入输出技术
IO端口如果是16位地址就必须先装在DX中,在调用DX
8.1无条件传送
又称同步传送,CPU可以随时与lO进行数据传送,不依赖于任何条件 对于输入口,CPU总是认为外设数据已经准备好,可读>对于输出口,CPU总是假设外设数据端口已空,可写 不需要在CPU和IIO之间建立任何握手信号,所需硬件很少,软件简单 适用于开关、继电器、步进电机、LED、数码管显示器等
8.2查询传送方式
CPU通过程序指令不断询问外设的工作状态,如果“就绪”就开始进行数据传送,如果未“就绪”则继续不断地询问 又称应答式传送,在CPU和外设之间建立了问答机制 除了使用数据口外,还要用到状态口
例题:例2:某外设接口的8位数据端口地址为200H,状态端口地址为201H,状态口中第7位为1表示外设已准备好。如该外设为输入设备,试编制从该设备输入一个字节数据的程序段。
MOV DX,201H
LOP:IN AL,DX
TEST AL,1000 0000B
JZ LOP
MOV DX,200H
OUT AL,DX
例题:例3:某外设接口的8位数据端口地址为200H,状态端口地址为201H,状态口中第7位为1表示外设己准备好。如该外设为输出设备,则向该设备输出一个字节数据的程序段如何编制?
MOV DX,201H
LOP:IN AL,DX
TEST AL,1000 0000B
JZ LOP
MOV DX,200H
OUT DX,AL
九、8255、8253
9.1 8255
考点1:端口地址计算
首先要了解138译码器,E1、E2 E3分别为 H L L,所以A15-A7--->0000 0010 1 A6-A4做片选,选的是IO3,则A6-A4--->011 A1/A2代表片内 所以各个端口地址为:
基本地址:
A口:0000 0010 1011 0000----02B0H
B口:0000 0010 1011 0010----02B2H
C口:0000 0010 1011 0100----02B4H
控制口:0000 0010 1011 0110----02B6H
考点2:根据输入,进行输出
开关闭合:0000 0000-----B口输出--0000 1111B
开关打开:0000 0010-----B口输出--0011 1111B
MOV DX,1232H
A1:IN AL,DX
TEST AL,0000 0010B
JNZ A2
MOV AL,0000 1111B
MOV DX,1231H
OUT DX,AL
JMP A1
A2:MOV AL,1100 0000B
MOV DX,1231H
OUT DX,AL
JMP A1
考点3:8255初始化