《8088的内部寄存器》由会员分享,可在线阅读,更多相关《8088的内部寄存器(23页珍藏版)》请在金锄头文库上搜索。
1、8088的内部寄存器n n含14个16位寄存器,按功能可分为三类 8个通用寄存器 4个段寄存器 2个控制寄存器通用寄存器 数据寄存器(AX,BX,CX,DX)地址指针寄存器(SP,BP)变址寄存器(SI,DI)数据寄存器n n8088含4个16位数据寄存器,它们又可分为8个8位寄存器,即:n nAX AH,ALn nBX BH,BLn nCX CH,CLn nDX DH,DL常用来存放参与运算的操作数或运算结果数据寄存器特有的习惯用法n nAX:累加器。多用于存放中间运算结果。所有 I/O指令必须都通过AX与接口传送信息;n nBX:基址寄存器。在间接寻址中用于存放基地址;n nCX:计数寄存
2、器。用于在循环或串操作指令中存 放循环次数或重复次数;n nDX:数据寄存器。在32位乘除法运算时,存放 高16位数;在间接寻址的I/O指令中存放 I/O端口地址。地址指针寄存器n nSP:堆栈指针寄存器,其内容为栈顶的 偏移地址;n nBP:基址指针寄存器,常用于在访问内 存时存放内存单元的偏移地址。BX与BP在应用上的区别n n作为通用寄存器,二者均可用于存放数据;n n作为基址寄存器,BX通常用于寻址数据段;BP则通常用于寻址堆栈段。n nBX一般与DS或ES搭配使用变址寄存器n nSI:源变址寄存器n nDI:目标变址寄存器n n变址寄存器常用于指令的间接寻址或变址寻址。特别是在串操作
3、指令中,用SI存放源操作数的偏移地址,而用DI存放目标操作数的偏移地址。段寄存器用于存放逻辑段的段基地址( (逻辑段的概念后面逻辑段的概念后面将要介绍将要介绍) ) CS:代码段寄存器 代码段用于存放指令代码代码段用于存放指令代码 DS:数据段寄存器 ES:附加段寄存器 数据段和附加段用来存放操作数数据段和附加段用来存放操作数 SS:堆栈段寄存器 堆栈段用于存放返回地址,保存寄存器内容,堆栈段用于存放返回地址,保存寄存器内容, 传递参数传递参数控制寄存器n nIP:指令指针寄存器,其内容为下一条 要执行的指令的偏移地址n nFLAGS:标志寄存器n n状态标志:存放运算结果的特征n n控制标志
4、:控制某些特殊操作 6个状态标志位(CF,SF,AF,PF,OF,ZF) 3个控制标志位(IF,TF,DF)四、存储器寻址n n物理地址n n8088:20根地址线,可寻址220(1MB)个存储单元n nCPU送到AB上的20位的地址称为物理地物理地址址 物理地址物理地物理地址址.60000H 60001H 60002H 60003H 60004H.12HF0H1BH08H存储器的操作完全基于存储器的操作完全基于物理地址。物理地址。问题:问题:80888088的内部总线和内部的内部总线和内部寄存器均为寄存器均为1616位,如何位,如何生成生成2020位地址?位地址?解决:存储器分段解决:存储器
5、分段存储器分段存储器分段高地址低地址段基址段基址段基址段基址最大最大64KB段i-1段i段i+1逻辑地址n n段基地址段基地址和和段内偏移段内偏移组成了组成了逻辑地址逻辑地址 段地址段地址段地址段地址 偏移地址偏移地址偏移地址偏移地址( (偏移量偏移量偏移量偏移量) ) 格式为:段地址格式为:段地址: :偏移地址偏移地址 物理地址=段基地址16+偏移地址60002H00H12H60000H0 0 0 0段基地址(段基地址(16位)位)段首地址段首地址 n nBIUBIU中的地址加法器用来实现逻辑地址到物理中的地址加法器用来实现逻辑地址到物理地址的变换地址的变换n n8088 8088 可同时访
6、问可同时访问4 4个段,个段,4 4个段寄存器指示了每个段寄存器指示了每个段的基地址个段的基地址段基址段内偏移物理地址+16位20位0000例:n n已知已知CS=1055HCS=1055H,DS=250AHDS=250AH,ES=2EF0HES=2EF0H,SS=8FF0HSS=8FF0H, DS DS段有一操作数,其偏移地址段有一操作数,其偏移地址=0204H=0204H, 1) 1)画出各段在内存中的分布画出各段在内存中的分布 2) 2)指出各段首地址指出各段首地址 3) 3)该操作数的物理地址该操作数的物理地址= =?10550H250A0H2EF00H8FF00HCSSS CSDSE
7、S解:解: 各段分布及段首址见右图所示。各段分布及段首址见右图所示。 操作数的物理地址为:操作数的物理地址为: 250AH10H+0204H = 252A4H堆栈及堆栈段的使用n n内存中一个按FIFO方式操作的特殊区域n n每次压栈和退栈均以WORD为单位n nSS存放堆栈段地址,SP存放段内偏移,SS:SP构成了堆栈指针n n堆栈用于存放返回地址、过程参数或需要保护的数据n n常用于响应中断或子程序调用堆栈操作堆栈操作SPSSSS压栈前压栈前退栈后退栈后高低低高高12HSSF0HSP压栈后压栈后低高SPSPSPF0H12HSP例:n n若已知(SS)=1000H (SP)=2000Hn n
8、则堆栈段的段首地址=?n n栈顶地址=?n n若该段最后一个单元 地址为10100H,则栈底=?段首栈底栈顶堆栈段8088/8086的操作数分为的操作数分为3类类n n1 1、立即数(常数)立即数(常数)n n取值范围如下表:取值范围如下表:8 8位位1616位位无符号数无符号数00H-FFH(0-255)00H-FFH(0-255)0000H-FFFFH0000H-FFFFH(0(0-65535)-65535)带符号数带符号数80H-7FH(-128127)80H-7FH(-128127)8000H-7FFFH(-3276832767)8000H-7FFFH(-3276832767)MOV
9、AX,0FA00H;正确正确MOV 8000H,DX;错误错误n n2 2、寄存器操作数寄存器操作数放在放在8个个通用寄存器通用寄存器或或4个个段寄存器段寄存器中的操作数中的操作数只能存放字操作数只能存放字操作数段寄存器存放段寄存器存放当前操作数的当前操作数的段基地址段基地址不允许将立即数传送到段寄存器不允许将立即数传送到段寄存器SIDIBPSPCSDSESSSn n3 3、存储器操作数存储器操作数存储器操作数存储器操作数字节字节字字双字双字124类型类型存储单元个数存储单元个数一般一般不允许不允许两个两个操作数同时为存储器操作数操作数同时为存储器操作数存储单元的存储单元的物理地址物理地址 = 段基地址段基地址 + 偏移地址偏移地址若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。表表3.3 段寄存器使用的一些基本约定段寄存器使用的一些基本约定存储器操作数的偏移地址(也称有效地址)可以通过存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。不同的寻址方式由指令给出。例如,若例如,若(BX)=2000H, (SI)=0A00H, (DI)=2A00H,则以下指令,则以下指令的结果是一样的:的结果是一样的:MOV AL, 2A00HMOV AL, BX+0A00HMOV AL, BXSIMOV AL, DI