文档详情

程序控制类指令.ppt

发布:2015-12-26约2.79千字共35页下载文档
文本预览下载声明
程序控制类指令 3.9 转移指令 通过修改指令的偏移地址或段地址及偏移地址实现程序的转移 无条件转移指令 格式: JMP OPRD 无条件转移指令 段内转移 转移的目标地址在当前代码段内 无条件段内转移 段内直接寻址 JMP Label * * 转移指令 循环控制 子程序调用 中断控制 无条件转移指令 无条件转移到目标地址,执行新的指令 有条件转移指令 在具备一定条件的情况下转移到目标地址 目标地址 与JMP在同一代码段 与JMP不在同一代码段 原则上可实现在整个内存空间的转移 指令中直接给出目标地址 由指令中的寄存器或存储器操作数指出目标地址 段内直接寻址 段内间接寻址 近地址标号 位移量 下一条要执行指令的 偏移地址=当前IP+位移量 ┇ JMP ┇ ┇ Label 代码段 无条件段内转移 段内间接寻址 JMP BX JMP WORD PTR[BX] JMP ┇ ┇ ┇ 代码段 数据段 BX=1200 ┇ XXH XXH IP 指令码 无条件转移指令——段间转移 转移的目标地址不在当前代码段内 指令中直接给出目标地址 由指令中的32位存储器操作数指出目标地址 段间直接寻址 段间间接寻址 无条件段间转移 段内直接寻址 JMP FAR Label 远地址标号 JMP Label ┇ ┇ ┇ 代码段1 Label与JMP之间的位移量 代码段2 XXH XXH XXH XXH IP CS 无条件段间转移 段内间接寻址 JMP DWORD PTR[BX] XXH XXH XXH XXH [BX] IP CS JMP ┇ ┇ ┇ ┇ 指令码 代码段1 代码段2 数据段 条件转移指令 在满足一定条件下,程序转移到目标地址继续执行 条件转移指令均为段内短转移,即转移范围为: -128~+127 条件转移指令的应用 1)简单条件(直接标志)转移指令(共10条) 根据CF、ZF、SF、OF、PF分别为1或0,共有10种状态,设置了10种转移指令: JE/JZ JS JO JC JP ;标志为1转移 JNE/JNZ JNS JNO JNC JNP ;标志为0转 2)用于无符号数的条件转移指令 ①? JA/JNBE ;高于/不低于等于转移,CF∨ZF=0 ②? JNA/JBE ;不高于/低于等于转移,CF∨ZF=1 ③? JB/JNAE ;低于/不高于等于转移,CF=1 ④? JNB/JAE ;不低于/高于等于转移,CF=0 3)用于带符号数的条件转移指令 ①? JG/JNLE 大于/不小于等于转移,(SF ∨OF)∨ ZF=0 ②? JGE/JNL 大于等于/不小于转移,(SF ∨OF)=0 ③? JL/JNGE 小于/不大于等于转移,(SF ∨OF)=1 ④ JLE/JNG 小于等于/不大于转移,(SF ∨OF)∨ ZF=1 转移指令例 统计内存数据段中以TABLE为首地址的100个8位符号数中正数、负数和零元数的个数。 转移指令例(流程图) 将存放各元素个数的单元清零 取首地址 设串长度 取一个字节数 正数个数加1 零元素加1 为负? 为零? 负数个数加1 N Y N Y 3.10 循环控制指令 控制程序在以当前IP为中心的-128~+127范围内循环执行 循环次数由CX寄存器指定 LOOP LOOPZ LOOPNZ 无条件循环指令 格式: LOOP LABEL 循环条件: CX ≠ 0 操作: DEC CX JNZ 符号地址 条件循环指令 格式: LOOPZ LABEL LOOPE LABEL 循环条件: CX ≠ 0 ZF=1 格式: LOOPNZ LABEL LOOPNE LABEL 循环条件: CX ≠ 0 ZF=0 例:在一个由17个字符组成的字符串STRING中,现在查找该字符串中是否包含空格字符(其ASCII码为20H),若未找到或尚未查完,则继续查找,直到找到第一个空格字符或查完了才退出循环。 STRING DB ‘Personal Computer’ …
显示全部
相似文档