赞
踩
CS, DS, SS,ES
IP,FLAGS
状态控制:存放运算结果的特征;
(CF,SF,AF,PF,OF,ZF)
CF
进位标志位
PF
奇偶标志位
AF
辅助进位标志位
ZF
零标志位
SF
符号标志位
OF
溢出标志位
控制标志:控制某些特殊操作;
(IF,TF,DF)
TF
跟踪标志位
IF
中断允许标志位
DF
方向标志位
MOV指令格式:MOV dst, src
MOV AL, 4 ;AL=4
MOV AX, 1000 ;AX=1000
MOV SI, 037BH ;SI=037BH
CS,DS,SS,ES,IP,FLAGS不能用立即数赋值。
mov ax, 2000
mov ds, ax
注意:MOV指令的两个操作数类型是确定的。
MOV [1500H], 9
这种形式不可以。 9可以是字节类型,也可以是字类型的。[1500H]可以表示一个内存单元,也可以表示首地址的内存单元。
应当写成
MOV BYTE PTR [1500H], 9
MOV BYTE PTR [SI], 9
MOV WORD PTR [1500H], 9
MOV WORD PTR [SI], 9
MOV AL,BL
MOV AX, BX
MOV DS, AX
MOV AX, BL
MOV [BX],[SI]
MOV DS, ES
MOV AL,[2000H]
MOV AX,[SI]
MOV [3200H], CX
MOV ARRY[DI], DL
MOV DL, [BX][SI]
DIV BL
商存到AL中,余数存到AH中。
DIV BX
商存到AX中,余数存到DX中。
DIV BYTE PTR[SI]
商存到AL中,余数存到AH中。
DIV WORD PTR[DI]
商存到AX中,余数存到DX中。
说明
余数符号与被除数符号保持一致。
使用符号扩展指令对数据类型进行调整。指令不影响标志位。
功能:字节转换为字。将AL中的数的符号位扩展至16位,扩展的符号部分存入AH中,即由AL扩展为AX,值保持不变。
功能:字转换为双字。将AX中的数的符号位扩展至32位,扩展的符号部分存入DX中。即由DX:AX代替AX,值保持不变。
慕课:逻辑运算指令
逻辑运算指令可以对操作数的任意位进行置位、清0。逻辑运算指令的执行影响6个状态标志位,其中CF和OF标志位会被清0,其他状态位的变化与运算结果有关。
因为逻辑运算不会进位也不会溢出。
AND ,OPRD1, OPRD2
AND AL, 0FH ;取AL的低4位,屏蔽高4位。
AND AX, BX ;AX与BX进行与运算,结果保存在AX中。
AND [SI], AL ;内存单元[SI]与AL与,结果存回内存单元
AND DX, [BX+SI]
OR指令实现或运算。
OR AX, CX
OR [DI], AL
OR AL, 0FH ;AL的低4位被置1,高4位不变。
OR AL, 80H ;AL的符号位置1,其它位保持不变。
例子:对AL进行偶校验:
OR AL, AL ;改变PF的值,若为奇数个1发送,如果为偶数个1,将最高位置位1
JPE CONTINUE
OR AL,80H
CONTINUE: ...
指令格式:NOT OPRD
功能:将OPRD
逐位取反,结果返回OPRD
中。
例如:
MOV AL, 0FH
NOT AL ;AL=F0H
NOT BYTE PTR[SI]
功能:OPRD1
与OPRD2
按位进行异或操作,结果回送OPRD1
中。
例如:
XOR AX, CX
XOR BYTE PTR[DI], 4AH
XOR AX, AX ;AX=0,同时标志位CF=0F=0,这条指令常用于算术运算指令之前清理运算环境。
指令格式:TEST OPRD1, OPRD2
功能:OPRD1
与OPRD2
按位进行与操作,但是结果不回送OPRD1
中,所以指令执行后两个操作数的值保持不变。
指令的执行使标志寄存器的标志位CF=OF=0,AF值不变,SF\PF和ZF受影响。通常是ZF位最受关注。
例如:
TEST AL, 04H
TEST [SI], 80H
AL的二进制表示:xxxx xxxxB
04H的二进制表示:0000 0100B
如果AL的第2位为0,那么相与后结果为0,ZF=1;反之相与后不为0,ZF=0。
OPRD1
中的特定某一位进行测试,OPRD2
用于说明测试的是OPRD1
中的哪一位。OPRD2
的取值为01H, 02H, 04H, 08H, 10H, 20H, 40H, 80H等等。逻辑左移指令SHL,逻辑右移指令SHR,算术左移指令SAL,算术右移指令SAR
指令格式:SHL OPRD, COUNT
功能:将 OPRD 逐位进行左移,最低位第0位向左移到第1位,依次移动,最高位移
出OPRD,移到标志寄存器的 CF 中;第0位空出,用0填补。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
指令格式:SHR OPRD, COUNT
功能:将 OPRD 逐位进行右移,最高位向右移到次高位,依次移动,第0位移出 OPRD,移到标志寄存器的 CF 中;最高位空出,用0填补。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为1或 CL。
指令格式:SAL OPRD, COUNT
说明:算术左移指令与逻辑左移指令的功能相同,这里不再赘述,但算术左移指令将操
作数作为带符号数处理。
指令格式:SAR OPRD, COUNT
功能:将 OPRD 逐位进行右移,最高位向右移到次高位,依次移动,第 0 位移出 OPRD,移到标志寄存器的 CF 中;最高位保持不变。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
循环移位,顾名思义首尾相接成一个环,左循环移位后可以通过右循环移位来还原数据,反之亦然。
4条循环移位指令又按照CF标志位是否参加循环细分为两组,一组CF不参加循环移位但仍然随着循环操作变化,又称为不带CF的循环移位指令;另一组CF参加循环,称为带CF的循环移位指令。
循环左移的指令格式:ROL OPRD, COUNT
功能:将 OPRD 逐位进行左移,第 0 位移到第 1 位,依次移动,最高位移至第 0 位,
同时最高位又移到标志寄存器的 CF 中。
循环右移的指令格式:ROR OPRD, COUNT
功能:将 OPRD 逐位进行右移,最高位移到次高位,依次移动,第 0 位移至最高位,
同时最高位又移到标志寄存器的 CF 中。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
循环左移的指令格式:RCL OPRD, COUNT
功能:将 OPRD 逐位进行左移,第 0 位移到第 1 位,依次移动,最高位移至 CF 位,
CF 位移到第 0 位。
循环右移的指令格式:RCR OPRD, COUNT
功能:将 OPRD 逐位进行右移,最高位移到次高位,依次移动,第 0 位移至 CF 位,
CF 位移到最高位。
说明:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
又称作伪操作语句,它是用来控制汇编语言源程序的汇编过程的,比如如何定义变量、为数据分配存储空间、如何对源程序汇编等。伪操作语句是由汇编程序定义的,也是由汇编程序处理的。伪操作语句汇编后不生成目标代码,所以常被称为伪指令(directive)。它不属于CPU的指令系统,只与汇编程序(MASM)有关。
所有的存储器件都有==地址输入引脚、数据输出或数据输入引脚、从多片存储芯片中选定一个芯片的片选引脚,控制读写操作的控制引脚。
接受CPU发过来的地址信息,以选定存储芯片内部的存储单元。芯片上的地址线都是由A0开始标记到An。
所有存储器件都有芯片选择线,而且至少一根,用来选中这个芯片,或者说激活这个芯片。片选择线常被标识为片选#CS,片使能#CE、或简称为选择#S。
如果存储芯片含有多跟选择线,则只有在所有选择线都处于有效时,芯片才被激活,CPU才可以对它进行读写操作。
每个存储器都有控制输入输出的控制线,常常标记为#OE,#WE。
因此用芯片的13位地址码A0-A12寻址片内的每个单元
A19~ A13 | A12 ~ A0 | 位置 |
---|---|---|
xxxx xxx | 0 0000 0000 0000 | 片首地址 |
xxxx xxx | 1 1111 1111 1111 | 片尾地址 |
译码:将输入的一组高位地址信号通过变换,产生一个有效的输出信号,用于选中某一个存储器芯片,从而确定了该存储器芯片在内存中的地址范围。
将输入的一组二进制编码变换为一个特定的输出信号。
用全部的高位地址信号作为译码信号,使得存储器芯片的每一个单元都占据一个唯一的内存地址。
用部分高位地址信号(而不是全部)作为译码信号,使得被选中存储器芯片占有几组不通得地址范围。
I/O接口的基本功能
I/O接口及其编制方式
I/O地址译码
接口要解决的问题
可编程中断控制器、DMA控制器、PCI总线、系统实时时钟、扬声器、定时器等等时组成系统不可或缺的设备,常称为系统设备。
键盘、鼠标、显示器、打印机、磁盘、光盘、摄像头、音箱等属于外围设备,常称为外部设备。
端口:接口电路中用于缓存数据及控制信息的部件
计算机系统中包含各类不同功能的接口电路。
每个接口中含有1个或多个端口
端口地址
寻址端口的方法:
8086/8088寻址端口的能力:
端口的编址方式:
8088/8086的I/O端口编址
OUT指令将使总线的**#IOW信号有效
IN指令将使总线的#IOR**信号有效
I/O地址译码
由于端口资源丰富,端口地址译码常采用部分地址译码。
了解和掌握:
**特点:**具有对数据的锁存能力
无论是IO接口,还是存储器接口,读写控制信号都一定要作为译码器的输入。
无条件传送
查询式传送
中断方式传送
直接存储器存取(DMA)
特点:
通道型接口:主要用于数据的输入或输出
含3个独立的8为并行输入/输出端口
有3个8位的数据端口,每个端口都可以作为输入端口,或设置为输出端口。
链接系统端的主要引线:
A1 | A0 | 选中端口 |
---|---|---|
0 | 0 | A端口 |
0 | 1 | B端口 |
1 | 0 | C端口 |
1 | 1 | 控制寄存器 |
连接外设端的引脚:
习惯上:
A端口和B端口作为8位数据的输入或输出口
C口的某些位作为状态输入。
注:
双向输入输出方式
只有A端口可以工作在方式2下
方式2的应用:
MOV DX, 1023H ;控制寄存器地址 MOV AL, 10010000B ; OUT DX, AL MOV AL, 0 ;设置PC0为低电平 OUT DX, AL MOV DX, 1021H ;PB端口 MOV AL, 80H ;PB7输出高电平,启动布防 OUT DX, AL A: MOV DX, 1020H ;从A端口读数据 IN AL, DX CMP AL, 0 ;判断是否全为0 JZ A ; MOV CX, 10 ;循环次数 MOV DX, 1022H ;C端口 MOV AL,1 ;高电平闪烁 B: OUT DX, AL ;亮 CALL DELAY NOT AL ;反转为0,灭 CALL DELAY LOOP B
利用8255和8253构造报警系统
系统软件设计
8255_INIT PROC ;初始化子程序
PUSH AX ;压栈
PUSH DX
MOV DX, 3E3H ;写8255控制字
MOV AL, 90H(10010000B);PA方式0输入,PB方式0输出,PC方式0输出
OUT DX, AL
MOV AL, 0CH (00001100B) ;PC6置0
OUT DX, AL
MOV AL, 0FH (00001111B) ;PC7置1
OUT DX, AL
PUSH DX
PUSH AX
RET
8255 INIT ENDP
8253_INIT PROC
PUSH AX
PUSH DX
MOV DX, 3E7H ;8253控制字
MOV AL, 16H(00010110B);计数器0,读/写低字节,方式3(方波),二进制计数
OUT DX, AL
MOV DX, 3E4H ;8253计数器0
MOV AL, 189;
OUT DX, AL
PUSH DX
PUSH AX
RET
8253 INIT ENDP
L1: MOV DX, 3E0H ;PA口,8个监测点 MOV CX, 5 ;循环5次 L2: IN AL, DX ;读监测点数据 CMP AL, 0 ;是否有异常 JZ L1 ;若无异常继续L1程序段检测 LOOP L2 ;否则检查是否连续5次都有异常 MOV DX, 3E2H ;PC口,报警器+警灯 L3: MOV AL, 40H(01000000B) ;PC6高电平\PC7低电平 OUT DX, AL ;警报 CALL DELAY MOV AL, 0C0H(11000000B) ;PC6\PC7高电平 OUT DX, AL ;警报+警灯 CALL DELAY MOV AH, 1;键盘按下执行下一条程序---》MOV AL, 80H INT 16H JZ L3 MOV AL, 80H OUT DX, AL
计数与定时
定时/计算器的工作基准是时钟脉冲
计数脉冲周期恒定 --> 定时
定时的时间长度取决于时钟脉冲的周期及脉冲数
加法计数
减法计数
可编程的逻辑器件;
非通道型的接口,具有特定功能;
可实现计数和定时;
(例如定时启动空调)
工作方式:
认识学习8253主要从这几个方面:
- 外部主要引脚信号功能即内部结构
- 计数启动方式
- 工作方式
- 控制命令字格式
- 应用
连接系统端的主要引线:
具有三个完全相同的、独立的计数/定时器
每个计数器都占有一个端口地址
每一个计数器里面都有两个16位的寄存器:16b初值寄存器、16b计数寄存器。
这两个寄存器在初始都填入值,但16b初值寄存器数值不变,16b计数寄存器中的数值从初始减到0。
A1 | A0 | 选中端口 |
---|---|---|
0 | 0 | CNT0 |
0 | 1 | CNT1 |
1 | 0 | CNT2 |
1 | 1 | 控制寄存器 |
启动方式由GATE端信号的形式决定
软件启动:GATE端必须为高电平
硬件启动:GATE端有一个上升沿
方式0
① 当GATE为高电平时,输入初值后开始计数。
②计数结束后输出高电平。
③其输出信号可用于外部可屏蔽中断请求信号。
方式1
小结
控制字
硬件设计:
软件设计
每一次启动计数,需要有2次写操作:
每个计数器的控制命令字均送入控制寄存器
各计数器的计数初值送到该计数器的计数寄存器及初值寄存器。
原则:先写入控制字,后写入计数初值
MOV DX, 0123H
MOV AL, 34H
OUT DX, AL
MOV DX, 0120H
MOV AX, 20000
OUT DX, AL
MOV AL, AH
OUT DX, AL
特点:
主要引脚功能
MOV DX, PORT
MOV AL, DATA
OUT DX, AL
MOV DX, 0278H ;端口
MOV AL, 0 ;从0开始增加
NET1: OUT DX, AL ;输出电压
INC AL ;增加1
CMP AL, 0FFH ;比较是否达到峰值
JNZ NET1 ;未到达,跳转
DEC AL ;到达峰值,开始减
NET2: OUT DX, AL ;输出电压
DEC AL ;减少1
CMP AL, 0 ;比较是否到达0
JNZ NET2 ;否,跳转NET2,继续减1
JMP NET1 ;是,跳转NET1,重新开始
两片0832
两片0832的DAC寄存器具有同样的地址,其#XFER 并联在一起,共同使用了PORT3的地址
MOV AL, DATA
MOV DX, PORT1; 0832-1的输入寄存器地址
OUT DX, AL
MOV DX, PORT2; 0832-2的输入寄存器地址
OUT DX, AL
MOV DX, PORT3; DAC寄存器地址
OUT DX, AL
HLT
ADC0809:
中断,是指在程序执行过程中,出现某种紧急事件,CPU暂停执行现行程序,转去执行处理该事件的程序——中断服务程序,执行完后再返回到被执行的程序继续执行,这一过程称为中断。
中断源
常见中断源
(1)一般的I/O设备发出的中断请求,如键盘、打印机等。
(2)数据通道发出的中断请求,如键盘、打印机等。
(3)实时时钟发出的中断请求,如定时芯片8253的定时输出。
(4)硬件故障发出的中断请求,如电源掉电、RAM奇偶校验错等。
(5)软件故障发出的中断请求,如执行出书为0的除法运算、地址越界、使用非法指令等。
(6)软件设置的中断源,如在程序中用中断指令而产生的中断。
中断处理的基本过程包括:中断请求、中断判优、中断响应、中断服务和中断返回等5个阶段。
(1)发生在CPU内部的中断,不需要中断请求,CPU内部的中断控制逻辑直接接收处理。
(2)外部中断请求由中断源提出。外部中断源利用CPU的中断输入引脚输入中断请求信号。一般CPU设有两个中断请求输入引脚:可屏蔽中断请求输入引脚和不可屏蔽中断请求输入引脚。
(3)中断请求触发器:
每个中断源发出中断请求信号的时间是不确定的,而CPU在何时响应中断也是不确定的。所以,每个中断源都有一个中断请求触发器,锁存自己的中断请求信号,并保持到CPU响应这个中断请求之后才将其清除。
(4)中断允许触发器
在CPU内部有一个中断允许触发器,当其为“1”时,允许CPU响应中断,称为开中断。若其为“0”,不允许CPU响应中断,中断被屏蔽,称为关中断。
CPU检测到中断请求后,首先读取中断请求寄存器的内容,逐位检测它们的状态,检测到某一位为1,就确定对应的中断源有中断请求,专区执行它的中断服务程序。
先检测哪一个,哪一个的优先级就高,后检测哪一个,哪一个优先级就低,检测的顺序就是各中断源的优先级顺序。
输入端口地址为67FFH。查询程序:
MOV DX, 87FFH
IN AL, DX ;读中断请求寄存器内容
SHR AL, 1 ;右移一位,移到CF位置上
JC IR0 ;IRQ0有请求,转IR0
SHR AL, 1
JC IR1 ;IRQ1有请求,转IR1
SHR AL, 1
JC IR2 ;IRQ2有请求,转IR2
软件判优耗时较长。如果中断源很多,中断的实时性就很差,但是软件判优优先权安排灵活。
利用专门的硬件电路确定中断源的优先级,有2种常见的方式,菊花链判优电路和中断控制器判优。
中断控制器,如Intel8259A,可以以多种方式设置中断源的中断优先级。中断控制器中有一个中断优先级判别器,它自动判别出目前提出中断请求的优先级最高的中断源,并将它的中断向量码送到数据总线,CPU接收中断向量码并据此找到它的中断服务程序。
经过中断判优,中断处理就进入中断响应阶段。中断响应时,CPU向中断源发出中断响应信号,同时:
① 保护硬件现场;
② 关中断;
③ 保护断电;
④ 获得中断服务程序的入口地址。
中断服务程序的一般结构为:
返回到原程序的断点处,恢复硬件现场,继续执行原程序。中断返回操作是中断响应操作的逆过程。
中断向量表位于内存起始地址00000
~003FFH
的存储区内。从地址00000H
开始,每4个单元存放一个中断向量,其中低地址的两个单元存放中断向量的偏移地址,高地址的两个单元存放中断向量的段基址。256种中断向量按中断向量码从0 ~255的顺序依次存入中断向量表中。
中断向量在中断向量表中的存放首地址称为向量地址,其值为:中断类型码 x 4。
当CPU调用中断类型码为n的中断服务程序时首先把n乘以4,得到他的向量地址4n,然后把4n+1
:4n
两个单元的内容去除并装入IP寄存器;再把4n+3
:4n+2
两个单元的内容去除并装入CS寄存器,CPU就获得了n
的中断服务程序入口地址,进而转去执行中断服务程序。
8086/8088CPU芯片有两个硬件中断请求信号输入引脚:NMI和INTR, 用来接收外部中断源产生的中断请求。NMI引脚接收非屏蔽中断请求,INTR引脚接收可屏蔽中断请求。
CPU在每条指令的最后一个时钟周期按照下列顺序检测有无中断请求:
获得中断类型码后,各种中断的处理过程相同。CPU将中断类型码放入暂存器保存,以下动作顺序发生:
CPU响应中断时将状态表制寄存器的内容压入堆栈以保护现场,堆栈指针SP减2,接着CPU将主程序断点CS和IP的内容压入堆栈以保护断点,堆栈指针SP再减4。在中断服务程序的末尾执行IRET指令,从堆栈中弹出IP\CS\FLAGS,堆栈指针SP+6,堆栈恢复原状。
中断响应时,CPU发中断响应信号,同时:
① 保护硬件现场;
② 关中断;
③ 保护断点;
④ 获得中断服务程序的入口地址。
Intel 8259A可编程中断控制器 可以管理8个外部中断源,多偏8259A级联最多可以管理64个外部中断源(1个主片,8个从片),而无需外加电路。
它有多种工作方式。
CPU响应中断时,它提供中断源的中断向量码。
8259A的内部逻辑由以下部分构成:
(1)数据总线缓冲器,它是CPU与8259A之间的数据总线接口,传输的信息包括控制信息、状态信息及中断信息。
(2)读/写控制逻辑。
8259只有一根地址线,说明内部只有2个端口。
A0 = 0时,偶地址。A0 = 1时,奇地址。
(3)级联控制,用以实现8259A芯片之间的级联,使得中断源可以由8级扩展至64级。
(4)中断请求寄存器IRR,用于寄存IR0~IR7的中断请求信号。如果由中断请求,IRR寄存器中的对应位置1。
(5)中断服务寄存器ISR,保存当前正在处理的中断请求。当CPU正为某个中断源服务时,8259A使ISR中的相应位置1。当ISR全为“0”时,表示无任何中断服务。
(6)优先级分辨其PR,也称优先级判决器,用来管理和试别各个中断源的优先级别。
(7)操作命令字寄存器,OCW1~OCW3,用于对中断处理过程的动态控制,由应用程序设定,在一个系统运行过程中,操作命令字可以被多次设置。
中断屏蔽寄存器IMR用于存放CPU送来的中断屏蔽信号OCW1,它的每位对应IRR寄存器中的位。当它的某位为“1”时,对应的中断请求就被屏蔽,即对该中断源的中断请求置之不理。
(8)初始化命令字寄存器
ICW1~ICW4,由初始化程序设置。初始化命令字送入8259A时,必须严格按着规定的顺序。
A0:地址输入引脚,选择8259A内部不同的寄存器。
A0 = 0 ICW1 \ OCW2 \ OCW3
A0 = 1 ICW~ICW4\ OCW1
CAS2~CAS0:级联信号引脚,用来选择从片。当8259A为主片时,为输出;否则为输入。与#SP/#EN信号配合,实现芯片的级联。
#SP/#EN:从片编程/允许缓冲器,双功能引脚。在非缓冲方式下,#SP/#EN引脚作为输入,用来决定本片8259A是主片还是从片。#SP/#EN为1,则8259A为主片。#SP/#EN为0,则8259A为从片。在缓冲方式下,#SP/#EN引脚作为输出,用作8259A外部数据总线缓冲器的信号。
在8259A的工作期间,操作命令字用于控制8259A的操作。例如,可以通过操作命令字重新设置工作方式,或者实施读取8259A中某些寄存器的内容。
中断屏蔽字。用于设置或读取中断屏蔽器IMR,它对IR7~IR0的中断请求输入进行管理。
ICW1 EQU 00010011B ;13H写入20端口 ICW2 EQU 00100000B ;20H写入21端口,设置8个中断源的中断向量码 ICW4 EQU 00000011B ;03H写入21端口,中断结束方式是自动结束 OCW 1 EQU 00000000B ;00H写入21端口,8个中断源都没有屏蔽 Init PROC MOV DX, CS8259A MOV AL, ICW1 OUT DX, AL MOV DX, CS8259B MOV AL, ICW2 OUT DX, AL MOV DX, CS8259B MOV AL, ICW4 OUT DX, AL MOV DX, CS8259B MOV AL, OCW1 OUT DX, AL STI ;开中断 RET Init ENDP
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。