您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子科技大学成都学院微机原理知识点精华
8086中,BIU负责取指、读操作数和写结果,而EU负责执行指令。EU和BIU之间的通信是通过16位的ALU总线和8位指令队列总线来完成的EU接收指令队列中的指令,进行指令译码、分析,形成各种控制信号,实现EU各个部件完成规定动作的控制。运算器分为算术逻辑单元ALU(2个16位数据的算术运算。2个16位数字的逻辑运算16位偏移地址EA的运算)和通用寄存器组:数据、地址EU的工作过程1.从BIU的指令队列中取指令字节;2.EU控制电路进行指令译码、分析;3.如需要,送操作数的偏移地址至BIU;4.将BIU取来的操作数送ALU进行运算;5.存运算结果到通用寄存器或送至BIU;6.更新标志寄存器。总线接口单元BIU总线控制逻辑(分时传递地址信息或数据信息)指令队列缓冲器(FIFO用于暂存指令取指令和执行指令可重叠操作)地址生成(4个16位段寄存器,16位指令指针寄存器IP,20位地址产生器)BIU的工作过程1.从存储器的指定单元取出指令;2.将指令送至指令流队列中排队或直接传送给EU3.把EU的操作结果传送到指定的存储单元或外设端口中指令队列缓冲器:FIFO结构,指令队列至少保持有一条指令,且只要有一条指令,EU就开始执行,指令队列只要不满,BIU就会自动执行取指操作,直到填满为止。当执行转移指令时,EU要求BIU从新的地址中重新取队列中原有指令被清除,新取得的第一条指令直接送EU执行,随后取得的指令填入队列。地址产生器——产生20位的地址输入:段寄存器中的16位段首地址(逻辑地址)从EU中来的16位段内偏移地址(逻辑地址)输出:20位实际地址(物理地址)8086CPU地址总线宽度——20位;寄存器——16位物理地址PA=(段首地址(CS、DS、SS、ES提供)左移4位二进制位)+偏移地址(IP或EU部件提供)AXAHAL累加器(数据寄存器BXBHBL基址寄存器CXCHCL计数寄存器通用寄存器组DXDHDL数据寄存器SP堆栈指针地址指针及变址寄存器)BP基址指针SI源变址指针DI目的变址指针IP指令指针控制寄存器组FLAG标志寄存器CS代码段寄存器段寄存器组DS数据段寄存器SS堆栈段寄存器ES附加段寄存器OF:溢出标志。1.当进行带符号的补码运算时,算术运算的结果超出了机器所能表达的带符号数的范围,就会产生溢出,OF=1;否则OF=0,表示运算结果无溢出发生。求解方法:双进位位法——最高进位位次高进位位2.两个无符号数相加时,当最高数值位向高位数值位有进位时,即CF=1时表示有溢出;当CF=0时表示无溢出。SF:符号标志,运算结果为负时,SF=1;否则为0ZF:全零标志,运算结果各位都为零,则ZF=1;否则为0AF:辅助进位标志,作加法时D3位向D4位进位,则AF=1;否则为0PF:奇偶标志,操作结果的低8位中含有偶数个1,则PF=1;否则为0CF:进位标志,加法时最高位产生进位或减法时高位产生借位,CF=1;否则为0IF:中断允许标志,控制可屏蔽中断的标志,若IF=1,表示允许CPU接受外部从INTR引线上发来的可屏蔽中断请求信号;若IF=0,则禁止。DF:方向标志,用于控制字符串操作指令的步进方向,当DF=1时,字符串操作指令将从高地址到低地址的方向对字符串进行处理;若DF=0时,则相反。总线周期——CPU访问一次存储器单元或I/O口所需的时间。总线周期全部由BIU来完成,所以也称为BIU总线周期。一个基本的总线周期至少由4个时钟周期组成存储器以字节为单位存储信息。为区别不同的字节存储单元,每个单元都被指定一个唯一的编号,称为该单元的物理地址(简称PA)。地址编号从0开始,按顺序加1,一般用十六进制数表示。因此PC机的内存是以字节单元为单位对内存进行编址8086地址线有20根,存储器的最大存储空间为1MB(220),因此存储器地址范围为00000H~FFFFFH:8086有20根地址线,但寄存器内部可以表示的地址最多只能是16位。为了能寻址1MB空间,8086对存储器进行逻辑分段,每个段最大为64KB,最小为16B。采用了段地址加偏移地址的寻址方式CS:IP,这样最大寻址范围扩大到FFFFF,即1MB。段基址:一个逻辑段的起始地址,形如XXXXH。偏移地址:段内一个存储单元到达段地址的距离(16位)。物理地址PA:存储单元的实际地址(20位)。逻辑地址LA:段基址和偏移地址。注意:逻辑地址是在程序指令中引用和操作的地址;而物理地址是在20位地址总线上产生的地址进栈出栈(二5253)每个I/O端口都有一个唯一的端口地址,由于只用地址总线的低16位A15~A0来寻址端口地址,所以8086CPU可以访问的I/O端口地址共有64KB,其地址为0000H~FFFFH无操作数指令,例:等待指令WAIT—单操作数指令,例:加1指令INCAL—双操作数指令,例:减法指令SUBAL,BL目的操作数:前者(AL)源操作数:后者(BL)用BX、SI、DI默认段寄存器:DS用BP默认段寄存器:SS寻址方式(三12左右)对I/O端口的寻址方式有端口直接寻址和端口间接寻址方式两种。访问I/O端口只能使用其专用指令:IN和OUT指令。端口直接寻址:当端口地址在8位二进制n=00H~FFH范围时才可使用直接寻址方式端口间接寻址:当端口地址大于FFH,则只能采用间接寻址方式,必须使用间址寄存器DX,存放I/O端口的地址码CS、立即数不作目的数堆栈——以“先进后出”原则组织起来的连续的内存空间。堆栈操作以字为单位。固定以SS:SP为指针指示栈顶,出、入堆栈的操作均针对栈顶单元进行。80X86的堆栈生长方向为“向下增长”入栈,指针减出栈,指针加入栈操作(三30)交换指令——XCHG功能:将源、目的操作数的内容互相交换,指令执行后源、目的操作数同时被改变累加器专用传送指令(1)输入/输出(I/O)指令①输入指令——IN功能:把指定端口中的一个数据(字节或字)输入至AL或AX。指令形式:IN累加器,端口地址INAL,20H;从20H端口输入一个字节至AL②输出指令——OUT功能:把AL或AX中的数据输出到指定的端口。指令形式:OUT端口地址,累加器OUT20H,AL;将AL中一字节输出到20H端口换码指令——XLAT功能:直接查表并读表格中元素值的指令)换码指令——XLAT功能:直接查表并读表格中元素值的指令目标地址传送指令不是传送操作数,而是传送操作数的地址,把存储单元地址送入指定的寄存器。(1)有效地址送寄存器指令LEA①源、目操作数长度必须一致。②源、目操作数不能同时是存储器操作数。③源、目操作数不能同时是段寄存器。④立即数和代码段寄存器CS不能作目操作数。⑤当目操作数是段寄存器时,源操作数不能是立即数⑥可以使用段寄存器的指令:MOV、PUSH、POP。⑦除XCHG指令外,其它数传指令仅改变目操作数,源操作数保持不变。⑧除SAHF、POPF指令外,其它数传指令的执行不影响标志位。不带进位加指令——ADD带进位位的加法指令——ADCADCAL,78H;AL←AL+78H+CFADCAX,CX;AX←AX+CX+CFADCBX,WORDPTR[DI];BX←BX+[DI+1][DI]+CF加1指令——INC执行之后影响标志位SF、ZF、AF、PF、OF,但不影响CF例:将分别存放在34000H、34200H处的两个4位组合BCD码相加,组合BCD码的结果放在34200H处。MOVAX,3400HMOVDS,AX;设置默认段寄存器值MOVSI,0;使SI指向34000H单元MOVDI,0200H;使DI指向34200H单元MOVAL,[SI]ADDAL,[DI];低2位组合BCD码相加DAA;调整得组合BCD码,仍在AL中MOV[DI],AL;组合BCD码结果(低2位)存入34200H处MOVAL,[SI+1]ADCAL,[DI+1];高2位组合BCD码相加DAAMOV[DI+1],AL;组合BCD码结果(高2位)存入34201H处MOV[DI+2],0ADC[DI+2],0;高位的进位存入34202H处不带借位减法指令——SUB带借位的减法指令——SBB比较指令——CMP形式:CMPdst,src判断条件:1.无符号数比较大小:CF=0,dst≥src;CF=1,dst<src。2.两个正数比较大小:SF=0,dst≥src;SF=1,dst<src。3.两个带符号数比较大小:OF⊕SF=0,dstsrc;OF⊕SF=1,dstsrc无论两个有符号数还是无符号数比较是否相等:ZF=1,dst=src求补指令——NEG形式:NEGdst;dst←0–dst无符号数乘法指令:MUL通用寄存器或存储器带符号数乘法指令:IMUL通用寄存器或存储器无符号数除法指令:DIV通用寄存器或存储器带符号数除法指令:IDIV通用寄存器或存储器小结:①加、减法的运算结果与两个操作数的长度相等,进、借位反映在标志位上。②乘、除法运算仅由指令指定一个操作数,另一个操作数固定为累加器。③除了除法和符号扩展指令外,其它算术运算指令均影响状态标志,不同指令对标志位的影响也各不相同。④允许使用BCD码进行算术运算。为了得到正确的BCD码运算结果,应使用相应的十进制调整指令。⑤所有的十进制调整均对累加器进行。加、减、乘法的调整在运算之后进行,只有除法必须先调整,后运算布尔型指令(1)与、或、非、异或——AND、OR、NOT、XOR执行之后影响所有状态标志SF、ZF、AF、PF、CF、OF例1.把标志寄存器FLAGS中符号标志位SF置1;2.将标志寄存器FLAGS中跟踪标志位TF置1;3.将标志寄存器FLAGS中溢出位OF变反。1.LAHF2.PUSHFORAH,80HPOPAXSAHFORAX,0100HPUSHAXPOPF3.PUSHFPOPAXXORAX,0800HPUSHAXPOPF检测指令——TEST形式:TESTdst,src;dst∧src如:TESTAL,20H;取AL的D5位JZBCLR;ZF=1(该位为0)就转到BCLR处算术左移指令SAL(移空的位全部补0)算术右移指令SAR(移空的位用原操作数的符号位补充)逻辑左移指令SHL(移空的位全部补0)逻辑右移指令SHR(移空的位全部补0)无条件转移指令JMP调用指令CALL—格式:CALL操作数(即目标地址)返回指令RET—格式:RETRET8位立即数★位于被调过程的末尾;必须与CALL指令成对使用条件转移指令JCC标志位=1则转移JSJZ/JEJP/JPEJCJO•判断无符号数大小的指令JA/JNBE;目操作数>源操作数则转移JAE/JNB/JC;目操作数≥源操作数则转移JB/JNAE/JNC;目操作数<源操作数则转移JBE/JNA;目操作数≤源操作数则转移•判断带符号数大小的指令JG/JNLE;目操作数>源操作数则转移JGE/JNL;目操作数≥源操作数则转移JL/JNGE;目操作数<源操作数则转移JLE/JNG;目操作数≤源操作数则转移LOOP指令:CX-1→CXCX≠0?是:转移否:顺序执行LOOPZ指令CX-1→CXCX≠0且ZF=1?是:转移否:顺序执行MOVCX,10(其它初始条件)NXT:DECCXJCXZLAST(循环执行的指令)JMPNXTLAST:(退出循环后的处理)以字母开头,由大写字母A~Z小写字母a~z(汇编程序不区分大小写)、数字(0~9)及4个特殊字符(?、@、$、和_等)组成名字的命名规则:字符串长度不能超过31个字符命名不能使用汇编语言中的保留字几点注意:·操作数如果是两个操作数,中间用逗号隔开操作数的形式可以有:常数、寄存器名、标号、变量和表达式DB——变量为字节数据类型(8位)DW——变量为字数据类型(16位)DD——变量为双字数据类型(32位)DQ——变量为4字数据类型(64位)DT——变量为10字节数据类型(80位)STDB96,20,?,-57;以ST为首址连续分配4个字节的存储单元STRDB‘Howareyou?$’;定义字符串TWINDB5DUP(0FFH);连
本文标题:电子科技大学成都学院微机原理知识点精华
链接地址:https://www.777doc.com/doc-2254007 .html