1、通用寄存器通用寄存器包括:数据寄存器、地址指针寄存器、变址寄存器。数据寄存器包括:AX、BX、CX、DX。地址指针寄存器包括:SP、BP。变址寄存器包括:SI、DI。2、段寄存器段寄存器包括:CS、SS、DS、ES。3、控制寄存器控制寄存器包括:IP、PSW。1、通用寄存器(1)数据寄存器AX、BX、CX、DX作为通用寄存器。用来暂存计算过程中所用到的操作数,结果或其它信息。访问形式:可以用16位的访问;或者可以用字节(8位)形式访问,它们的高8位记作:AH、BH、CH、DH。它们的低8位记作:AL、BL、CL、DL。AX——(Accumulator)作为累加器。它是算术运算的主要寄存器,所有I/O指令都使用这一寄存器与外部设备交换数据。例:INAL,20HOUT30H,AXBX——Base用作基址寄存器使用。在计算内存储器地址时,经常用来存放基址。例:MOVAX,[BX+03H]CX——Count可以作计数寄存器使用。在循环LOOP指令和串处理指令中用作隐含计数器。例:MOVCX,200HAGAIN:…………LOOPAGAIN;(CX)-1(CX),结果0转AGAINDX——Data可以作为数据寄存器使用。一般在双字长乘除法运算时,把DX和AX组合在一起存放一个双字长(32位)数,DX用来存放高16位;对某些I/O操作DX可用来存放I/O的端口地址(口地址256)。例:MULBX;(AX)(BX)(DX)(AX)例:INAL,DX(2)地址指针与变址寄存器:段起始地址SP、BP、SI、DI四个16位寄存器。以字为单位在运算过程中存放操作数,经常用以在段内寻址时提供偏移地址。段内偏移地址段地址:只取段起始地址高16位值。偏移地址:指在段内某内存单元物理地址相对段起始地址的偏移值。…高16位值0000B地址指针寄存器(SP、BP)SP(stackpointer)——堆栈指针寄存器用来指示栈顶的偏移地址,必须与SS段寄存器联合使用确定实际地址。堆栈和指针如下页图所示。BP(basepointer)——基址指针寄存器可以与SS寄存器联合使用来确定堆栈段中某一存储器单元地址。8088系统存储器与总线连接堆栈和指针设:(SS)=3F00H,(SP)=0060H堆栈和指针如下图:堆栈是内存开辟的一个特殊数据区,一端固定,一端浮动,严格按照后进先出的工作原则。数据总线地址总线D7~D01MX8位存储体A19~A000000HFFFFFHA19~10............a1a0栈底4EFFFH3F060H(SP)=60H3F000H(SS)=3F00H•变址寄存器(SI、DI)SI——SourceIndexRegister源变址寄存器。DI——DestinationIndex目的变址寄存器。使用场合:常用于变址寻址。•一般与DS联用,用来确定数据段中某一存储单元的地址,SI、DI具有自动增量和自动减量功能.例:MOVAX,[SI]•在串处理指令中,SI、DI作为隐含的源变址和目的变址寄存器分别达到在数据段和附加段中寻址的目的。执行示意图如右图。例:……MOVSI,2000HMOVDI,3000HMOVCX,100HCLD......MOVSB……...................3000H:2000H3000H:2100H5000H:3000H5000H:3100HDS:2000H~DS:20FFHES:3000H~ES:30FFH(DS)(SI)(ES)(DI)存储器串处理指令执行示意图2、段寄存器段寄存器:4个16位段寄存器CS、DS、SS、ES。用来识别当前可寻址的四个段,不可互换的使用。CS——CodeSegmentRegister代码段寄存器用来识别当前代码段(程序一般放在代码段)。DS——DataSegmentRegister数据段寄存器用来识别当前数据段寄存器。SS——StackSegmentRegister堆栈段寄存器,用来识别当前堆栈段。ES——ExtraSegmentRegister附加段寄存器,用来识别当前附加段。3、控制寄存器控制寄存器:IP、PSWIP—InstructionPointer指令指针寄存器用来存储代码段中的偏移地址;程序运行过程中IP始终指向下一次要取出的指令偏移地址。IP要与CS寄存器相配合才能形成真正的物理地址。PSW—(ProcessorStatesWordProgram)程序状态字寄存器,16位寄存器。由条件码标志FLAG、控制标志构成。只用了其中9位,6位条件码标志,3位控制标志。如下表示。OFDFIFTFSFZFAFPFCF015245678910条件码标志:用来记录程序中运行结果的状态信息作为后续条件转移指令的转移控制条件。∴称为条件码。条件码包括6位:CF、PF、AF、ZF、SF、OF。①OF(OverflowFlag)溢出标志(一般指补码溢出)OF=1:在运算过程中,如操作数超过了机器表示的范围称为溢出。OF=0:在运算过程中,如操作数未超过了机器能表示的范围称为不溢出。字节允许范围-128—+127,字运算范围-32768—+32767。②SF(SignFlag)符号标志SF=1:记录运算结果的符号为负。SF=0:记录运算结果的符号为正。③ZF(ZeroFlag)零标志ZF=1:运算结果为0。ZF=0:运算结果不为0。④CF(CarryFlag)进位标志CF=1:记录运算时从最高有效位产生进位值。CF=0:记录运算时从最高有效位不产生进值。⑤AF(AuxiliaryCarryFlag)辅助进位标志AF=1:记录运算时第3位(半个字节)产生进位值。AF=0:记录运算时第3位(半个字节)不产生进位值。⑥PF(ParityFlag)奇偶标志PF=1:结果操作数低8位中有偶数个1。PF=0:结果操作数低8位中有奇数个1。用来为机器中传送信息时可能产生的代码出现情况提供检验条件。控制标志:对控制标志位进行设置后,对其后的操作起控制作用。控制标志位包括3位:TF、IF、DF。跟踪(陷阱)标志TF、中断标志IF、方向标志DF。①TF(TrapFlag)跟踪(陷阱)标志位TF=1,每执行一条指令后,自动产生一次内部中断,使CPU处于单步执行指令工作方式,便于进行程序调试,用户能检查程序。TF=0,CPU正常工作,不产生陷阱。②IF(InteruptFlag)中断标志位IF=1,允许外部可屏蔽中断。CPU可以响应可屏蔽中断请求。IF=0,关闭中断。CPU禁止响应可屏蔽中断请求。IF的状态对不可屏蔽中断和内部软中断没有影响。③DF(DirectionFlag)方向标志位DF=1,每次串处理操作后使变址寄存器SI和DI减量,使串处理从高地址向低地址方向处理。DF=0,每次串处理操作后使变址寄存器SI和DI增量,使串处理从低地址向高地址方向处理。DF方向标志位是在串处理指令中控制处理信息的方向用的。•控制信息:由系统程序或用户程序根据需要用指令来设置的。•状态信息:由中央处理器,根据计算结果自动设置的,机器提供了设置状态信息指令,必要时,程序员可以用这些指令来建立状态信息。在调试程序时,DEBUG提供了测试标志位的手段,用符号表示标志位的值,每种标志位的符号如下表:标志名标志为1标志为0OF溢出(是/否)OVNVDF方向(减量/加量)DNUPIF中断(允许/关闭)EIDISF符号(负/正)NGPLZF零(是/否)ZRNZAF辅助进位(是/否)ACNAPF奇偶标志(偶/奇)PEPOCF进位标志(是/否)CYNCDEBUG不提供TF的符号用于单步方式操作。10001101000101000011001000011001+0111101010101010标志:运算结果最高位为0∴SF=0;运算结果本身≠0∴ZF=0低8位中1的个数为奇数个∴PF=0;最高位没有进位∴CF=0第三位向第四位无进位∴AF=0;次高位向最高位没有进位,最高位向前没有进位,∴OF=0。例1:执行两个数的加法,分析对标志位的影响。标志:运算结果最高位为1,SF=1;运算结果本身不为0,ZF=0;最高位向前无进位,CF=0次高位向最高位产生进位,而最高位向前没有进位,OF=1;结果低8位含偶数个1,PF=1;第三位向第四位有进位,AF=1。在绝大多数情况下,一次运算后并不影响所有标志,程序也并不需要对所有的标志作全面的关注。一般只是在某些操作后,对其中某个标志进行检测。例2:执行两个数的加法,分析对标志位的影响。01010000111001100100010101101010+1100010110011001AF=1OF=1