1.指令对标志位的影响
MOV指令不影响标志位 PUSH和POP指令均不影响标志位 输入输出指令(IN,OUT),换码指令(XLAT)不影响标志位
LEA(目的操作数使用寄存器,不能使用段寄存器,源操作数不能用立即数和寄存器)
不影响标志位
CBW,CWD不影响标志位
加法减法指令,除INC和DEC不影响CF标志外,他们都影响条件标志位
NEG指令的条件码按结果设置,操作数为0时CF=0,其余均为1。当字节运算时对-128
求补,以及字运算时对-32768求补,OF=1,其余均为0
乘法指令,对除CF,OF以外的条件码无定义,MUL如果乘积的高一半为0,则CF和OF
均为0,否则均为1。IMUL如果乘积的高一半是低一半的符号扩展,CF和OF均为
0,否则均为1
除法指令对所有条件码均无定义
NOT不影响标志位,AND,OR,XOR,TEST使CF和OF为0,AF无定义,SF,ZF,PF根据结果
位测试指令影响CF,其他标志位无定义
移位指令,OF当CNT=1时才是有效的,否则无定义(最高有效位值变化,OF=1,否则
OF=0),循环移位不影响除CF,OF以外的其他标志位,移位指令根据结果设置SF、
ZF、PF,AF无定义
2.减法OF的设置:若两个数的符号相反,而结果的符号与减数相同,则OF=1;除上述情
况外OF=0
3.寻址方式
立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,
基址变址寻址,相对基址变址寻址,比例变址寻址,基址比例变址寻址
相对基址比例变址寻址
4.指令系统分成六大类,数据传送指令、算术指令、逻辑指令、串指令、控制指令和处理
机和杂项指令。
5.指令RET 完成调用过程的返回,每个过程有far或Near 属性;指令IRET 完成中断处理程 序的返回。
6.在文本显示模式下,屏幕上的每个字符在存储器中有2个字节的空间与之对应
7.执行指令CALL SUBB时,所要保护的断点在(sp) 中,而执行指令CALL FAR PTR SUBB时,所要保护的断点在(((sp)+2),(sp))中
8.段内直接近转移:JMP NEAR PTR OPR或JMP OPR IP?(IP)+16位位移量,转移到任何位置,
相对寻址
段内直接短转移:JMP SHORT OPR IP?(IP)+8位位移量,-128~+127之间转移,相对寻址
段内间接近转移:JMP WORD PTR OPR ,(IP)?(EA),OPR使用除立即数以外的任一寻址方式
段间直接远转移:JMP FAR PTR OPR(IP)?OPR的段内偏移地址,(CS)?OPR所在段的段地址
直接寻址
段间间接远转移:JMP DWORD PTR OPR,(IP)?(EA),(CS)?(EA+2),OPR使用除立即数及存储器方
式以外的任何存储器寻址方式
9.条件转移指令:目标地址应在本条指令下一条指令地址的-128~+127个字节的范围之内
10.将AX寄存器及CF标志位同时清零AND AX,0或XOR AX,AX
11. IN AL , [80H]×在IN指令中端口直接表示时,不加[]
MOV IP , 2000H×IP寄存器不能直接赋值,不能使用MOV指令
PUSH CS√POP CS×POP指令不能使用CS寄存器,不能向CS寄存器中赋值
POP CS×POP指令不能使用CS寄存器,不能向CS寄存器中赋值
POP指令不允许使用立即数寻址方式
12.段不能任意地址,必须从任一小段的首地址开始,从0开始,每16个字节为一小段
13.在debug中显示寄存器内容的命令为R,修改内存单元数据的命令为E,单步执行的命令
为T
14.I/O指令是CPU与外部设备进行通信的最基本途径,即使使用DOS功能调用或BIOS例行程
序,其例行本身也是用IN和OUT指令与外部设备进行数据交换的。
15.中断20H到3FH用于调用DOS功能例行程序,其他中断号小于20H或大于3FH的中断用于
调用BIOS或一些应用软件。
16.外设发出中断请求到CPU响应中断,控制条件:外设的中断请求是否屏蔽(IMR),CPU
是否允许响应中断(IF)
IF=0,CPU禁止相应任何外设的中断,IF=1,允许CPU响应外设的中断请求
CPU不能禁止非屏蔽中断,非屏蔽中断主要用于一些紧急的意外情况处理
在中断处理完成后,必须把中断结束位置为1
17.DOS功能与BIOS功能都通过软件中断调用,把功能号装入AH,子功能号装入AL。
18.PC机系列的键盘触点电路按16行*8列的矩阵来排列,按键的识别采用行列扫描法。 低7位是键的扫描码,最高位为0或1,分别表示键是“按下”状态还是“放开”状态。
键盘上每个键都对应一个扫描码
19.显示器可简单地分为单色显示器和彩色显示器。微机系统广泛使用的是光栅扫描显示器。
显示适配器也称为显示卡,是计算机和显示器的接口。
20.一副屏幕上有20个字符(25*80),对应显示屏幕上的每个字符,在存储器中又连续的
两个字节表示,一个字节保存ASCII码,另一个字节保存字符的属性。显存容量需要4KB。 对单色显示,字符的属性定义了字符的显示特性。
第二篇:汇编语言及接口技术总结
一、
1.补码
正数补码:正数补码是自己
复数补码:写出其绝对值正数补码、各位取反、末位加1
二、
1.硬件:中央处理器、内存储器、输入输出设备、系统总线(数据线、地址线、控制线三组)
2.CPU:执行单元EU+总线接口单元BIU组成。EU由算术逻辑单元ALU、控制部件及一些寄存器组成。BIU给EU递交指令和数据。
**3.80X86寄存器组
通用寄存器:
数据寄存器 AX :累加器,算术运算主要寄存器。
I/O指令也用这寄存器与外设传送信息。
BX :计算存储器地址时经常作基址寄存器 。
CX :移位、循环和串处理指令中用来保存计数值。
DX :双字运算时把DX与AX组合存放一个双字,DX存高位
字。某些I/O操作时DX可以存放I/O端口地址。
指针寄存器 SP :堆栈指针寄存器,存放当前堆栈段栈顶的偏移量,
它们总与SS堆栈段寄存器配合存取堆栈段中的数据。
BP :基址指针寄存器,可以用SS连用来确定堆栈段中某
一存储单元的地址。并且可用作堆栈区中的一个基
地址以便访问堆栈段中信息。
变址寄存器 SI :源变址寄存器SI和目的变址寄存器DI一般与数据段
寄存器DS连用,来确定数据段中某一存储单元的地
址,这两个寄存器有自增和自减的功能。
DI :
PS:SP不能随意改动,需要慎用。80286只有4个指针和变址寄存器以
及BX可以存放偏移地址,80386所有32为通用寄存器都可以存放地址。
控制寄存器:
IP :指令指针寄存器,总是与CS段寄存器配合指出下一
条要执行指令的地址,存放偏移量部分。
FLAGS :标志寄存器,也称为状态寄存器。有如下标志:
CF:进位标志,存放进位或借位,也可以测溢出,溢出
时CF=1
PF:奇偶标志,记录运算结果低8位含1个数为奇数还是
偶数,可用于检测数据传送过程中是否发生错误。
偶数为1,奇数为0
AF:辅助进位标志,记录运算结果低4位向前产生的进
位或借位,有则为1。
ZF:零标志,记录结果是否为0,为0则置1,否则清。
SF:符号标志,记录结果符号,负则为1,否则清零
OF:溢出标志,记录结果是否溢出,可以检测带符号
数运算时是否溢出,溢出时OF=1
DF:方向标志,服务于字符串操作指令,DF为1时,
每次操作后SI和DI减小,DF为0时SI和DI增大。
TF:陷阱标志,用于程序调试。当TF=1时CPU处于单步
方式,TF=0时CPU处于连续方式。
IOPL:特权标志,占D13和D12两位,保护模式下用于
控制对I/O地址空间的访问,只对80286以上CPU有效
ID:标识标志,ID=1则表示PENTIUM支持CPUID,只对
PENTIUM以上有效。
段寄存器:
代码段寄存器 CS:指定当前代码段,代码段中存放当前正
在运行的程序段。
堆栈段寄存器 SS:指定当前堆栈段。
数据段寄存器 DS:指定当前运行程序所使用的数据段。
附加段寄存器 ES:指定当前运行程序所使用的附加数据段。
4.段式管理:CPU存储器采用分段管理方法。一个内存单元地址=段基址:偏移量
实模式下的1MB存储器里,20位物理地址有前16位段地址和后16位偏移地址组成,段地址只取段起始地址的高16位值。
*物理地址=16d*段地址+偏移地址
三、
1.寻址
A)数据有关寻址方式(8种)
立即寻址方式
MOV AL,6 只能用在源随机数
寄存器寻址方式:操作数包含在寄存器中
MOV BX,AX
以下操作数都不直接放寄存器中
有效地址EA=基址+(变址*比例因子)+位移量
直接寻址方式:操作数有效地址直接包含在指令中
MOV VAR,AX
MOV AX,[78H] 必须和DS组合求出物理地址
段跨越前缀:MOV AX,ES:[78H]
符号表示地址:MOV AX,VAR = MOV AX,[VAR]
双操作数指令两个操作只能有一个使用存储器寻址方式。
寄存器间接寻址方式:地址只能在BX,BP,SI,DI中。
操作数在存储器中,不能在AX等寄存器中。
MOV AL,[BX]
寄存器相对寻址方式:也称直接变址寻址方式,操作数有效
地址是BX、BP或SI、DI寄存器的内容和
指令中给定的一个位移量之和。
MOV AL,BUF[BX]
MOV AL,8[BX] = MOV AL,[BX+8]
基址变址寻址方式:操作数有效地址必须是一个BX、BP和一个 SI、DI的内容之和。
MOV AL,[BX][SI] = MOV AL,[BX+SI] 访问一位数组
相对基址变址寻址方式:基址+变址+给定位移量
MOV AL,MASK[BX][SI] = MOV AL,MASK[BX+SI]
= MOV AL,[MASK+BX+SI] 访问二维数组
比例变址寻址方式
EA=(基址)+(变址)*比例因子+disp
B)地址有关寻址方式(4种)
段内直接寻址方式
EA=(IP)+DISP
段内间接寻址方式
JMP BX
JMP WORD PTR [BX]
JMP TABLE[BX]
JMP [BX][SI]
段内转移只改变IP
段间直接寻址方式
JMP FAR PTR LAB :偏移量送IP 段基址送CS
段间间接寻址方式
JMP DWORD PTR [BX]
段间转移 IP和CS都改变
2.汇编指令
A)数据传送指令
MOV DST(目标),SRC(源)
注意:1.源和目标寄存器数据类型必须一样(占用字节数)
2.立即数不能做DST,立即数不能直接送段寄存器。
3.DST不能是CS。
4.2个存储单元、段寄存器不能直接传送。
MOV AX,SEG TAB ;把TAB段基址给AX
MOV DI,OFFSET TAB ;把TAB偏移量给DI
PUSH SRC (SP=SP-2)
POP DST (SP=SP+2)
PUSHA ;把8个16位通用寄存器入栈 (SP=SP-16)
(顺序AX CX DX BX SP BP SI DI)
POPA ;把8个16位通用寄存器入栈 (SP=SP+16)
(顺序DI SI BP SP BX DX CX AX)
XCHG AX,BX 交换AX,BX值
PS:不能同时为存储器操作数
B)输入输出指令
IN ACR,PORT ;把外设端口PORT内容传送给累加器ACR
(例:IN AL,61H ;把61H端口内容输入到AL中)
OUT PORT,ACR ;把累加器的内容传送到外设端口
(例:OUT 20H,AX ;把AX内容输出到20H端口)
所有I/O端口与CPU之间的通信都由IN和OUT指令完成。
C)查表指令
XLAT :通过AL寄存器中索引值在表中查得表项内容
并将之返回到AL中。
D)地址传送指令
LEA REG,SRC ;把源操作数的有效地址送给指定的寄存器
PS:源操作数必须是存储器操作数
(例:LEA BX,TAB = MOV BX,OFFSET TAB MOV比
LEA快但是OFFSET只能与简单的符号地址相连
例如:LEA BX , [BX+SI+0F62H] )
LDS REG,SRC ;加载数据段指针指令,把源操作数的FAR型 指针拷贝到DS和指令中指定的通用寄存器。 若REG是32位,则源操作数必须是48位,其中 低32位送寄存器,高16位送DS
(例:LDS SI,ADDR ; (DS:addr)=78563412H
则执行结果是(DS)=7856H,(SI)=3412H )
LES REG,SRC ;加载附加数据段指针指令,REG不可用段寄存器。
E)标志传送指令
PUSHF/PUSHFD ;标志进栈指令,把FLAGS压入栈,SP=SP-2 POPF/POPFD ;标志出栈指令,把FLAGS推出栈,SP=SP+2 LAHF ;标志送AH指令,把FLAGS低八位送AH
SAHF ;AH送标志寄存器指令SAHF,把AH传给FLAGS低八位
F)二进制算术运算指令
CBW 字节扩展成字指令;把AL寄存器中符号位值扩展到AH中, (例:MOV AL,5 CBW 执行后(AH)=0,AL不变)
CWD 字扩展成双字指令;把AX寄存器中符号位值扩展到DX中, (例:MOV AX,5 CWD 执行后(DX)=0,AX不变)
CDQ 双字扩展为四字;把EAX寄存器符号位值扩展到EDX中 CWDE AX符号位扩展到EAX指令,AX寄存器中符号位扩展到 EAX的高16位。
G)二进制加法指令
ADD DST,SRC ;DST=DST+SRC 不带进位
ADC DST,SRC ;DST=DST+SRC+CF 带进位 CF
INC DST ;DST=DST+1S
XADD DST,SRC ;TEMP=DST+SRC,SRC=DST,DST=TEMP
H)二进制减法指令
SUB DST,SRC ;DST=DST-SRC 不带借位
SBB DST,SRC ;DST=DST-SRC-CF 带借位 CF
DEC DST ;DST=DST-1
CMP DST,SRC ;改变标志位
NEG DST ;求补指令,对目标操作数求反加一,实现DST=0-DST 该指令可以求一个数的相反数或者负数绝对值
I)二进制乘法指令
MUL SRC ;无符号乘法,实现AX=AL*SRC, (DX,AX)=AX*SRC 源操作数不能是立即数,若乘机高半部分为0则 对CF和OF清0,否则置CF和OF为1。
IMUL SRC ;带符号数乘法。
例(80286)
IMUL AX,BX; AX=AX*BX;
IMUL AX,5;AX=AX*5;
IMUL AX,BX,5 ;AX=BX*5;
J)二进制除法指令
**DIV SRC; 无符号除法。
例:AX / SRC8 商在AL,余数在AH
DX:AX / SRC16 商在AX,余数在DX
EDX:EAX / SRC32 商在EAX,余数在EDX
IDIV SRC ;有符号除法,余数符号与被除数相同
K)十进制调整指令
加法的十进制调整指令DAA
减法的十进制调整指令DAS
加法的ASCII调整指令AAA
减法的ASCII调整指令AAS
乘法的ASCII调整指令AAM
除法的ASCII调整指令AAD
L)逻辑指令
NOT DST ;逻辑非
AND DST,SRC ;逻辑与
TEST OPR1,OPR2 ;测试
OR DST,SRC ;逻辑或
XOR DST,SRC ;逻辑异或
M)移位指令
SHL DST,CNT ;DST左移CNT位,右侧补0,逻辑左移 SAL DST,CNT ;DST左移CNT位,右侧补0,算术左移
SHR DST,CNT ;DST右移CNT位,左侧补0,逻辑右移
SAR DST,CNT ;DST右移CNT位,左侧补最左端数字,算术右移
左移乘以2,右移除以2,比乘除法快的多
CHT>1时由CL给出
N)循环移位指令
不带进位ROL DST,CNT ;DST最左位添加到最右边,左移一位,
ROR DST,CNT ;DST最右位添加到最左边,右移一位,
带进位 RCL DST,CNT ;CF移入DST最右边,左移一位,最左边放入CF
RCR DST,CNT ;CF移入DST最左边,右移一位,最右边放入CF
O)转移指令
JMP DST ;DST为转移的目标地址(或称转向地址)
JMP SHORT LABEL ;段内直接短转移。
无条件转移到label处,距离与IP值差在-128-127中
JMP LABEL/JMP NEAR PTR LABEL ;段内直接近转移
无条件转到label处,差在-32KB-32KB之间
JMP REG :段内间接转移
例:LEA BX,B2; JMP BX
JMP FAR PTR LABEL ;段间直接转移,在不同段中跳转
JMP DWORD PTR M ;段间间接转移,转向地址只能放在
内存的双字变量中。
P)循环指令
LOOP LABEL ;CX=CX-1,若CX!=0则跳转LABEL
LOOPE/LOOPZ LABEL ;CX=CX-1,若CX!=0或ZF=1则跳转LABEL
相等循环,比较两个字符串
LOOPNE/LOOPNZ LABEL ;CX=CX-1,若CX!=0或ZF=0则跳转LABEL 不等循环,在数据块中查找信息
Q)子程序
CALL DST
RET
3.中断调用与返回指令
中断——内部中断,外部中断。
内部中断(除以0时所产生的中断, 为了做某些处理而设置的中断指令)
外部中断(I/O设备与CPU之间的通信)
中断向量:中断处理子程序的入口地址。
内中断调用指令INT。INT n ;将FLAGS,CS,IP依次压入栈。
从中断向量表4n处取出N类中断向量
中断返回指令IRET。IRET ;放在中断处理子程序末尾,
将IP,CS,FLAGS依次推出栈
4.处理机控制指令
标志操作指令
CLC ;CF=0
STC ;CF=1
CMC ;CF取反
CLD ;DF=0
STD ;DF=1
CLI ;IF=0
STI ;IF=1
5.串操作指令
REP 重复前缀,用在传送类串之前
REPE/REPZ 相等重复前缀,用在比较类串操作,当比较相等且 执行后面的串指令
REPNE/REPNZ 不等重复前缀,比较不等且重复次数未到时执行 串传送MOVS DST,SRC ;要建立方向标志DF,且存入数据长度CX 地址指针增加时DF=0,减少时DF=1
默认MOVSW;字,从DS:SI到ES:DI
这些寄存器都需要提前初始化好
MOVSB 字节 MOVSD 双字
取串LODS SRC ;
存串STOS DST ;
串输入INS DST,DX ; DX存端口号
串输出OUTS DX,SRC ;DX存端口号
串比较CMPS DST,SRC ;
串扫描SCAS DST ;
四、
1.汇编语言语句
组成:指令、伪指令、宏指令
定义段: 段名 SEGMENT...... 段名 ENDS
定义过程:过程名 PROC......过程名 ENDP
2.常用伪指令
数据定义伪指令
[temp] DB 5 ;DB为字节,DW为字,DD为双字
十进制以D结尾,2进制以B结尾,16进制以H 结尾,若第一位是字母,则必须在前面加上0如0AH
符号定义伪指令
等值EQU伪指令: CR EQU 0DH;回车符等值
***获取长度 COUNT EQU $-STR; COUNT存串长度(获取 等号伪指令:K=K+1; 重复次数未到时的字节数!)
3.结构伪指令
结构定义:结构名 STRUC
......
结构名 ENDS ;
**PS:结构定义放在数据段定义之前
简单字段:一个?、数字、字符、字符串
多重字段:有DUP或者数组多个数据项
结构预置: 结构变量名 结构名 <字段表>
PS:多重字段不能赋初值,只能用,隔开
例:NO1 PAYROLL 30 DUP(<>);
NO2 PAYROLL<,'ABCd',5>
**PS:结构预置放在数据段中
访问结构:
A) LEA BX,NO1
B) MOV NO1.WAGES,100
C) MOV [BX].WAGES,100
D) MOV [BX].NAM[SI],'C'
**PS:结构访问放在代码段中
4.汇编语言操作符
属性操作符 MOV BX, WORD PTR BUF
(PS:类似强制转换,只能出现在操作数)
CC EQU 0ABCDH;MOV AH,HIGH CC;(取高字节,LOW同理)
5.数据的输入输出
键盘中断调用16H
AH=? ;INT 16H;
MOV AH,0;INT 16H;MOV CHAR,AL 从键盘获取一个字符 显示器中断调用10H
显示模式:
AL=显示模式
MOV AH,0;MOV AL,3;INT 10H
清屏:
MOV AH,6; MOV AL,0; 上卷行数
MOV BH,1FH; 空白区属性 MOV CX,0; 窗口左上角 MOV DH,24; 窗口左上角 MOV DL,4FH ;窗口右下角 INT 10H;
设置光标:
MOV AH,2; MOV BH,0;页号
MOV DH,10;行号 MOV DL,20;列号 INT 10H;
读光标:
MOV AH,3; MOV BH,0;页号 INT 10H;
读取后CH=光标开始行,CL=光标结束行
DH=光标所在行, DL=光标所在列
设置光标位置属性和字符:
MOV AH,9; MOV AL,'*'; 字符asc码 MOV BH,0;页号 MOV BL,0EH;字符属性颜色 MOV CX,1; 字符重复次数 INT 10H
以TTY电传打印机方式显示字符:
MOV AH,OEH; MOV AL,'*'; MOV BH,0;页号 INT 10H;
DOS功能中断调用21H
输入字符:MOV AH,1; INT 21H; 输入的字符在AL中 输出字符:MOV AH,2; MOV DL,'A'; INT 21H
输入字符串:定义缓存区 BUF DB 60;定义缓存区长度 DB ? ;预留输入字符个数
DB 60 DUP(?); 定义缓存区
MOV AH,0AH; LEA DX,BUF;传送地址 INT 21H; 输出字符串:STRA DB '!@@','$';输出以$结尾字符串 MOV AH,9; LEA DX,STRA; INT 21H;
五、
1.跳转表
定义: JMP_TAB DW E1
DW E2
DW E3
使用: A)JMP JMP_TAB[SI];
B)LEA BX,JMP_TAB;
JMP WORD PTR [BX][SI];
C)LEA BX,JMP_TAB;
ADD BX,DELTA;
JMP WORD PTR[BX];
2.延时
DELAY:MOV CX,2801;
WT :LOOP WT; 这段程序可以延时10ms
六、
1.子程序定义:
SUB1 PROC 属型(NEAR或FAR)
……
RET
SUB1 ENDP
调用:CALL SUB1
2.子程序传参
通过寄存器
通过变量
通过地址表
通过堆栈(用RET n指令调整SP指针来删除堆栈中多余的参数, 如果是16位寄存器压入,则要N=2*N(参数个数))
七、
1宏定义:
宏指令名 MACRO[形参]
……
ENDM
调用:宏指令名[实参]
2.LOCAL伪指令:宏中用变量名则必须写,每次扩展宏都改变变量名, 保证汇编中生成名字的唯一性。
3.PURGE伪指令:内存中删掉指定宏指令
PURGE INCHAR;
(宏指令如果和关键字重名,宏指令优先度高)
3.宏操作符
&把前面和后面的变量名组合成一个指令助记符
<>把尖括号中的参数变为一个整体的多重字段来扩展宏指令 !把后面的一个字符看做普通字符对待,类似于\转义 %强迫后面表达式立即求值再做实参传入宏指令
;;宏指令中两个;表示宏扩展时不出现注释,
只出现一个;则在扩展时出现注释
3.宏与子程序区别
宏指令每次扩展都要占用存储空间
子程序只占用一份空间,但是多了CALL和RET的时间开销 宏传参方便,灵活多样
4.重复伪指令
REPT 数值表达式
……;重复块
ENDM
例: X=5;
REPT 6;
DW X*X*X;
X=X+1;
ENDM;
5.不定重复伪指令
IRP 形参,<实参> ;重复次数由实参个数而定
……;重复块
ENDM ;程序依次从实参里调参数来形参
例: IRP REG,<AX,BX,CX,DX>
PUSH REG
ENDM
IRPC 形参,字符串
…… ;重复块
ENDM ;重复次数又字符决定,每次用下个字符替代形参 例: IRPC Z,1235
DB Z
ENDM
;全部压入栈程序:
IRPC K,ABCD
PUSH K&X
ENDM
6.条件伪指令
IF XX
[ELSE]
ENDIF
退出当前层宏指令:EXITM
八、
1.CPU与外设信息交换方式:程序查询方式、中断传送方式、DMA方式 (直接存储器方式)、通道方式、I/O处理机管理方式。
程序查询方式:I/O指令在端口级上进行信息输入输出,CPU测试外设 接口状态,若外设没准备好,则继续循环测试,直到 设备准备好,CPU执行一次传送。
优点:实现简单。
缺点:大量时间花费在查询外部设备就绪上系统效率低 **适用于I/O设备少且数据传输率较低的场合。
中断传送方式:计算机暂时挂机正在执行的进程而转去处理某时间。 内中断:CPU状态改变或执行中断指令造成。
INT n指令;除法错中断;断点中断;
溢出中断;(OF=1时INTO)单步中断
外中断:来自处理机外部条件,以完全随机方式中断。 可屏蔽中断(8259a可编程中断控制器)
中断屏蔽寄存器IMR:控制外设中断是否屏蔽
MOV AL,11111101B
OUT 21H,AL
IN AL,21H
AND AL,11111101B
OUT 21H,AL
标志寄存器的中断允许位IF:控制CPU是否允许响应中断
STI:开中断 CLI:关中断
中断结束命令:MOV AL,20H
OUT 20H,AL
3.中断向量:
设置中断向量:AH=25H,AL=中断类型号,DS:DX=中断向量 取中断向量:AH=35H,AL=中断类型号,ES:BX=中断向量 优先级:内中断》不可屏蔽中断》可屏蔽中断》单步中断
4.中断处理子程序:备份寄存器、STI开中断、处理中断、CLI关中断、 发送中断结束命令EOI给8259A、恢复寄存器、IRET
主程序:保存中断向量、设置新中断向量、清零8259A中断屏蔽 寄存器响应位、开中断、主程序结束之前恢复原中断向量
*5.8259A工作方式:
中断请求寄存器IRR(用来请求中断)
中断屏蔽寄存器IMR(存放屏蔽位信息)
中断服务寄存器ISR(存正在服务的中断)
优先权判决电路
控制逻辑(设置管理8259A工作方式)
**有8级优先权,通过级联可以扩展到64级优先权
优先管理方式:
A)全嵌套方式:默认优先权设置方式,IRO优先级最高,IR7最低
B)特殊全嵌套方式:与A)基本相同,不同的是当CPU处理某一级 中断时,如果有同级请求,则CPU会做出响应,从而形成 了对同一级中断的特殊嵌套。
C)优先级自动循环方式:一个中断源的中断请求被响应之后,其 优先级自动降为最低。系统启动时,8级中断优先级默认 为IR0-IR7,IR4发送中断请求后优先级变为IR5-IR7, IR0-IR4
D)优先级特殊循环方式:与C)不同的是初始化优先级不是IR0-IR7 而是由程序控制的。
中断源屏蔽方式:
A)普通屏蔽方式:8259A每个中断请求输入,受屏蔽寄存器相应位 的控制,若为1则请求不能送CPU
B)特殊屏蔽方式:用OCW1对屏蔽寄存器中某一位置位时同时使 当前中断服务寄存器ISR中相应位复位,这样就不只屏蔽 正在处理的中断等级而真正开放其他优先级较低的中断 中断结束方式:
A)中断自动结束方式AEOI:系统一旦响应中断,那么CPU再发第二 请求
个INTA脉冲时就会使中断服务寄存器ISR中相应位复位。
B)普通中断结束方式:当CPU用输出指令向8259A发中断结束命令 OCW2时,8259A才会使中断服务寄存器ISR中优先级别高 的位复位,表示处理中断结束。
C)特殊中断结束方式:在CPU结束中断之后向8259A发送一个特殊 的EOI中断结束命令,指明ISR中需要复位的位
PS:级联系统中,不用自动中断,对于另外2个方式,对于从片在一个 中断服务结束程序时,都必须发送2次中断结束命令,一次对主片, 一次对从片。
连接系统总线方式:
A)非缓存方式:SP/EN作为输入,来确定8259A是主控制器还是从 控制器。
B)缓存方式:SP/EN为输出,用来启动总线驱动器。
中断触发方式:
A)边沿触发方式:申请端出现低电平到高电平的跳变说明有 中断请求信号。
B)电平触发方式:申请端出现高电平表示有中断请求信号。
8259A只有一条地址线,2个端口地址20H和21H,7个命令字 以端口地址区分,
命令字中某些位作特征码来区分,
以命令字写入顺序来区分
初始化控制字 ICW1-ICW4,命令寄存器OCW1-OCW3
ICW1(初始化字) ICW2(中断向量字) ICW3(级联控制字) ICW4(控制初始化命令字)
OCW1(中断屏蔽字)
OCW2(中断结束和优先循环控制字)
OCW3(屏蔽和读状态控制字)
九、
十、
十一、
1.8255A结构
读写控制逻辑:控制A组B组发出控制信号
A组控制逻辑:控制A端口及C端口的高4位
B组控制逻辑:控制B端口级C端口的低4位
A端口工作无限制,B端口只能工作与方式1和方式2,C端口被 分为2个4位端口,除了一般输入输出端口,还可以为A端口和 B端口提供联络信号。
方式0:基本输入输出方式,ABC都可以作用于方式0
用于无条件传输或者查询方式的数据传输。
输出锁存,输入不锁存。
方式1:选通的输入输出方式
单方向输入输出方式,A\B可以工作在方式1,
端口C用来配合作选通信号,若AB都在方式1,则需要
C端口六位做选通信号,剩下2位可在方式0来工作
用于异步或者条件传输方式。
对输入和输出数据都锁存。
方式2:双向传输方式
只适用于端口A且需要端口C的5位做输入和输出选通信号
输入和输出都锁存,A在方式2下时,B即可工作在方式1
又可工作在方式0,端口C剩下3位在方式0
十二、
1.8253可编程定时/计数器用法:
CS A1 A0
0 0 0 选中计数器0
0 0 1 选中计数器1
0 1 0 选中计数器2
0 1 1 选中控制字寄存器
1 0 0 器件未选中
对8253计数器进行初始化需要对控制字寄存器写入控制字,控制字格式如下 D7 D6 D5 D4 D3 D2 D1 D0
6、7位用来选3个计数器
4、5用来控制计数器读写字节数及读写高低字节顺序
1、2、3、4用来选择计数器工作方式
0用来指定计数器码制,是二进制还是BCD
OT:
OUT DX,AL ,AL寄存器值输出到数据总线中,DX输出到地址总线中