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

微机原理章串转移控制.ppt

51页
  • 卖家[上传人]:xiao****1972
  • 文档编号:73337280
  • 上传时间:2019-01-25
  • 文档格式:PPT
  • 文档大小:425.81KB
  • / 51 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 3.3.4 串操作指令,串——内存中连续存放的字节或字类型的数据. 以字节(B)为单位的字节串; 以字(W)为单位的字串 字符串长度可达64K字节 串操作指令共有五种基本指令,可以对字符串进行传送、比较、搜索及存和取操作待操作的数据串称为源串,目标地址称为目的串两种情况: 1、两个操作数均为串数据; MOVS —— 用于将一串从源移动到目的 CMPS —— 用于将两串逐一比较 2、两个操作数一为AL/AX,另一为串 STOS —— 用于将AL/AX中字节/字填充到目的串 LODS —— 用于从源串中取字节/字到AL/AX SCAS —— 用于在目的串中查找特定的字节/字,串操作指令的操作数(见表3.8),串操作指令的特点(约定),源串一般存放在数据段,偏移地址由SI指定逻辑地址为(DS:SI),允许段超越; 目的串必须在附加段(ES),偏移地址由DI指定,逻辑地址为(ES:SI) ; 每执行一次串指令,地址指针SI和DI将自动修改,修改方向由DF决定 DF=0 增址 +1/+2; (CLD) DF=1 减址 - 1/- 2; (STD) 数据块长度(字节或字数)放在CX中; 可增加自动重复前缀以实现串操作的重复执行; 也可设计普通循环来实现,,串操作的一般流程,,,取源串首/尾 地址,取目的串首/尾地址,,设循环次数(串长度) 设置方向DF,,串操作指令,,修改串长度值,传送完否?,,,,,,,,,,,,,,重复前缀,重复次数隐含在CX寄存器中,重复过程中会自动修改CX值。

      REP 无条件重复 REPE 相等重复 REPZ 为零重复 REPNE 不相等重复 REPNZ 不为零重复,,,,条件 重复,CX≠0且ZF=1,CX≠0且ZF=0,CX≠0 重复,,,串操作指令,串传送 MOVS 串比较 CMPS 串扫描 SCAS 串读取 LODS 串送存 STOS,,1、串传送指令MOVS,格式: 1) MOVS 目的串,原串 MOVSB ;字节串传送,传送一个8位的元素 ①(ES:DI)←(DS:SI) ② SI←SI±1,DI←DI±1 MOVSW ;字串传送,传送一个16位的元素 ①(ES:DI)←(DS:SI) ② SI←SI±2,DI←DI±2 串传送指令常与无条件重复前缀REP连用,可实现 存储器 到存储 器的数 据传送,,LEA SI,DATA1 LEA DI,DATA2 MOV CX,200 CLD REP MOVSB …,例:用串传送指令实现200个字节数据的串的传送:,LEA SI,DATA1 LEA DI,DATA2 MOV CX,200 CLD AGAIN: MOVSB DEC CX JNZ AGAIN …,,,,先执行,再判断,,先判断,再执行,REP MOVSB 执行的操作:,若CX=0时,串指令执行完毕,否则执行②~④ CX=CX-1 执行串指令MOVSB 再返回执行①,循环过程为:先判断,再执行 CX=0 ,为循环结束的条件。

      2、串比较指令CMPS,格式: CMPSB CMPSW 功能:由(DS:SI) - (ES:DI)的差值 设置标志位 A,C,O,P,S,Z SI←SI±1/2,DI←DI±1/2 指令的执行不改变操作数,仅影响标志位 串比较指令常与条件重复前缀REPE/REPNE连用LEA SI,DATA1 LEA DI,DATA2 MOV CX,200 CLD REPE CMPSB JNZ UNMAT MAT: … UNMAT: …,例:比较两个串是否相同 (两个串长度相同),LEA SI,DATA1 LEA DI,DATA2 MOV CX,200 CLD AGAIN: CMPSB JNE UNMAT DEC CX JNZ AGAIN MAT: … UNMAT : …,,,,REPE CMPSB 执行的操作:,CX≠0且ZF=1(相同)时,继续执行②~④否则结束执行串指令,跳出循环 CX=CX-1 执行串指令CMPS 重复执行①,循环过程为:先判断,再执行 循环结束的条件:CX=0或ZF=0(有不同) 串比较指令例,测试200个字节数据是否传送正确,如有错误,将第一个出现的错误位置记录下来,存到BX里,LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD XOR AL,AL REPE CMPSB JZ STOP,DEC SI MOV BX,SI STOP:…,,3、串搜索指令SCAS,格式: SCASB SCASW 操作:与CMPS指令相似,只是源操作数是AX/AL 。

      AL/AX - (ES:DI), DI←DI±1/2 应用: 常用于在目的串(指定存储区域)中寻找某个关键字关键字存放在AX或AL中 指令常可与条件重复前缀REPE/REPNE连用,,15,程序段: START: LEA SI , BLOCK LEA DI , PDATA LEA BX, NDATA MOV CX , 100 LOP: LODSB ;取源串的一个字节送AL TEST AL , 80H ;测试符号位 JNZ MINUS ;是负数,转移到MINUS STOSB ;正数存入正数区域 JMP NEXT MINUS:XCHG BX, DI ;交换正、负数指针 STOSB ;负数送入负数区 XCHG BX, DI ;恢复正、负数指针 NEXT: DEC CX ;次数减1 JNZ LOP ;未处理完,继续 HLT,4、串读取指令LODS,格式: LODSB LODSW 操作:对字节: AL ([DS:SI]) 对 字: AX ([DS:SI]) SI←SI±1/2 用于将内存某个区域的数据串依次装入累加器,以便显示或输出到接口 LODS指令一般不加重复前缀。

      5、串送存指令STOS,格式: STOSB STOSW 操作:对字节: AL ([ES:DI]) 对 字: AX ([ES:DI]) DI←DI±1/2 可与重复前缀REP连用,,,,串送存指令例 将内存某个区域清零,设计思想:,,串首/尾地址送ES:DI,,串长度送CX,,置方向标志DF,,0送累加器AL,,重复执行串送存指令 REP STOS,,,,,,,,,,3.4.5 程序控制传送指令,转移指令 JMP、JCC 循环控制 LOOP、LOOPZ、LOOPNZ 过程调用和返回 CALL、RET 中断指令 INT、IRET、INTO,控制程序的执行顺序实质为通过改变(IP)或(CS、IP)的值 来改变程序的执行顺序一) 转移指令,无条件转移指令JMP 无条件转移到目标地址,执行新的指令 有条件转移指令JCC 在具备一定条件的情况下转移到目标地址,,转移指令的实质:改变IP(或CS、IP)的值 分为 所有转移指令不会影响标志位1、无条件转移指令JMP,格式: JMP OPRD,目标地址,与JMP在同一代码段,与JMP不在同一代码段,,,,,,,,,,,,,代码段2,,,代码段1,段内 转移,段间 转移,段内转移,,,指令中直接给出目标地址,由指令中的寄存器或存储器操作数指出目标地址,段内直接寻址,段内间接寻址,转移的目标地址在当前代码段内,,,,段间转移,,转移的目标地址在另一代码段内,段间直接寻址,段间间接寻址,,由指令中的存储器操作数指出目标地址,,指令中直接给出目标地址,,段内直接寻址 格式:JMP Label,,,,,,,JMP …,Label,┇,┇,┇,,代码段,,,,位移量,称为相对寻址,,标号,JMP SHORT L1 MOV AX , 0 MOV BX , 0 MOV CX , 0 L1: MOV DX , CX … JMP NEAR PTR L2 …. L2: MOV AL , 0,例:,例:,段内间接寻址 格式:JMP r16 /mem16 功能:IP r16 /mem16 例: JMP BX JMP WORD PTR [BX+SI],,段间直接寻址,由指令中的32位存储器操作数 给出目标地址。

      格式: JMP FAR PTR Label 功能: IP Label的偏移地址 CS Label所在段的段基址,,段间间接寻址,JMP DWORD PTR mem32,远地址标号,,,JMP DWORD PTR [BX],,,,,,,,,XXH,XXH,XXH,XXH,[BX],,,,IP,CS,,,JMP,,,┇,┇,┇,┇,指令码,,,,代码段1,代码段2,数据段,IP [BX]字 CS [BX+2]字,,,例:,,JMP FAR PTR L1,2 、条件转移指令,格式: JCC LABEL 在满足一定条件下,程序转移到目标地址执行,不满足条件时,继续执行下一条指令 条件转移指令均为段内短转移,即转移范围为: -128------+127 转移条件是判断标志位状态 5个可测试标志C、S、Z、O、P,转移条件 单测5个标志: C、S、Z、O、P,JC /JB/JNAE (低于) JNC/JNB/JAE (高于或等于) JZ/JE JNZ/JNE JS JNS JP/JPE JNP/JPO JO JNO,组合测:,无符号数的高低:组合测Z、C JA/JNBE ;高于转移 CΛZ=0 JNA/JBE ;低于或等于转移 CVZ=1 比较有符号数大小:组合测S、O、Z JG/JNLE ;大于转移 [SO=0 (Z=0)] JGE/JNL ;大于或等于转移 SO=0 JL/JNGE ;小于转移 SO=0 且 Z=0 JLE/JNG ;小于或等于转移SO=1或Z=1 测CX: JCXZ : 若CX=0,转移,,例1: ADD AL ,8 JNC L1 ADC AH ,0 L1: MOV BX , AX 例2:CMP AL ,BL JA L1 ;(高于,转移) … L1: … 例3: MOV CX, 4 L1: ADD AL ,1 DEC CX JNE L1 MOV BL ,AL,(二) 重复(循环)控制指令,控制程序在以当前IP为中心的-128~+127范围内循环执行; 循环次数由CX寄存器指定。

      LOOP LOOPZ LOOPNZ JCXZ,,无条件循环指令LOOP,格式: LOOP Label 循环条件: CX ≠ 0 执行的操作: CX=CX-1 若CX≠0,就继续循环;否则,结束循环 例: MOV CX, 4 L1: ADD AL ,1 LOOP L1 MOV BL ,AL,相当于:DEC CX JNZ Label,条件循环指令LOOPZ/LOOPNZ,格式: LOOPZ LABEL LOOPE LABEL 循环条件: CX ≠ 0且 ZF=1,格式: LOOPNZ LABEL LOOPNE LABEL 循环条件: CX ≠ 0 且 ZF=0,,JCXZ OPRD,CX=0时转移到目标地址,否则顺序执行JCXZ的下一条指令 用在循环之前,在循环次数为0时,直接跳过循环 MOV CX ,[BX] JCXZ GONE AGAIN:… … LOOP AGAIN GONE:,例: MOV CX, 4 L1: ADD AL ,1 CMP AL,BL LOOPNZ L1 MOV BL ,AL,(三)、 过程调用CALL和返回RET,段内调用 段间调用,段内直接调用 段内间接调用,段间直接调用 段间间接调用,,,,子过程调用的流程,主程序中使用一条调用指令 CALL PROC 先保护断点地址 然后改变IP 或CS\IP 执行子过程,结束后要返回 原调用处(断点)继续执行 主程序。

      所以子过程要负责恢复 断点,用一条。

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