微机原理及应用北京科技大学理工类(非电非信息)相关专业适用第2章微型计算机中的微处理器讲授5个主题内容8086/8088CPU的编程结构8086/8088的存储器组织8086/8088的I/O组织8086/8088CPU的引脚功能和工作方式8086/8088的典型时序分析第1主题问题8086/8088CPU的编程结构主要内容:8086/8088CPU的内部结构8086/8088CPU的寄存器结构8086/8088CPU的内部结构8086/8088CPU的内部结构基本相同均由两个独立的工作部件组成一个称为执行部件(EU)一个称为总线接口部件(BIU)8086/8088CPU的内部结构8088CPU外部数据总线为8位、指令队列为4字节指令队列的设置使指令的取出与执行并行进行,以提高了程序的运行速度取指令、指令译码、产生并传送操作信号输出输入控制电路实现总线控制,决定读或写、对内存或对I/O接口寄存器是中央处理器内的组成部份寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和地址指令:确定运算与操作数据:运算或处理的对象地址:标记和确定内存中具体的存储位置地址加法器的作用是根据段寄存器存放的段基地址与EU送出的16为偏移地址计算得到20位的实际地址算术逻辑单元(运算器)8个通用寄存器1个标志寄存器EU部分控制电路执行部件EU的组成及作用取指令,指令译码执行指令,完成运算总线接口部件BIU的组成及作用地址加法器6字节指令队列缓冲器4个16位段寄存器16位指令指针寄存器输入输出控制电路计算20位的存储器地址完成CPU与内存间以及CPU与I/O接口间的信息传送分两种工作状态:预取指令:利用CPU执行指令而总线空闲,从内存中取出指令放入指令队列(等待CPU取走)传送数据:EU执行指令时,按EU的指令,向内存或I/O接口写运算结果,或从内存或I/O接口取数据控制外部总线,保证各种信息的正确传送指令队列缓冲器指令队列缓冲器8086的指令队列为6个字节8088的指令队列为4个字节指令队列缓冲器的指令存放状态:执行顺序指令时:指令队列存放紧接在执行指令后面的那一条指令执行转移指令时:立即清除指令队列中的内容,从新的地址取入指令,并立即送往执行单元,然后再从新单元开始重新填满队列8086/8088CPU的内部(编程用)寄存器包括14个16位的寄存器4个数据寄存器2个地址指针寄存器2个变址寄存器4个段寄存器2个控制寄存器1.数据寄存器包含4个16位寄存器;也可分别作为2个8位的字节寄存器使用;常用来存放参与运算的操作数或运算结果•AX(Accumulator)(AH、AL)——累加寄存器常用于数据运算或与外设交换数据•BX(Base)(BH、BL)——基址寄存器在间接寻址中用于存放内存的基地址•CX(Count)(CH、CL)——计数寄存器在循环、移位等操作中用于计数•DX(Data)(DH、DL)——数据寄存器常用于数据的传送或配合AX进行双字节运算2.段寄存器包含4个16位段寄存器;用于存放各逻辑段的段基地址;不可互换使用CS(CodeSegment):代码段寄存器只能用于存放当前执行程序所在段的段基地址DS(DataSegment):数据段寄存器只能用于存放当前使用数据所在段的段基地址ES(ExtraSegment):附加段寄存器只能用于存放当前附加数据段的段基地址SS(StackSegment):堆栈段寄存器只能用于存放当前堆栈段的段基地址3.地址指针寄存器常用于存放段内寻址时的偏移地址SP:堆栈指针寄存器,存放当前堆栈段中栈顶的偏移地址BP:基址指针寄存器,存放位于堆栈中的某个存储单元的偏移地址在寻址操作时均与SS搭配使用4.变址寄存器SI:源变址寄存器DI:目标变址寄存器变址寄存器常用于指令的间接寻址或相对寻址;存放当前数据段中某一个存储单元的偏移地址与DS配合使用用SI存放源操作数的偏移地址用DI存放目标操作数的偏移地址IP寄存器——指令指针寄存器,总是存放着下一次要取出执行的指令的偏移地址•与CS结合使用,形成指令实际的物理地址•用户不能直接更新使用,只能由系统自动更新5.指令指针寄存器部分寄存器一般用途示意代码段段基地址CS某指令地址IP数据段或附加数据段段基地址DS或ES某数据地址DI某数据地址SI堆栈段段基地址SS堆栈顶地址SP栈内某数据地址BP6.标志寄存器FR(FLAGS)——状态标志寄存器8086/8088CPU设有一个16位的状态标志寄存器;但只使用其中的9位,作为状态标志位和控制标志位6个状态标志(也称为条件码)----寄存ALU运算结果的状态信息3个控制标志----寄存CPU的工作状态信息标志寄存器图示进位标志CF主要用来反映运算是否产生进位或借位;如果运算结果的最高位产生了一个进位或借位,此时其值为1零标志ZF用来反映运算结果是否为0;如果运算结果为0,则其值为1符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同;对于有符号数就反映运算结果的正负号;运算结果为正数时,SF的值为0中断允许标志IF位用来决定CPU能是否响应CPU外部的可屏蔽中断发出的中断请求;但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断请求,以及CPU内部产生的中断请求;IF=1表示开中断在运算过程中,如果发生低4位向高4位的进位或借位时,辅助进位标志AF的值将被置为1状态控制标志TF位用来控制CPU是正常(TF=0)执行,还是单步(TF=1)执行奇偶标志PF用于标志运算结果的低8位中“1”的个数的奇偶性;如果“1”的个数为偶数,则PF的值为1溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0方向标志DF位用来决定在“数据串操作”指令执行时的步进方向;DF=1表示由高字节向低字节方向进行—称为递减方式标志寄存器置位问题状态标志位根据ALU运算的结果,自动置位控制标志位需要在程序中用专门的指令置位运算对标志位的影响的例运算对标志位的影响的例第2主题问题8086/8088的存储器组织主要内容:存储器组织8086存储器的分体结构存储器的分段和物理地址的形成存储器的组织在存储器中,以字节为单位存取数据存储地址即为存储单元编号,称为地址8086/8088提供20条地址总线,可寻址的存储空间为220=1MB每个存储单元的地址均为20位(但一般用5个十六进制数书写)地址范围为:00000H--0FFFFFH字节数据与字数据的存储存储在一个存储单元中的数据称为字节数据字节数据的存储:按顺序存放其存储单元的地址,叫做该字节数据的存储地址需要存储在相邻两个存储单元中的数据称为一个“字”,叫做字数据字数据的存储:低字节存于低地址单元,高字节存于高地址单元存放该字数据低字节的存储单元的地址,叫做该字数据的存储地址存储器中数据的存储方式3CH……0DH3AH……5EH32H…存储单元地址存储内容•存储内容的表示:(00A22H)=3CH存储单元地址低字节高字节00A22H00B06H00B07H03A03H03A04H字数据3A0DH的存储地址为:00B06H字数据325EH的存储地址为:03A03H字节数据3CH的存储地址为:00A22H规则字与非规则字存放一个字数据的低字节地址如果是偶数地址,则称为“规则字”存放一个字数据的低字节地址如果是奇数地址,则称为“非规则字”存取“规则字”与“非规则字”,其“读”或“写”操作过程不同(体现为所使用的总线周期数不同)在8086系统中,往往将其可寻址的1MB存储器分为两个物理上独立的存储体;即奇地址存储体和偶地址存储体,各为512KB8086存储器的分体结构◆奇地址存储体与系统高8位数据总线相连,偶地址存储体与系统低8位数据总线相连◆读/写偶地址体时,数据从低8位数据总线上传送◆读/写奇地址体时,数据从高8位数据总线上传送特别提示:关注BHE、A0和SEL信号8086存储器的分体结构8086存储器的分体结构8086CPU是按16位结构设计,外部16条数据总线;可以通过两个存储体直接读/写一个字数据;也可以只从一个存储体中,只读/写一个8位的字节数据SEL为奇偶地址存储体的“片选”信号奇偶地址存储体的选择由BHE信号和A0决定所以读/写字数据或字节数据就会有几种不同的情况读/写一个字节数据:如果BHE=1,表示要读/写偶地址存储体,发送偶地址;此时A0=0,DB8--DB15上的数据将被忽略如果BHE=0,表示要读/写奇地址存储体;发送奇地址;此时A0=1,DB0--DB7上的数据将被忽略数据CPU偶地址高地址低地址内存空闲奇地址数据CPU空闲奇地址高地址低地址内存偶地址读/写偶地址字节读/写奇地址字节8086存储器的分体结构读/写一个规则字数据:▼该字数据的地址是从偶地址开始的;发送该字数据的地址(一定是偶地址A0=0),同时令信号BHE=0,则只须执行一个总线读/写周期,便可一次完成对该字的读/写操作低位数据线上读写低字节数据高位数据线上读写高字节数据8086存储器的分体结构读/写一个非规则字数据:▼该字数据的地址从奇地址开始,低字节数据放在奇地址存储体中,而到字节数据存放在偶地址存储体中▼CPU需要发送两个地址,并连续地执行二个总线读/写周期,才能分两次完成对该字的读/写▼第一次读写奇地址体上数据,发送该字数据的地址(A0一定为1),并令信号BHE=0,通过高位数据线读写低字节数据;偶地址体上的8位数据被忽略▼第二次读写偶地址体上数据,再发送一个偶地址(A0=0),并令信号BHE=1,通过低位数据线读写高字节数据8086存储器的分体结构8086存储器的分体结构BHEA0操作所用的数据总线00存取规则字(从偶地址开始读/写一个字)D15~D010从偶地址内存单元或I/O端口读/写一个字节数据D7~D001从奇地址内存单元或I/O端口读/写一个字节数据D15~D80110从奇地址开始读/写一个(非规则)字数据第一总线周期高8位数据有效D15~D8D7~D0第二总线周期低8位数据有效存储器的分段和物理地址的形成8086/8088的地址总线(AB)为20位∴直接寻址范围是220=1MB个存储单元但是:8086/8088的寄存器、ALU都是16位,送出的也只能是16位的地址数据∴最多表示216=64KB个地址编号就是说:16位的寄存器和ALU不能直接存放和处理20位的地址数据存储器的逻辑分段CPU对存储器实行“分段”管理即将存储空间分为若干逻辑段,每个逻辑段长度≤64KB;16位的总线足可以管理和标记它某存储单元的实际地址用段的基本地址(段基址)加该存储单元在该段中的相对位置(偏移地址)共同表示比喻假设教室内有200个座位,都编有3位数的号码必须按号入座但,入场卷上的编号只能是两位数解决的办法将全部座位先分为两个区域;各区域的编号用两位数编制(如10、20)各区域可容纳100人,编号为00---99那么,你的实际座位号应为:区域号*10+座位号存储器的逻辑分段原则逻辑段的划分原则上不受限制各段之间可连续、可分开、可部分重叠、还可完全重叠但要求:段的分配只能从地址低4位均为0的内存单元开始存储器分段图示最大64KB,最小16B存储器分段例段首地址、段基地址和偏移地址60002H12H60000H0000段基地址(16位)段首地址(20位)××ו••×××偏移地址=0002H每个段都从低4位为0的存储单元开始段首地址的高16位称为段基地址偏移地址为相对于段首地址的偏移量00H一定为0地址存储与寄存器BX基址寄存器BP基址指针寄存器SP堆栈指针寄存器IP指令指针寄存器DI目的变址寄存器SI源变址寄存器CS代码段段基址寄存器DS数据段段基址寄存器ES附加段段基址寄存器SS堆栈段段基址寄存器基址或变址寄存器--存储相应的偏移地址段寄存器--存储各