导图社区 微机原理
微型计算机简称微机,俗称电脑,其准确的称谓应该是微型计算机系统。它可以简单地定义为:在微型计算机硬件系统的基础上配置必要的外部设备和软件构成的实体。
编辑于2022-03-29 15:31:42微机原理
8086CPU为16位(所谓16位是指CPU内部的寄存器,ALU,数据与数据之间的通信的数据总线宽度,CPIU与外部存储器或IO通信的总线宽度都是16位)的处理器;8088为8位(内部为16位,外部通信为8位)处理器
8086外部表现为数量有限个输入输出引脚,这些引脚构成了微处理器总线,8086与8088都有四十个引脚
指令:指一组能告诉CPU做什么怎么做的二进制代码
8086与外部IO设备之间是通过IO接口电路(其中存在IO端口寄存器,真正实现与CPU之间的通信,CPU会为其分配一个地址,这个地址叫做IO端口地址)实现通信;电路主要分为三个部件
IO端口:传输信息的通道(实质是一个寄存器)
状态输入端口(是一个缓冲器),经数据总线将IO设备的状态信息(是否准备好被使用)传送到CPU,其需要有一个由CPU与之相连的控制电路,用于选中该IO设备,未选中时其处于高阻态,而非0或1(避免同一时间有超过一个IO设备在总线中传送信号);
数据输出端口(是一个锁存器),经数据总线传送到IO设备,在数据被IO读取时,该端口具有锁存数据的功能,也具有与CPU相连的控制电路
命令输出端口,CPU通过此端口向IO设备发出命令,告诉IO,CPU已经将数据传送到数据输出端口。IO可读取数据输出端口数据
这四十个引脚中,20个是地址引脚,其中低十六个地址引脚是地址数据复用引脚,其在传输信息时的区分方式是通过M/IO非引脚的高低位,高四位用于存储段内地址
CPU与IO之间的通信通过低十六位引脚进行,CPU一般有两类编制方式。
统一编址,CPU对内存和IO设备采用相同的编址方式
以汇编代码为例:1)直接寻址:MOV AL 10;MOV 【0002】 AL;2)间接寻址:MOV AL 10;MOV BX 0002H; MOV {BX} AL;(需要注意的是,对于统一编制要将数据写进或读入地址中,要使用[XX]);
统一编制优点在于IO驱动程序编写方便;缺点在于IO编制占用了内存编制的空间,造成浪费;
独立编址,CPU对内存和IO设备采用不同的编制方式
间接寻址:MOV AL 01H;MOV DX 0002H;OUT DX AL;(若为读操作,使用IN命令)注意,当CPU向IO编制使用IN/OUT命令;对于内存使用MOV命令;
优点:节约了内存,缺点:指令的记忆复杂了
对于IBM PC机来说,只占用了低十位的引脚作为IO地址,也就是1KB,其中从000H到1FFH被用来分配给主板上的IO,1FFH到3FFH分配给插件板上的IO
在存储器中,一般被分为多个逻辑段,每个逻辑段最大为64KB,而8086可以寻址1M字节,所以存在堆栈地址来辅助寻找每个逻辑段的段地址,而堆栈地址就由堆栈指针提供。而堆栈指针提供的十六位地址,再加上逻辑段的十六位地址就超出了8086的20最大存储地址,所以CPU要经过一定的运算(运算位置:地址产生与总线控制逻辑),将其转变为20为地址;
8086内部结构,共有14个16位寄存器
BIU总线接口单元,负责取指令,取回的指令存放在指令队列寄存器(6位),对于8088而言,指令队列寄存器只有4位,这是其与8086内部结构的唯一不同
BIU不再取指令,一般有两种情况,BIU取满指令,EU执行到需要使用总线的命令,与BIU取指令相冲突。
EU执行单元,负责执行指令
通用寄存器
数据寄存器
AX累加器
做加法运算
BX基址寄存器
存储段内地址,使用时要加[]
CX计数器
循环结构中使用
DX数据寄存器
存储十六位数据,在IN/OUT指令中可充当IO地址寄存器不加[]
地址指针(2个)与变址(2个)寄存器
SP堆栈指针寄存器:指示段内的偏移地址
BP地址指针寄存器:存放堆栈段的偏移地址这一点与BX相似,要注意一点,BP默认值是的是堆栈段地址,而BX,SI,DI都默认指示的是数据段地址;要想使得BP指向数据段可以在BP做目的操作数的前面加上DS:段前缀(也叫段超越前缀)MOV AL, 02H;MOV BP, 0002H;MOV DS:[BP], AL;直接寻址的时候可以不加中括号:MOV BP, 0002H;
SI源变址寄存器:可用于存储偏移地址,主要用于字符串之间的转移操作,其指向必须为数据段地址(DS),当进行源字符串的转移时,使用MOVSB(W,S为字符串,B为字节,W为字),,即使不指定源操作数和目的操作数,也会默认为从SI进行字符串的转移。
DI目的变址寄存器:可用于存储偏移地址,主要用于字符串之间的转移操作,其指向必须为附加数据段(ES)地址,有一点注意,只有在进行字符串的操作时,SI,DI指针才会在段内移动,在数据段内不进行移动。
段寄存器
CS代码段寄存器,用户不能进行初始化,由操作系统完成,其他三个段寄存器由用户进行初始化
DS数据段寄存器
SS堆栈段寄存器
ES附加数据段寄存器
控制寄存器
IP指令指针寄存器,(即一般处理器中的PC)用于表示代码段的偏移地址
PSW(处理器状态字寄存器(标志寄存器SIGNAL))9个标志位;当进行加减和逻辑与,或,异或运算时(非运算不涉及PSW),运算的相关信息会存储在PSW中,PSW为16位寄存器,
状态标志位
CF(进位标志位):最高位产生进位或借位是,为1,否则为0;可用于对高四位BCD进行调整
ZF(零标志位):运算结果为0,为1否则为0
SF(符号标志位):判断是否为负,最高位为1则为1,否则为0;
OF(溢出标志位):溢出为1,否则为0;判断溢出方法:对最高位和次高位进行异或运算,结果为1表示溢出;手算法:最高位与次高位同时进位或不进位,不溢出,次高位进位,最高位不进位溢出。
PF(奇偶标志):低十六位中为1的个数为偶数个则为1否则为0。通常用于通信传送中对进行奇偶位校验。
AF(辅助进位标志):第四位向高四位有进位(或借位)是为1,否则为0.通常用于BCD码运算中的矫正。
BCD码运算
相关汇编运算
与运算AND AL(目标操作数)0XXH(源操作数,对于FFH此类以字母开头的十六进制数,要在前面加上0,数字开头不需要加);
可用于对某些数位的置零;如:要使ASCII码中:‘0’=30H到‘9’=39H从字符转变为数字;可对其进行AND AL 0FH;
或运算OR AL 0XXH;
使‘A’=41H到‘Z’=5AH;转变为小写‘a'=61H到'z'=7AH进行OR AL 20H;
异或运算XOR AL0XXH;
非运算NOT AL;
加运算ADD AL 0XXH;
对于两个BCD码的加法运算,若低四位产生了进位或大于9,则运算结果会比想要的结果少6,则需要加六矫正;若高四位也产生了进位或大于9,也需要进行调整;同样对于减法运算,需要进行减6修正
减运算SUB AL 0XXH;
存储规则
分离BCD
按两个字节存储,高四位置零:
0000 0001 0000 0010 存储BCD码:21
乘除法只有分离BCD
使用AAA汇编命令调整
组合BCD
按一个字节存储,0010 0001;存储:21
使用DAA汇编命令调整
控制标志位,用来控制CPU的运行状态
TF陷阱(单步)标志:当TF置1时,程序相当于进入DEBUG状态,每执行一条指令指令就陷入中断;且对于TF没有CLT,STT的置零置一指令,要实现置位与复位,可使用指令:PUSHF(压入PSW;POP AX ;OR AX 0100H(TF为PSW的第8位);PUSH AX;POPF (弹出PSW)
IF中断允许标志:在CPU中存在可屏蔽中断(外部中断)与不可屏蔽中断(内部终端);在8086CPU提供了两个引脚用于处理外部IO中断,17号引脚NMI(非屏蔽外部中断请求)18号引脚INTI(可中断外部请求)使用指令CLI使IF置0,CPU不理睬外部中断,使用STI使IF置1,CPU响应外部中断;
DF方向控制标志:用于控制字符段的指针(SI(原变址指针),DI(目的变址指针))走向;当使用CLD使DF置0,SI与DL向增的方向改变,SI与DL指向段初始;使用STD置1,SI与DL向减的方向改变,SI与DL指向段末尾;使用MOVSB每次增加或减小1(字节),使用MOVSW每次增加或减小2(字);
BIU与EU的分离大大提高了CPU运行效率和总线的利用率,与取指令执行指令做对比
存储器
存在堆栈
可以通过堆栈扩大寄存器数量
把要存放在寄存器的数据暂存在堆栈,使用时在弹出。
堆栈一般是按字操作的
初始的堆栈指针SP位于栈底加一的位置,
堆栈的操作指令PUSH,POP
使用PUSH,SP作减操作,POP作加操作
一般来讲,我们在分配堆栈的时候,会多分配三分之一左右的内存,为了防止因栈溢出而发生错误。
数据存储格式
DB(伪指令,定义一个字节数据)
DW(,定义一个字数据)
DD(,定义一个双字数据)
一般CPU组成
内部结构
ALU
工作寄存器
数据寄存器:用于暂存数据
地址寄存器:用于暂存地址,但也可用来暂存数据
控制器:负责取指令,包含指令寄存器,用于存放取来的指令,之后由指令译码器进行译码翻译
早期微处理器串行工作的执行方式(取指令执行指令方式,已淘汰)
程序计数器(PC,16位)通过AB向存储器发出要取指令的地址,通过读操作将存储器中的指令通过数据总线存入指令寄存器(IR,8位)中,在经过指令译码器译码,将相应操作传送到控制逻辑部件由其做出相应的指令操作;之后,程序计数器移动指令长度个单位,如果下次要取的是数据,则直接存放到数据寄存器中而非程序计数器;
IO控制逻辑