微机课程
注意:
数据交换指令
加减运算指令
注意:
两操作数需类型相同,不能同为存储器
加减法指令执行后的结果将影响状态标志
source + dest -> dest
结果送入目的地址,源地址内容不变
dest + source + CF -> dest
dest + 1 -> dest
不影响CF
操作数只能为REG和MEM,类型要明确
demo:
INC CL 对
INC [SI] 错 类型不明确 -> INC BYTE PTR[SI]
INC 2000H 错,立即数没有类型
dest - source -> dest
dest - source - CF -> dest
dest -1 -> dest
dest - source
执行减操作,只影响标志,不影响操作。主要用来判断两数的大小
将操作数中的内容求补后再送入操作数
注意:
逐位求反送至操作数
demo:
AL=abcd
SHR AL,1; AL=0abc CF=d
demo:
AL=abcd
SAR AL,1 ;AL=aabc CF=d
注明:
逻辑右移SHR一位,相当于对无符号数除以2运算;算术右移SAR一位,相当于符号数除以2
demo:
AL=abcd
ROR AL,1 ;AL=dabc,CF=d
ROL类似
demo:
AL=abcdefg,CF=i,CL=4
RCR AL,CL ;AL=fghiabcd,CF=e
demo:
AL=abcdefgh,CF=i
RCL AL,1 ;AL=bcdefghi.CF=a
格式:
MOV AH,1
INT 21H
入口:无入口参数
出口:键入字符ASCII码值在AL
demo:显示字符'B':
MOV AH,2
MOV DL,'B'
INT 21H
入口:输入字符的ASCII送DL
出口:无出口参数
格式:
MOV DX,待显示字符串的首偏移地址
MOV AH,9
INT 21H
入口:DS:DX置字符串首地址,字符串以'$'结尾
出口:无出口参数
格式:
MOV DX,数据区首偏移地址
MOV AH,10
INT 21H
入口:DS:DX置输入数据区首地址,第一单元置允许键入的字符数(含回车符)
出口:键入的实际字符数在第二单元中,键入的字符从第三单元开始存放
内部有14和16位寄存器,其中8个通用寄存器(4个数据寄存器AX、BX、CX、DX,4个变址寄存器SI、DI、SP、BP),4个段寄存器(CS、DS、ES、SS),2个控制寄存器(指令指针IP、微处理器状态字PSW)
10 DUP(1) 重复定义了10个字元素,初始值为1,占用10*2=20个字节。
5 DUP(?) 重复定义了5个字元素(其初始值实际为0),占用5*2=10个字节
因此总共占用30个字节
CPU、存储器、IO口以及系统总线
2^20 = 1Mb
总线接口单元BIU(负责与存储器、I/O端口进行数据传送)、执行部件EU(负责指令执行)
总线周期:BIU通过系统总线对存储器或IO端口进行一次读写操作的过程。一个基本总线周期由4个时钟周期(T1~T4)组成,当无法完成数据传输时需要插入Tw,插入Tw的多少取决于数据传输的快慢
CS:FFFFH DS:0000H SS:0000H ES:0000H IP:0000H 指令队列空 FR:0000H 禁止中断
。并且从地址FFFF0H
开始执行指令(启动地址)
指令周期:取出并执行一条指令的时间
机器周期:又称CPU周期,从内存读取一条指令字的最短时间
时钟周期:通常成为节拍脉冲或T周期,处理操作最基本单位,即CPU主频
总线是计算机各设备间进行信息传输的通道。由数据总线、地址总线、控制总线组成
存入5个数据需要占用10个字节,SP-10,所以SP=0040H-0AH=0036H
取出2个数据,让出4个字节,SP+4,所以SP=0036H+04H=003AH.
最小模式,MN/MX#引线接高
电平;最大模式,MN/MX#引线接低
电平
8255A的工作方式可以由CPU写一个工作方式选择控制字到8255A的控制寄存器来选择。其工作方式选择控制字的最高位D7(特征位)应该为1
方式0:基本输入输出方式,即无需联络就可以直接进行8255A与外设之间的数据输入或输出操作。A、B、C口的高4位和低4位均可设置位方式0.
方式1:选通输入输出方式,此时8255A的A口和B口与外设之间进行输入或输出操作时,需要C口的部分IO线提供联络信号,只有A口和B口可工作在方式1
方式2:选通双向输入输出方式,即同一端口的IO线既可以输入也可以输出,只有A口可工作于方式2.这种方式下需要C口的部分IO线提供联络信号
28H=0010 1000B 取高5位00101 IR5取5=101
二者组合:0010 1101B=2DH
中断类型号:2DH
中断向量地址是:2DH*4=AA
000AAH
000ABH 偏移地址
000ACH
000ADH 段地址
单片8259A使用:在IR0~IR7上输入中断请求(单片有8级请求),INT和INTA到CPU
8259A的命令字包括初始设定的初始化命令字ICW和操作过程中给出的操作命令字OCW
初始化命令字ICW包括ICW1~ICW4 4个命令字,用于设定8259A的工作方式、中断类型码等
操作命令字OCW是操作过程中给出的命令,初始设定结束后的 命令字都是OCW。
8086微处理器均有两条中断请求线:
NMI非屏蔽中断,INTR可屏蔽中断
出现在INTR线上的中断请求,CPU是否响应要取决于标志位IF的状态:
若IF=1,则CPU响应,此时CPU处在开中断状态
而IF标志位的状态,可以用指令STI使其置位,即开中断;也可以用CLI指令使其复位,即关中断
注意:在系统复位后,标志位IF=0
另外,任一种中断被响应后,IF=0。所以,若允许中断嵌套,就必须在中断服务程序中用STI开中断
优先级高于可屏蔽中断
出现在NMI线上的中断请求,不受标志位IF影响,在当前指令执行完以后,CPU就响应。NMI线上的中断请求信号是边沿触发的,它的出现是异步的,由内部把它锁存。要求NMI上的中断请求脉冲的有效宽度要大于2个时钟周期
方式0:基本输入/输出方式
CPU与端口之间交换数据仅通过输入指令IN与输出指令OUT完成;没有固定的用于应答的联络信号;不提供任何“握手”信息;适合用于无条件传送和查询方式的接口电路中;适用于各种同步并行传送系统
端口A和端口B可自定义为输入端口或输出端口,端口C分成两个4位端口,它们可分别定义为输入或输出端口。CPU与3个端口交换数据可以直接由CPU执行IN和OUT指令完成。适用于各种同步并行传送系统中,如用于来连接简单的外设;如果3个端口均处于工作方式0,则有16种工作方式的组合
这种方式不需要任何选通信号,A口、B口以及C口的高4位和低4位都可以设定为输入或输出,作为输出口时,输出的数据均被锁存;作为输入口时,A口的数据能锁存,B口与C口的数据不能锁存
方式1:选通输入/输出方式
端口A或端口B仍作为数据的输入/输出口,但规定端口C的某些位作为控制或状态信息
适用于查询和中断方式的接口电路
方式1特点:
端口A、B可分别工作在方式1.端口C配合方式1工作
这种方式下,A口可由编程设定为输入口或输出口,C口的3为用来作为输入/输出操作的控制和同步信号;B口同样可由编程设定为输入口或输出口,C口的另外3位用来作为输入/输出操作的控制和同步信号。在方式1下A口和B口的输入数据或输出数据都能被锁存
方式2:带选通双相传送方式
方式2只适用于端口A,既能发送数据也能接收数据(双向总线IO),适用于与双向传输数据的外设,适用于查询和中断方式的接口电路
1.关中断
2.保留断点
3.给出中断处理程序入口地址,转入相应中断服务程序
4.保护现场
5.中断服务
6.恢复现场
7.中断返回
微处理器只是一个中央处理器,由算术逻辑部件(ALU),累加器和通用寄存器组,程序计数器,时序和控制逻辑部件,内部总线等组成,微处理器不能构成独立工作的系统,也不能独立执行程序
微型计算机由CPU、存储器、IO接口电路和系统总线组成,具有计算功能,能独立执行程序,但不能显示或输出,仍然不能正常工作
以微型计算机位主体,配上外部输入/输出设备及系统软件就构成了微型计算机系统,可以正常工作
AF:辅助进位标志位。低4位向高4位有进位时为1
CF:进/借位标志位。最高位有进/借位时为1
OF:溢出标志位
ZF:零标志位。语段结果为0时ZF=1
PF:奇偶标志位。低8位中有偶数个1时为1
SF:符号标志位,运算结果最高位为1时,SF=1
在转移指令中用的最多的是CF、ZF。
除了AF外都有指令直接用作转移条件
将十六进制数62A0H与下列各数相加,求出其结果及标志位CF、AF、SF、ZF、OF和PF的值:
(1) 1234H;(2) 4321H;(3) CFA0H;(4) 9D60H
题解:
以补码表示有符号数8位表达的整数范围是:+127~-128 16位表达的范围是:+32767~-32768
1) 74D4H CF=0 AF=0 SF=0 ZF=0 OF=0 PF=1
2) A5C1H CF=0 AF=0 SF=1 ZF=0 OF=1 PF=0
3) 3240H CF=1 AF=0 SF=0 ZF=0 OF=0 PF=0
4) 0000H CF=1 AF=0 SF=0 ZF=1 OF=0 PF=1
简单的16进制运算:
16位进制加减运算
3D25H - 05C3H = 3762H
3D25
-05C3
5-3=2
2-C=2-12 = (16+2-12) = 6 (由于2-12不够减,所以向前借1 即16)
D-5=(13-1-5) = 7(13-1是因为2-12不够而被借走了一位)
3-0=3
结果为:3762H
用十进制时向前借1位就是借10,而在16进制里向前借1就是借16
3762H+05C3H =3D25H
3762
+05C3
2+3 = 5
6+12 = 18 = (18-16=2) =2(满16进1)
7+5=12+1=13=D
3+0=3
结果:3D25H
逢十六进一
TF:跟踪标志位(测试程序用),TF=1,程序单步工作
IF:中断允许标志位
DF:方向标志位。DF=1时串操作为减地址方式,DF=0为增地址方式
比如2K4的RAM芯片,2K是容量,根据计算规则 容量=2^n,n就是地址线的位数,这里算出来就是11位;4是一个存储单元的位数,也就是数据线的位数。构成16K8位的存储器需要168/(24)=16片相应芯片
(1) 栈顶的物理地址是什么? 23552H ;
(2) 栈底的物理地址是什么? 23600H ;
(3) 存入数据 1234H 和5678H 后,SP 的内容是什么? 004EH 。
堆栈的最高地址叫栈顶,堆栈指示器SP总是指向栈顶。
栈顶地址=SS*10 + SP
栈底地址=SS*10 + 偏移地址
8086CPU中堆栈存取必须以字位单位,存入数据1234H和5678H后,即两个字压入堆栈后,
SP内容:SP – 字数*2 ,SS的内容不变
(1)程序直接控制方式:就是由用户进程直接控制内存或CPU和外围设备之间的信息传送。这种方式控制者都是用户进程。
(2)中断控制方式:被用来控制外围设备和内存与CPU之间的数据传送。这种方式要求CPU与设备(或控制器)之间有相应的中断请求线,而且在设备控制器的控制状态寄存器的相应的中断允许位。
(3)DMA方式:又称直接存取方式。其基本思想是在外围设备和内存之间开辟直接的数据交换通道。
(4)通道方式:与DMA方式相类似,也是一种以内存为中心,实现设备和内存直接交换数据的控制方式。与之不同的是,在DMA方式中数据传送方向、存放数据内存始址以及传送的数据块长度等都是由CPU控制,而在通道方式中这些都是由专管输入输出的硬件——通道来进行控制。
if(AL低四位>9 || AF=1) then
AL=AL+6;
AF=1;
endif
if(AL高四位>9 || CF=1) then
AL=AL+60H;
CF=1;
endif
将AX中的3位BCD数转换位二进制数存入字节变量SB
MOV CH,10
MOV CL,4
MOV SB,AL ;暂存十位和个位
MOV AL,AH ;百位存入AL中
MUL CH ;百位*10 -> AX
MOV AH,SB
SHR AH,CL ;取十位
ADD AL,AH ;百位*10 + 十位 -> AL
MUL CH ;(百位*10 + 十位) * 10 -> AX
AND SB,0FH ;取个位
ADD SB,AL ;(百位*10 + 十位) * 10 + 个位 -> SB
MOV AL,7DH
MOV CL,4
MOV BL,10
MOV AH,0 ;将8位二进制数扩展位16位
DIV BL ;商->AL,余数->AH(个位数)
MOV BH,AH ;个位暂存
MOV AH,0
DIV BL ;商->AL,余数->AH(十位数)
SHL AH,CL
OR BH,AH ;BCD数十位和个位合并
MOV AH,0
DIV BL ;AH中余数位BCD数百位
MOV AL,BH ;BCD数十位和个位送AL
DAA:
将AL中的和调整位正确的压缩BCD数
调整规则:(AL&0FH) > 9或AF=1,则AL=AL+6;(AL&0F0H) > 90H或CF>1,则AL=AL+60H
注意:
1)该指令操作数只能是AL
2)对结果调整时要用到CF和AF两个标志位,所以调整指令应该紧跟BCD数加法指令
3)会影响标志
AAA:
将AL中的和调整位正确的非压缩BCD数送至AX
调整规则:(AL&0FH) > 9或AF=1,则(AL+6)&0FH -> AL,AH+1->AH;否则AL&0FH -> AL,AH不变
注意:
1)和DAA一样,也是只能用于AL
2)执行该指令前应该注意AH是否清0
MOV AL,35H ;'5'
ADD AL,39H ;'9',AL=6EH
MOV AH,0
AAA ;AX=0104H
OR AX,3030H ;AX=3134H,即'14'
DAS:
将AL中的差调整位正确的压缩BCD数
调整规则:(AL&0FH) > 9 或 AF=1,则AL-6;(AL&0F0H) > 90H 或 CF=1,则AL-60H
如:
MOV AX,5643H
SUB AL,AH ;AL=DEH,有借位
DAS ;AL=78H,保持借位,即134-56