《微机原理》PPT课件.ppt_第1页
《微机原理》PPT课件.ppt_第2页
《微机原理》PPT课件.ppt_第3页
《微机原理》PPT课件.ppt_第4页
《微机原理》PPT课件.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

上一讲内容回顾,十进制算术指令,逻辑指令,移位和循环移位指令,AND、TEST、OR、XOR、NOT,SHL/SAL、SHR、SAR ROL、ROR、RCL、RCR,dest,SHL/SAL:,dest,SHR:,dset,SAR:,dest,ROL:,dest,ROR:,dest,RCL:,dest,RCR:,第三章 8086的通用指令,要求:掌握所学8086指令的格式、操作、功能和使用方法,达到灵活使用各指令编程的要求。,2010-04-13,3.4.6 控制传送指令,3.4.7 串操作指令,3.4.6 控制传送指令,控制传送指令分为: 转移指令 条件转移指令 重复控制指令 调用和返回指令 过程指令,所有的程序控制转移类指令均不影响标志位,64KB内,段内转移:目标指令与转移指令在同一代码段中,只改变IP的值,LL:新CS :IP,分为两种情况: 段内转移和段间转移,CS:IP,可以超过64KB,段间转移,目标指令与转移指令分别在不同的代码段,转移时需要改变CS和IP的值,CS:IP,LL:新CS:IP,1、无条件转移指令 格式:JMP OPRD 功能:程序转向由OPRD指向的位置执行,分为两种情况:直接转移和间接转移,操作数:立即数、存储器操作数、寄存器操作数,(1)直接转移,分为三种情况: 短转移:JMP SHORT OPRD 近转移:JMP NEAR PTR OPRD 远转移:JMP FAR PTR OPRD,OPRD通常以标号形式出现,NEAR为默认值 可以省略。,JMP AGAIN JMP FAR PTR DATCHG,-128127 -3276832767,短程、近程:差别在于转移的距离不同,其位移量一个是8位,一个是16位。,LL:新CS :IP,短转移与近转移属段内转移,远转移属段间转移。,CS:IP,近转移、短转移时,CS不变,IP=IP+位移量,远转移时,新的CS和IP由OPRD指向位置的段地址和段内地址决定。,(2)间接转移 操作数一般是一个存储器操作数,真正的转移地址在内存中。(操作数是寄存器时例外) 分为两种情况: 段内间接转移和段间间接转移,1)段内间接转移: 格式:JMP WORD PTR OPRD 转移地址存放在内存单元中,转移指令后给出的是内存单元的地址。,格式:JMP OPRD,;OPRD为寄存器名,JMP BX,; (BX)IP,JMP WORD PTRSI,; DS:SI+1DS:SIIP,DS:SI,IP,2)段间间接转移: 格式:JMP DWORD PTR OPRD 转移地址存放在内存单元中,一般用寄存器间接寻址。,JMP DWORD PTR SI,; DS:SI+3SI+2CS DS:SI+1SIIP,DS:SI,CS,IP,JMP 0120H ;直接转向0120H,JMP SI,;若指令执行前(SI)=1200H,则指令执行后,(IP)=1200H, 于是转向代码段的偏移地址1200H处执行。,JMP 2000:1000H ;(IP)1000H,(CS)2000H,JMP DWORD PTRSI 设指令执行前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H 则指令执行后:(IP)=1000H,(CS)=4A00H,2、条件转移指令: 功能:根据条件来判断程序是否转移。 满足条件时程序转向指定位置执行, 否则,程序顺序执行。 (注意:此时程序出现分支),只能转移到距当前指令 -128127字节的范围内, 即一个字节的补码范围;,127,128,按转移条件不同,条件转移指令可以分为四大类: 以单个状态标志作为转移条件助记符 转移条件, 以CX的值为0作为转移条件,根据5个标志位来判断,判断循环用,以两个无符号数比较的结果作为转移条件,以两个带符号数比较的结果作为转移条件,注意几点: 所有条件转移指令都是相对转移形式, 范围(-128+127)。 当需往一个较远地方进行条件转移时, 选用条件转移转到附近一个单元, 然后,再用无条件转移转到较远的目的地。 条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移, 条件转移指令不影响标志位,条件转移指令常用来进行判断,以实现程序分支:,CMP AL, 0 JAE AL,NN MOV DL, 1 JMP DONE NN: MOV DL, 0 DONE: ,程序执行完以后,若AL的值小于0则DL1,反之则DL0 。,条件转移指令应用 例:比较二个数是否相等 如相等做动作1 否则做动作2 CMP AX,BX JE action_1 Action_2: action_1 : ,或 CMP AX,BX JNZ action_2 action_1: action_2: ,下面程序段在什么情况下执行的结果是AL=0,BEGIN: IN AL, 5FH TEST AL, 80H JZ A1 XOR AL, AL JMP STOP A1: MOV AL, 0FFH STOP: HLT,当从5FH端口读到的数据的最高位为1时,从数据区BCDBUF开始存放着10个用非压缩BCD码表示的十进制数,要求把它们分别转换成ASCII码后存入另一缓冲区。,LEA SI , BCDBUF LEA DI, ASIBUF MOV CX, 10 AGAIN: MOV AL, SI ;取BCD码 OR AL, 30H ;转换 MOV DI, AL ;存 INC SI INC DI DEC CX JNZ AGAIN,分析: BCD码转换成ASCII码的方法是: BCD码30H,3、循环控制指令 编程时,可以用条件转移指令控制循环, 如: MOV CX, 10 AGAIN: ADD AX, 1 DEC CX JNZ AGAIN 也有专用的循环控制指令(3条)。 3条指令控制转移范围均在-128127字节内; 循环前必须将循环次数赋值给CX。,1) 格式:LOOP 标号,CX-1CX, 若CX不为0,转移到标号处继续循环,2) 格式:LOOPZ/LOOPE 标号,CX-1CX, 若CX0且ZF=1时转到标号处继续循环,CX为0并不影响标志位ZF,ZF是否为1是由循环指令前面的指令决定的。,3) 格式: LOOPNZ/LOOPNE 标号,CX-1CX, 若CX0且ZF=0时转到标号处继续循环,下面程序段执行后,AX=?,MOV AX,0FFFFH MOV CX, 4 LOP1: SHL AX, 1 LOOP LOP1,; AX: 1111 1111 1111 1111,; AX: 1111 1111 1111 1110,; 循环4次,结果:AX 0FFF0H 其中LOOP LOP1 相当于 DEC CX JNZ LOP1 这两条指令,MOV CX, 40 LEA SI, TABLE NEXT: CMP BYTE PTRSI , 0 JNZ OKK INC SI LOOP NEXT OKK: CALL DISPLAY2,下面的程序段用于在40个元素构成的数组中寻找第一个非0元素,数组元素从数据段的TABLE处开始存放。,; 设置循环次数,; 设置地址指针,; 与0比较,; CX-1且CX 0 继续循环,; 若ZF 1,说明找到了退出循环,; 找到后,调用显示信息,; ZF=1,说明未找到修改地址指针,如果要求寻找第一个为0的元素,程序该如何修改?,与条件转移指令不同的是:循环指令隐含 ( CX ) 减操作。 例:用循环指令将BL寄存器的内容按二进制形式显示出来 MOV CX , 8 next: ROL BL , 1 MOV DL , BL AND DL , 0000 0001B ADD DL , 0011 0000B MOV AH , 2 INT 21H DEC CX JNZ next ,LOOP next,循环指令说明: LOOP退出循环条件是(CX)=0 LOOPZ和LOOPNZ提供了提前结束循环的可能, 不一定要等到(CX)=0才退出循环。 在串中查找字符,查到了,就可退出, 可用LOOPNZ,不相等时继续查找。 比较两串时,当有字符不等,就可退出,说明两字符串不等。 可用LOOPZ,当相等时继续比较。 执行完 LOOPNZ或LOOPZ后,根据ZF标志的值判断结果 对查找字符,ZF=1,说明找到;否则没有找到。 对串比较,ZF=1, 说明两串相等;否则不等。,4、子程序调用和返回指令,调用处,子程序首地址:T,子程序,返回处,返回指令,CALL NEAR PTR OPRD CALL FAR PTR OPRD 功能:调用子程序 RET 功能:返回主程序,同样分段内调用和段间调用,一般为直接调用,如:CALL T 其中T为子程序入口标号,1)段内调用:子程序距调用语句不超过64KB,在同一个代码段内,调用时,只改变IP即可。 如执行CALL AA, AA标号的偏移地址是8050H,SS,CS,SP,1. 将3010H入栈,保护 返回地址,SP,30H,10H,SP,2. 将8050H赋给IP,3. 执行子程序,4. 执行RET, 栈顶内容弹出送IP,5. 继续运行主程序,SP,CALL near_proc CALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上。 (SP) (SP) -2 (SP) (IP) (IP) near_proc,2)段间调用:子程序距调用语句可以超过64KB,不在同一代码段,调用时,需要同时改变CS和IP。,调用指令,2000H:1500H,3400H:2460H,SS,20H,00H,SP,15H,00H,原CS,原IP,3400HCS,2460HIP,1500HIP,2000HCS,执行CALL NEXT, NEXT指向的地址是 3400H:2460H,段间调用步骤: 将调用指令后的第一条指令地址的CS入栈; 将调用指令后的第一条指令地址的IP入栈; 将调用目的地地址的段地址赋值CS; 将调用目的地地址的偏移地址赋值IP; 执行子程序,直至遇到RET指令; 将栈顶当前内容赋值IP; 将栈顶当前内容赋值CS; 返回主程序。,CALL far_proc ;far_proc为远过程的地址 指令的操作为: SP(SP)-2 (SP)(CS) ;CS压栈 SP(SP)-2 (SP)(IP) ;IP压栈 CS段地址 IP偏移地址 例:CALL 2000H:1000H,3)返回指令:RET,将当前堆栈内容返回到IP(段内调用)或IP,CS(段间调用),具体是段内调用还是段间调用由定义子程序的语句决定的。,RET n:从栈顶弹出返回地址后,SP+nSP,n为偶数,即栈顶位置跳过n个字节。,返回地址后SP,RET 4,SP+4SP,4,段内返回指令RET的操作为: IP(SP) ;栈顶内容弹出到IP SP(SP)+2 段间返回指令RET的操作为: IP(SP) ;栈顶内容弹出到IP SP(SP)+2 CS(SP) ;栈顶内容弹出到CS SP(SP)+2,4)软件中断指令、溢出中断指令,中断(Interrupt): 有时当系统运行或程序运行期间遇到某些特殊情况, 需要计算机自动执行一组专门的例行程序来进行处理。 中断例行程序(或中断子程序)(Interrupt routine): 所执行的这组程序就称为中断子程序。 种类: 中断分为内部(软)中断和外部(硬)中断两种。 内部中断如除法运算中除数为0、中断指令引起的中断。 外部中断处理I/O设备与CPU之间的通信。,CPU响应一次中断自动完成三件事情: (PSW)入栈 保护现场, (CS),(IP)保存入栈 保留断点, 转中断例行程序去执行。 中断返回时: 恢复(IP)、(CS)及(PSW) 中断向量:中断例行程序入口地址。 IBM-PC中,存储器的最底地址00000H003FFH为中断向量区, 存放256种类型中断例行程序入口地址, 每个中断向量占4个单元。 中断指定类型号N 4取得指定类型的中断向量地址。,例:中断类型9, 9 4=36 00024H00027H单元中放中断向量。,格式: INT n ;n=0255,为中断类型号 本指令的操作步骤为: (SP)(FLAGS),SP(SP)-2 ; FLAG 入栈 IF0,TF0 中断服务程序中禁止外部INTR中断和单步中断 (SP)(CS),SP(SP)-2,CS(n*4+2) 中断服务程序的段地址送入CS。n*4为向量地址。该向量 地址中的内容即为中断服务程序入口地址。 (SP)(IP),SP(SP)-2,IP(n*4) 中断服务程序的偏移地址送IP。 INT指令只影响IF和TF, 对其余标志位无影响。 INT指令可用于调用系统服务程序,如INT 21H,MOV AH,2 INT 21,INT软件中断,INTO检查溢出标志OF,如果OF=1,则启动一个类型4的中断过程;如果OF=0,不做任何操作。 通常INTO指令安排在有符号数算术运算指令后面。如 IMUL DX INTO ;若溢出,则启动INT 4,否则继续 MOV RESULT,AX MOV RESULT+2,DX ,INTO溢出中断,用于从中断服务程序返回被中断的程序。 任何中断服务程序不管是外部中断引起的,还是内部中断引起的,最后都要用IRET返回。 该指令执行的操作为: IP(SP) ;栈顶内容弹出到IP SP(SP)+2 CS(SP) ;栈顶内容弹出到CS SP(SP)+2 FLAGS(SP) ;栈顶内容弹出到FLAG SP(SP)+2,5) 中断返回指令IRET,5. 过程指令,(1)BOUND (2)ENTER (3)LEAVE,自学,用一条指令实现对一串数据或字符的操作,字符或数据的个数在CX中,每执行一次CX自动减1,直至减到零串操作自动停止; 源操作数在DS:SI中,目的操作数在ES:DI中; 源操作数和目的操作数都在内存中,是唯一一条从内存到内存的指令; DF=1,地址自动由高至低减量,进行串运算;DF=0,地址自动由低至高增量,进行串运算。,3.4.7 串操作指令,执行串指令之前,应先进行如下设置: 源串首地址(或末地址) SI 目的串首地址(或末地址) DI 串长度 CX 建立方向标志(CLD使DF=0,STD使DF=1),建立方向标志介绍两条指令: CLD(clear direction flag) 功能:DF=0,执行串处理指令时 可以使地址自动+1或+2。 STD(set direction flag) 功能:DF=1,执行串处理指令时可以使地址自动-1或 -2。,8086有7种基本串操作: 1、 MOVS(Move string) 串传送指令 2、CMPS(Compare string) 串比较指令 3、SCAS(Scan string) 串扫描指令 4、LODS(Load from string) 从串取指令 5、STOS (Store in to string) 存入串指令 6、INS串输入指令 7、OUTS串输出指令,1、串传送指令,MOVSB:每次传送一个字节; MOVSW:每次传送一个字;,将位于DS段,由SI所指出的存储单元的字节或字传送到位于ES段,由DI所指的存储单元中,再根据DF修改SI和DI,从而指向下一个元素,继续传送,直到CX为0为止。,LEA SI, STAR LEA DI, NEXT MOV CX, 100 CLD AG

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论