地址线是用来传输地址信息用的,cpu在内存或硬盘里面寻找一个数据时,先通过地址线找到地址,然后再通过数据线将数据取出来。 如果有32根.就可以访问2的32次方的空间,也就是4GB。
寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。寄存器是CPU的组成部分,因为在CPU内,所以CPU对其读写速度度是最快的,不需要IO传输。
寻址就是单片机指令中提供的操作数的形式,也就是寻找操作数或操作数所在地址的方式。
段寄存器里放的是地址还是数据还是其他的东西?是放的段基值,通俗说就是段的起始点(具体地址是段基值+偏移),这个数值是地址不是数据。
地址指针寄存器用于存放操作数的地址,编程时通过修改寄存器的内容达到修改地址的目的。
SP:堆栈指针,指示堆栈段(关于段SS)中的栈顶位置,专门用于数据进栈和出栈的位置指示(SP 寄存器实质上必须和 SS 段寄存器一起使用);
BP:基址指针,指示堆栈段中一个数据区中的基址位置
变址寄存器是指寄存器SI(源指针)和DI(目的指针)的寄存器,它们主要用于存放存储单元在段内的偏移量。指针寄存器(也就是 BP 和 SP),也是用于存放某个存储单元地址的偏移
BP(基址指针寄存器)
SP(堆栈指针寄存器)
SI(源变址寄存器)
DI(目的变址寄存器)
==区别:==SI是源变址寄存器,DI是目的变址寄存器。可以用来存放数据、地址,功能类似、用法类似、一般使用哪个都可以。
但需要注意的是:在串处理指令中,SI用作隐含的源串地址,默认在DS中;DI用做隐含的目的串地址,默认在ES中;此时不能混用。
BP: 是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到比如说,堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址.
段基址寄存器用于存放4个当前段的起始地址。4个段为:代码段CS,数据段DS,堆栈段SS和附加段ES。
包括状态标志和控制标志。执行一些指令之后,有一些操作数会发生变化,相应的表现为一些标志的变化。
IP用于寻址代码段存储区内的下一条指令(字节),它提供的是自动加1后的下一条指令(字节)的偏移地址。
例1.中断类型号为20H,中断服务程序的入口地址存放在0000:0080H开始的4个单元中。若:(0080H)=10H (0081H)=20H (0082H)=30H (0083H)=40H
则:中断服务程序的入口地址为4030:2010
AX 累加寄存器。所有外部设备的输入输出指令只能使用AL或AX做为数据寄存器。
BX 基址寄存器。可以用作数据寄存器;访问存储器时,可以存放被读写的存储单元的地址。是具有双 重功能的寄存器
CX 计数寄存器。可以用作数据寄存器,在循环操作、移位操作时用作寄存器。
DX 数据寄存器。在乘除法中作为数据累加器,在输入输出操作中存放端口的地址。
单片机中的寻址就是单片机指令中提供的操作数的形式。也就是寻找操作数或操作数所在地址的方式。
为了区别指令中操作数所处的地址空间,对于不同存存储器的数据操作,采用不同的寻址方式。
BCD码(Binary-Coded Decimal),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。
对于一块集成电路,想让它开始工作,得给一个信号它(高电平或低电平),接收这一信号的引脚就叫片选端,这一信号就叫片选信号
①MN/MX端接+5V,决定了8086工作在最小模式;
②有1片8284A,作为时钟发生器;
③有3片8282或74LS373,用来作为地址锁存器;
④当系统中所连的存储器和外设较多时,需要增加数据总线的驱动能力,这时,要用2片8286/8287作为总线收发器。
在总线周期的前一部分时间,CPU总是送出地址信息,为了告示地址已经准备好,可以被锁存,CPU此时会送出高电平的ALE信号。所以ALE就是允许锁存的信号。除了地址信号外,BHE信号也需要被锁存。因为有了锁存器对地址和BHE进行锁存,所以在总线周期的后半部分,地址和数据同时出现在系统的地址总线和数据总线上;同样,此时**BHE也在锁存器输出端呈现有效电平,**于是,确保了CPU对存储器和I/O端口的正常读写操作。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LOYpy7lZ-1589732592925)(…/MarkdownImages/11.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oAMvAaAf-1589732592936)(…/MarkdownImages/22.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DFTP4AlK-1589732592938)(…/MarkdownImages/33.png)]
最大模式配置和最小模式配置有一个主要的差别,就是在最大模式下,需要用外加电路来对CPU发出的控制信号进行变换和组合,以得到对存储器和I/O端口的读写信号和对锁存器8282及对总线收发器8286的控制信号。8288总线控制器就是完成上面这些功能的专用芯片。
在最大模式系统中,需要用总线择制器来变换和组合控制信号的原因就在于;在最力模式系统甲,一般包含2个或多个处理器,这样就要解决主处理器和协处理器之间的协调工作问题和对总线的共享控制问题,为此,要从软件和硬件两个方面去寻求解决措施。8288总线控制器就是出于这种考虑而加在最大模式系统中的。
8086/8088有一个强有力的中断系统,可以处理256种不同的中断,每个中断对应一个类型码,所以,256种中断对应的中断类型码为0~255。
从产生中断的方法来分,这256种中断可以分为两大类:一类叫硬件中断;一类叫软件中断。
硬件中断是通过外部的硬件产生的,所以,也常常把硬件中断称为外部中断。硬件中断又可以分为两类:一类叫非屏蔽中断;另一类叫可屏蔽中断。非屏蔽中断是通过CPU的NMI(non-maskable interrupt)引脚进人的,它不受中断允许标志IF的屏蔽,并且在整个系统中只能有一个非屏蔽中断。可屏蔽中断是通过CPU的INTR(interrupt)引脚进人的,并且只有当中断允许标志IF为1时,可屏蔽中断才能进入,如果中断允许标志IF为0,则可屏蔽中断受到禁止。在一个系统中,通过中断控制器(如8259A)的配合工作,可屏蔽中断可以有几个、几十个甚至上百个。
软件中断是CPU根据软件中的某条指令或者软件对标志寄存器中某个标志的设置而产生的,从软件中断的产生过程来说,完全和硬件电路无关。典型的软件中断是除数为0引起的中断和中断指令引起的中断。
8086/8088的中断系统以位于内存0段的0~3FFH区域的中断向量表为基础,中断向量表中最多可以容纳256个中断向量。所谓中断向量,实际上就是中断处理子程序的入口地址,每个中断类型对应一个中断向量。
中断向量并不是任意存放的。**一个中断向量占4个存储单元,其中,前2个单元存放中断处理子程序入口地址的偏移量(IP),低位在前,高位在后,后2个单元存放中断处理子程序入口地址的段地址(CS),同样也是低位在前、高位在后。**按照中断类型的序号,对应的中断向量在内存的0段0单元开始有规则地进行排列。
比如,类型号为20H的中断所对应的中断向量存放在0000:0080H开始的4个单元中,如果0080H、0081H、0082H、0083H这4个单元中的值分别为10H、20H、30H、40H,那么,在这个系统中,20H号中断所对应的中断向量为4030:2010。
又如,一个系统中对应于中断类型号17H的中断处理子程序存放在2345:7890开始的内存区域中,由于17H对应的中断向量存放在0000:005CH(17H×4=5CH)处,所以,0段005CH、005DH、005EH、005FH这4个单元中的值应当分别为90H、78H、45H、23H。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tasPk5Yv-1589732592944)(…/MarkdownImages/j2.png)]
8086/8088为外部设备向CPU送入中断请求信号提供了两条引线即NMI和INTR。从NMI引脚进入的中断为非屏蔽中断,它不受中断允许标志IF的影响。非屏蔽中断的类型号为2,所以,非屏蔽中段处理子程序的入口地址放在0段的0008H、0009H、000AH和000BH这4个单元中。
当NMI引脚上出现中断请求时,不管CPU当前正在做什么事情。都会响应这个中断请求而进入对应的中断处理,可见NMI中断优先级非常高。正因为如此,除了系统有十分紧急的情况以外,应该尽量避免引起这种中断。在实际系统中,非屏蔽中断一般用来处理系统的重大故障,比如系统掉电处理常常通过非屏蔽中断处理程序来执行。
一般外部设备发出的中断都是从CPU的INTR端引入的可屏蔽中断。当CPU接收到一个可屏蔽中断请求信号时,如果标志寄存器中的IF为1,那么,CPU会在执行完当前指令后响应这一中断请求。
当CPU在INTR引脚上接收到一个高电平的中断请求信号,并且当前的中断允许标志为1时,CPU就会在当前指令执行完以后,开始响应外部的中断请求,具体地说,就是CPU往TA引脚发两个负脉冲,外设接口接到第二个负脉冲以后,立即往数据线上给CPU送来中断类型码。CPU在响应外部中断、并进入中断子程序的过程中,要依次做下面几件事:
①从数据总线上读取中断类型码,将其存入内部暂存器。
②将标志寄存器的值推入堆栈。
③把标志寄存器的中断允许标志IF和跟踪标志TF清零。将IF清零是为了能够在中断响应过程中暂时屏蔽外部其他中断,以免还没有完成对当前中断的响应过程而又被另一个中断请求所打断。清除TF是为了避免CPU以单步方式执行中断处理子程序。
④将断点保存到堆栈中。所谓断点,就是指响应中断时,主程序中当前指令下面的一条指令的地址,包括代码段寄存器CS的值和指令指针IP的值。只有保护了断点,才能在中断处理子程序执行完以后,正确返回到主程序继续执行。(保护下一条指令信息)
⑤根据前面得到的中断类型码**,到内存0000段的中断向量表中找到中断向量**,再根据中断向量转入相应的中断处理子程序。比如,中断类型码为0BH,则此中断对应的中断向量的首字节0BH×4=2CH处,**于是CPU在0段的002CH、002DH、002EH、002FH这4个字节中取得中断向量,并将前两个字节中的内容装入IP,将后两个字节中的内容装入CS。**这样,CPU要执行的下一条指令就是中断处理子程序的第一条指令,也就是说,CPU转入了对中断处理子程序的执行。
中断处理子程序的功能是各种各样的,但是除去所处理的特定功能外,所有中断处理子程序都有着相同的结构模式,即:
①一开始必须通过一系列推入堆栈指令来进一步保护中断现场,即保护CPU各寄存器的值(当然有时未必需要保存所有寄存器的值)。
②在一般情况下,应该用指令设置中断允许标志IF来开放中断,以允许级别较高的中断请求进入。
③中断处理的具体内容,这是中断处理子程序的主要部分。
④中断处理模块之后,是一系列弹出堆栈指令,使得各寄存器恢复进入中断处理时的值。
⑤最后是中断返回指令,中断返回指令的执行会使堆栈中保存的断点值和标志值分别装入IP、CS和标志寄存器。
中断处理子程序除了结构上的这些特点外,在位置上也有特点,它们在8086系统中,都不是浮动装配的,而是固定装配的。装配的起始地址由中断向量表给出。并且,中断处理子程序通常都常驻内存,即系统一启动,就完成中断处理子程序的装配。
8086有20根地址线,因此,具有2^20=1MB的存储器地址空间。这1MB的内存单元按照00000~FFFFFH来编址。但是8086的内部寄存器包括指令指针和堆栈指针都是16位的,显然用寄存器不能直接对1MB的内存空间进行寻址,为此引入了分段概念。一个段最多可为64KB,在通常的程序设计中,一个程序可以有代码段、数据段、堆栈段和附加段,各段的段地址分别由CS(code segment)、DS(data segment)、SS(stack segment)和ES(extra segment)这4个段寄存器给出。
每当取指令时,CPU就会选择代码段寄存器CS,再和指令指针IP的内容一起形成指令所在单元的20位物理地址;而当进行堆栈操作时,CPU就会选择堆栈段寄存器SS,再和堆栈指针SP或者基址指针BP形成20位堆栈地址;当要往内存写一个数据或者从内存读一个数据时,CPU就会选择数据段寄存器DS,然后和变址寄存器SI、DI或者通用寄存器BX中的值形成操作数所在存储单元的20位物理地址。存储器中的操作数可以是1个字节,也可以是1个字。如果是字操作数,那么低位字节放在较低的地址单元,高位字节放在较高的地址单元。
尽管代码段、数据段、堆栈段及附加段都可为64KB,但实际应用中这些段之间可以有互相覆盖的部分。比如:CS=2000i,DS=2100H,则代码段的物理地址为20000~ 2FFFFH;数据段的物理地址为21000~30FFFH。
8086系统和外部设备之间都是通过I/O芯片来联系的。每个I/O芯片都有一个端口或者几个端口,一个端口往往对应了芯片内部的一个寄存器或者一组寄存器。微型机系统要为每个端口分配一个地址,此地址叫端口号。当然,各个端口号不能重复。
8086允许有65535(64K)个8位的I/O端口,两个编号相邻的8位端口可以组合成一个16位端口。指令系统中既有访问8位端口的输入输出指令,也有访问16位端口的输入输出指令。
CPU在执行访问I/O端口的指令即输入(IN)指令和输出(OUT)指令时,从硬件上会产生有效的RD信号或者WR信号,同时使M/IO信号处于低电平,通过外部逻辑电路的组合产生对I/O端口的读信号或者对I/O端口的写信号。
系统设计时,也可以通过硬件将I/O端口和存储器==统一编址==,这样就可以用对存储器的访问指令来实现对I/O端口的读写。而对存储器的读写指令的寻址方式很多,功能很强,使用起来也很灵活。当然在这种情况下,CPU访问I/O端口时和访问存储器时的情况一样,从硬件上是在使RD信号或者信号有效的同时,使M/IO信号处于高电平,通过外部逻辑电路的组合,产生对存储器的读信号或者对存储器的写信号。
1985年10月,Intel公司推出了32位微处理器80386。这个新一代的处理器在一个芯片上集成了275000个晶体管,采**用32位数据总线,32位地址总线,直接寻址能力达4GB。**最初的80386芯片采用16MHz时钟,不久,Intel又推出40MHz主频的80386芯片。在16MHz主频下,CPU每秒钟可执行3×10~4×10条指令,其速度可与10年前的大型机相比,80386是微处理器发展的一个里程碑。
**实地址:**实地址方式下,存储器中保留两个固定区域,一个为初始化程序区,另一个为中断向量区。前者为FFFFOH~ FFFFFH,后者为00000~003FFH。
**保护方式:**是80386最常用的方式,通常开机或复位后,先进入实地址方式完成初始化,**便立即转到保护方式。**此种方式提供了多任务环境中的各种复杂功能以及对复杂存储器组织的管理机制。只有在保护方式下,80386才充分发挥其强大的功能和本性,因此,也称为本性方式。所谓保护,主要是指对存储器的保护。
虚拟8086方式