好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

循环控制指令过程调用和返回指令串操作指令中断.ppt

30页
  • 卖家[上传人]:1537****568
  • 文档编号:241396544
  • 上传时间:2022-01-16
  • 文档格式:PPT
  • 文档大小:107KB
  • / 30 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 四四 控制转移指令控制转移指令 转移类指令转移类指令 循环控制指令循环控制指令 过程调用和返回指令过程调用和返回指令 中断控制类指令中断控制类指令2 2 循环控制指令循环控制指令用在循环程序中以确定是否要继续循环循环次数通常置于CX中转移的目标应在距离本指令-128+127的范围之内循环控制指令不影响标志位格式:LOOP label操作:(CX)-1CX; 若(CX)0,则转至label处执行; 否则退出循环,执行LOOP后面的指令 LOOP指令与下面的指令段等价: DEC CX JNZ label(1 1)循环转移指令)循环转移指令LOOPLOOP(2) LOOPZ (LOOPE)格式:LOOPZ label操作:(CX)-1CX; 若(CX)0且ZF=1,则转至label处继续循环; 否则退出循环,执行LOOP后面的指令3) LOOPNZ (LOOPNE)格式:LOOPNZ label操作:(CX)-1CX; 若(CX)0且ZF=0,则转至label处继续循环; 否则退出循环,执行LOOP后面的指令3 3 过程调用和返回指令过程调用和返回指令 过程(子程序): 一段具有特定功能的,供其它程序调用的公用程序。

      特点特点调用子程序时,IP(CS)的内容被压入堆栈栈顶从子程序返回时,栈顶的内容又被弹出到IP(CS)子程序执行结束后一般均要返回调用程序一次定义,可多次调用;可带参数调用,以完成不同的功能1 1)调用指令)调用指令CALLCALL一般格式:CALL sub ; sub为子程序的入口根据子程序入口的寻址方式,子程序调用有四类 段内直接调用子程序的偏移地址直接由CALL指令给出 格式:CALL NEAR_PROC CALL执行时,它首先将IP内容压栈,然后把指令中给出的位移量加到IP上 段内间接调用子程序的偏移地址在寄存器或存储器中 格式:CALL mem16/reg16 CALL执行时,它首先将IP内容压栈,然后把指定的寄存器/存储器的内容送入IP例: CALL AX ;调用地址由AX给出CALL WORD PTRSI ;调用地址由存储器给出.例:对于例:对于 CALL WORD PTR SICALL WORD PTR SI这条指令这条指令若:若:( (DS)DS) = = 8000H8000H,(SI)(SI) = = 1200H1200H则指令操作图示如下CALL IPH IPL代码段代码段数据段数据段81200H81201H段间直接调用 子程序的段地址和偏移地址直接由CALL指令给出。

      格式:CALL FAR_PROC ;FAR_PROC为远过程的地址指令的操作: (SP)-1,(SP)-2)(CS) ;原CS压栈 SP(SP)-2 CS新段地址(SP)-1,(SP)-2)(IP) ;原IP压栈 SP(SP)-2 IP 新偏移地址例:CALL 2000H:1000H段间间接调用子程序的段地址和偏移地址为存储器的连续4个单元中的内容 格式:格式:CALL mem32指令的操作为: (SP)-1,(SP)-2)(CS) ;原CS压栈 SP(SP)-2 CS(mem32+2) (SP)-1,(SP)-2)(IP) ;原IP压栈 SP(SP)-2 IP(mem32)例:CALL DWORD PTRDI 调用地址在DI,DI+1,DI+2,DI+3四个存储单元中低字内容为偏移地址,高字内容为段地址CALL代码段代码段数据段数据段 IPH IPL CSH CSLDIDI+1DI+2DI+3CALL DWORD PTRCALL DWORD PTR DIDI(2 2)返回指令)返回指令RETRET 段内返回指令RET的操作为: IP(SP)+1,(SP) ;栈顶内容弹出到IPSP(SP)+2 段间返回指令RET的操作为: IP(SP)+1,(SP) ;栈顶内容弹出到IP SP(SP)+2 CS(SP)+1,(SP) ;栈顶内容弹出到CSSP(SP)+2 另有一种带立即数返回指令:RET n其中n为偶数,表示从栈顶弹出地址后另外丢弃的字节数。

      例:RET 4 ;返回后再丢弃栈顶的4个字节4 4 中断控制指令中断控制指令8086/8088 CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫内部中断,或叫软中断 中断指令共有三条: (1) INT n 执行类型n的中断服务程序,N=0255 (2) INTO 执行溢出中断的中断服务程序; (3) IRET 从中断服务程序返回调用程序四四 串操作指令串操作指令 字符串传送指令MOVSB/MOVSW 字符串比较指令CMPSB /CMPSW 字符串检索指令SCASB/ SCASW 取字符串指令 LODSB /LODSW 存字符串指令 STOSB/STOSW 串:顺序放在内存中的一组相同类型的数据 串操作:对串中的元素进行相同的操作 串操作的寻址方式:源操作数指针DS:SI(DS可重设)目的操作数指针ES:DI 每次串操作后:串操作指令自动修改SI和DI字节:1,字:2DF标志决定 注意:退出串操作后,指针指向最后操作的元素的 下一个元素 功能:可完成存储单元到存储单元的传送、比较(也仅是串指令可以) 有的串操作指令前面可加重复前缀当使用重复前缀时,操作重复次数由CX决定(CX自动减量)。

      该指令重复执行,直至(CX)=0为止注意:执行串指令之前,应先进行如下设置: 1)源串首地址(末地址) SI 2)目的串首地址(末地址) DI 3)串长度 CX 4)建立方向标志(CLD使DF=0(增),STD使DF=1 (减) )(1 1)串传送指令)串传送指令MOVSB / MOVSWMOVSB / MOVSW指令执行的操作为:MOVSB ; (ES):(DI)(DS):(SI) SI1, DI1 MOVSW ;(ES):(DI+1)(DI)(DS):(SI+1)(SI) SI2, DI2 注意: 原串用DS:SI寻址, 目标串用ES:DI寻址 是唯一的原操作数和目的操作数在存储器中的传送指令 例:例: 在数据段ADDR1地址处有200个数据,要传送到数据段地址ADDR2处MOV SI, OFFSET ADDR1MOV DI, OFFSET ADDR2MOV CX, 200CLDREP MOVSBLEA SI, ADDR1LEA DI, ADDR2(2 2)串比较指令)串比较指令CMPSB / CMPSWCMPSB / CMPSW指令执行的操作为:CMPSB ;(DS):(SI)-(ES):(DI) SI1, DI1 CMPSW ;(DS):(SI+1)(SI)-(ES):(DI+1)(DI) SI2, DI2 比较的结果只反映在标志位上,串本身无变化。

      本指令可用来检查两个串是否相等 与重复前缀REPZ/REPE、REPNZ/REPNE结合使用3 3)串扫描)串扫描 SCASB / SCASWSCASB / SCASW执行的操作: 对字节:(AL)(ES):(DI) DI1 对字: (AX)(ES):(DI1)(DI) DI2 搜索指令执行的仍是比较(减法)操作,结果只影响标志位 要搜索的关键字放在AL(字节)或AX(字)中 本指令用于在串中查找指定的信息 与重复前缀REPZ/REPE、REPNZ/REPNE结合使用4 4)串读取指令)串读取指令LODSB / LODSWLODSB / LODSW执行的操作为: 对字节:(AL)(DS):(SI) SI1 对字:(AX)(DS):(SI+1)(SI) SI2 串读取指令通常不加重复前缀LODSB等价于: LODSW等价于: MOV AL,SI MOV AX,SI INC SI INC SI INC SI (5 5)串存储指令)串存储指令 STOSB / STOSWSTOSB / STOSW 写指令的操作为: 对字节:(ES):(DI)(AL) DI1 对字 :(ES):(DI+1)(DI)(AX) DI2 本指令用于把一块存储区域填充成某一 初始值(即对存储区进行初始化初始化)。

      例:把1000H开始的100个存储单元填入 ASCII码2AH(*)程序段如下:程序段如下: MOV MOV DIDI, 1000H ; , 1000H ; 首地址首地址 MOV MOV ALAL, 2AH ; , 2AH ; * MOV MOV CXCX, 100 ; , 100 ; 重复执行重复执行100100次次 CLD ; CLD ; 增量修改增量修改DI DI REPREP STOSBSTOSB本章小结 80 x86指令的操作数包括3种形式:立即数、寄存器(通用寄存器和段寄存器)与内存操作数 对于内存操作数,由操作数的形式可计算出有效地址在缺省情况下,其段地址隐含在段寄存器DS或SS中,除非由段超越前缀明确给出 大多数指令(如传送类指令)的执行不影响标志位,某些指令(如算术指令)的执行按一般规则影响标志位,还有一部分指令(如逻辑指令)会按特定方式(清0、置1等)影响标志位部分8086/8088常用指令指令类型助记符数据传送数据传送 MOV,PUSH/POP,XCHG等地址传送 LEA,LDS,LES输入输出 IN,OUT算术运算加法ADD,ADC,INC减法SUB,SBB,DEC,NEG,CMP乘/除法MUL,IMUL,DIV,IDIV逻辑AND,OR,NOT,XOR,TEST移位SHL/SHR/SAR,ROL/ROR,RCL/RCR串操作MOVS,CMPS,SCAS,LODS,STOS控制转移JMP,JXX,LOOP,CALL/RET,INT/IRET练习:练习: (1)已知(AX)=1234H,执行下面3条指令后,(AX)=_. MOV BX,AX NEG BX ADD AX,BX0000H(2) 如执行 XOR AH,AH MOV AL,90H CWD 指令后,结果是_(DX,AX)=0000 0090H(3) 解析下面程序段,回答问题: MOV CX,DX NOT CX ADD CX,DX INC CX 问:(CX)=_,(ZF)=_0000H1(4) 下面指令序列完成的运算表达式应是_ MOV AL,BYTE PTR X SHL AL,1 DEC AL MOV BYTE PTR Y,ALY=2*X-1MOV CL , 8ROL AX , CLADD AX , BX(5) 已知 (AX)=0012H, (BX)=0043H,要求把它们形成(AX)=1234H 提示:可以用循环移位指令作 业1.指出下列指令的错误:(1) MOV AX,SIDI(2) MOV BX,SI(3) ADD AX,BYTE PTRBX(4) JMP BYTE PTRBX(5) OUT 230H, AX2.堆栈指针寄存器SP的初值为1000H,(AX)=2000H,(BX)=3000H,试问:(1)执行指令PUSH AX后,(SP)=( )(2)再执行指令PUSH BX和POP AX后,(SP=( ),(AX)=( ),(BX)=( )。

      3.判断下列执行程序后,BX的内容 MOV CL 3 MOV BX 0B7H ROL BX 1 ROR BX,CL4.指出下面程序段的功能 CLD LEA DI, 1200H MOV CX, 0F00H XOR AX, AX REP STOSW5.写出完成下列功能的程序段(1)从地址DS:0012H中送一个数据56H到AL寄存器2)AL的内容与字节单元DS:0013H中的内容相乘,乘积存入子单元DS:0014H。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.