单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第三章 微型计算机的结构,3.1 微处理器的结构(8086/8088),3.2 存储器(组织),3.3 寻址方式,3.4 指令系统(概括),3.1微处理器的结构,3.1.1 8086/8088 CPU的结构,3.1.2 8086/8088的寄存器,3.1.1 8086/8088 CPU的结构,AH,AL,BH,BL,CH,CL,DH,DL,BP,SP,SI,DI,CS,SS,DS,ES,IP,内部通信寄存器,地址形成,与,总线控制,8086/8088总线,ALU总线,暂存寄存器,暂存寄存器,暂存寄存器,EU控制逻辑,指令队列,总线接口单元(BIU),执行单元(EU),CPU执行程序的过程,从内存取指令,执行指令,从内存取指令,执行指令,从内存取指令,执行指令,传统CPU执行指令的过程,现代CPU执行指令的过程,3.1.2 8086/8088CPU的寄存器,8086/8088的寄存器分为4种类型:,(1)通用寄存器,(2)指针和变址寄存器,(3)段寄存器,(4)标志寄存器,(1)通用寄存器,(2)指针与变址寄存器,(3)段寄存器,(4)标志寄存器,标志寄存器长度为16位,其中9个位有定义。,CF,Carry Flag,进位标志,两数相加,最高位向前的进位;或两数相减最高位向前的借位,举例:,1000 0001,1000 0000,0000 0001,+,1,1000 0000,1000 0001,1111 1111,1,AF,Auxiliary Carry Flag,辅助进位标志,两数相加,第3位向前的进位;或两数相减第3位向前的借位,举例:,0000 1001,0001 1000,0001 0001,+,0000 0000,0000 0001,1111 1111,PF,Parity Flag,奇偶标志,两数操作(算术或逻辑),结果的低8位中含有1的位数是偶还是奇.举例:,1000 0101 1010 1100,1001 1101 1001 0111,1000 0101,1000 0100,AND,结果:PF=1,ZF,Zero Flag,零标志,操作结果的为0则ZF,为1.举例:,1111 1111,0000 0001,0000 0000,+,进位1,操作结果为0,ZF=1,SF,Sign Flag,符号标志,操作结果的符号位(即最高位的状态).举例:,1000 0101 1010 1100,1001 1101 1001 0111,1,000 0101,1000 0100,AND,结果:SF=1,OF,Overflow Flag,溢出标志,算术操作,结果超过目标所能容纳的范围.举例:,0111 1110 (+126),0000 0011 (+3),1000 0001 (-127),+,还有三个标志位:IF,DF,TF,暂时不讲,等用到时再讲.,标志位在汇编语言程序设计中非常重要,必须掌握好.,3.2存储器组织,3.2.1 存储器的分段结构,3.2.2 实际地址的产生,3.2.1 存储器的分段结构,堆栈段(2 字节),16,数据段(2 字节),16,附加段(2 字节),16,代码段(2 字节),16,00000H,FFFFFH,SS(16位),堆栈段:,0000B,DS(16位),数据段:,0000B,ES(16位),附加段:,0000B,CS(16位),代码段:,0000B,3.2.2 实际地址的产生,举例:,CS=9482,IP=2350,实际地址为:,1001 0100 1000 0010,0010 0011 0101 0000,1001 0110 1011 0111 0000,一个实际地址可以对应多个逻辑地址.,3.3 寻址方式,3.3.1 操作数的种类,3.3.2 寻址方式,3.3.3 段跨越与段更换,3.3.4 有效地址的计算时间,3.3.1 操作数的种类,(1)立即操作数:指令要操作的数据在指令代码中,MOV AL,10H;,指令码B010.,(2)存储器操作数:指令要操作的数据在存储器(内存)中,MOV AL,1234H;指令码A03412.,(3)寄存器操作数:指令要操作的数据在CPU的寄存器中,MOV AL,BL;指令码88D8.,(4)I/O端口操作数,IN AL,20H;指令码E420.,3.3.2 寻址方式,1.固定寻址,2.立即寻址,3.寄存器直接寻址,4.存储器寻址(存储器直接寻址,寄存器间接寻址,基址寻址,变址寻址,基变址寻址),5.数据串寻址(暂不讲),1.固定寻址,指令要操作的数据在指令中并没有明确给出,但隐含在指令中.例:,MUL BL ;AL*BL=AX,在该指令中,AL,和AX并未给出.,2.立即寻址,指令要操作的数据包含在指令码中.例:MOV AX,1234H 其指令码为B83412.,3.寄存器直接寻址,在指令(码)给出的寄存器的名字(编号),要操作的数据在该寄存中.,INC CX ;指令码 41,INC DX ;指令码 42,INC BX ;指令码 43,INC SP ;指令码 44,INC BP ;指令码 45,4.存储器寻址,在存储器寻址方式中,要寻址的数据位于存储器(内存)中,在指令中是直接或间接的给出的存储器操作数的地址.,存储器寻址包括:,存储器直接寻址,寄存器间接寻址,基址寻址,变址寻址,基变址寻址,存储器直接寻址(1),在存储器直接寻址中,指令直接给出的是操作数在内存中存放的地址.例如:MOV AL,1000H;指令码:A00010,MOV BX,1000H;指令码:8B1E0010,执行结果?,在存储器直接寻址中,指令直接给出的是操作数在内存中存放的地址.例如:MOV AL,1000H;,指令码:A00010,MOV BX,1000H;指令码:8B1E0010,执行结果?,AL=34H,BX=1234H,存储器直接寻址(2),寄存器间接寻址(1),在寄存器间接寻址中,操作数位于位于内存中,操作数的地址位于某个寄存器中,在指令(码)中给出的是该寄存器的名字(编号).举例:,MOV AL,BX ;指令码:8A07,MOV AX,SI ;,指令码:8B04,假定 BX=1001H,SI=1000H,则:结果,AL=12H,AX=1234H,寄存器间接寻址(2),可以用于寄存器间接寻址的寄存器有:,BX BX,SI SI,DI DI,在基址寻址中,操作数位于位于内存中,操作数的地址由基址寄存器BX或BP与一个位移量相加给出,在指令(码)中给出的是该基址寄存器的名字(编号)及位移量.举例:,MOV AL,BX+1234H;指令码:8A873412,假定 BX=1000H,则:结果,AL=78H,基址寻址(1),基址寻址(2),基址寻址的格式:,BX+位移量,BP+位移量,位移量的范围:补码表示的16位,(-32768+32767),在变址寻址中,操作数位于位于内存中,操作数的地址由变址寄存器SI,或DI与一个位移量相加给出,在指令(码)中给出的是该变址寄存器的名字(编号)及位移量.举例:,MOV AL,SI+1234H;指令码:8A843412,假定 SI=1000H,则:结果,AL=78H,变址寻址(1),变址寻址(2),变址寻址的格式:,SI+位移量,DI+位移量,位移量的范围:补码表示的16位,(-32768+32767),基变址寻址(1),在基变址寻址中,操作数位于位于内存中,操作数的地址由基址寄存器BX,或BP与变址寄存器SI或DI及一个位移量相加给出,在指令(码)中给出的是寄存器的名字(编号)及位移量.举例:,MOV AL,BX+SI+1234H;,指令码:8A803412,假定:BX=1000H,SI=2000H,则:结果,AL=78H,基变址寻址(2),基变址寻址的格式:,BX+SI+位移量 BX+DI+位移量,BP+SI+位移量 BP+DI+位移量,BX+SI BX+DI BP+SI BP+DI,错误的写法:BX+BP SI+DI,位移量的范围:补码表示的16位,(-32768+32767),存储器寻址方式中的段地址,在存储器寻址方式中只给出了偏移地址,其段地址是隐含的,一般情况下,是DS,只有特殊情况下是SS.,特殊情况:在基址寻址和基变址寻址方式下,基址寄存器是BP.,请看下面的例子:,假定 DS=1000H,SS=2000H,BP=0100H,BX=0100H,如下指令在执行完后的结果分别是什么?,MOV AX,BX+100H,MOV AX,BP+100H,3.3.3 段更换与段跨越(1),当要操作的数据不在隐含段中时,就需要段更换或段跨越.要寻址的数据在2000H,段的0100H单元,而目前没有一个段寄存的值是2000H,就需要将2000H装入某个段寄存器,如DS,这就是,段更换,.,MOV AX,2000H,MOV DS,AX,MOV BX,0100H,MOV AL,BX,当要操作的数据不在隐含段中时,就需要段更换或段跨越.要寻址的数据在2000H,段的0100H单元,而目前CS段寄存的值是2000H,可在寻址操作数加一段跨越前缀,如CS:,这就是,段跨越,.,MOV BX,0100H,MOV AL,CS:BX,3.3.3 段更换与段跨越(2),3.3.4 有效地址的计算时间,3.4 指令系统,共分为14类92种指令.,(1)数据传送 (8)循环控制,(2)算术运算 (9)调用与返回,(3)逻辑运算 (10)BCD,调整,(4)移位 (11)输入输出,(5)标志位操作 (12)中断处理,(6)转移 (13)外同步,(7)数据串操作 (14)空操作,