第26to27指令系统-控制转移to控制类.ppt
《第26to27指令系统-控制转移to控制类.ppt》由会员分享,可在线阅读,更多相关《第26to27指令系统-控制转移to控制类.ppt(51页珍藏版)》请在三一文库上搜索。
1、2.6 控制转移类指令 v控制转移类指令用于实现分支、循环、过程等 程序结构,是仅次于传送指令的常用指令 v重点掌握: JMP/Jcc/LOOP/JCXZ CALL/RET INT n/IRET 常用系统功能调用 控制转移类指令通过改变IP(和CS)值, 实现程序执行顺序的改变 姆 溯 骇 涕 孙 崇 颈 弟 乎 塌 岩 眯 款 腋 舰 焙 百 狙 珍 卢 射 资 呆 访 铸 删 窄 牲 伪 菏 柑 拎 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 1 目标地址的寻址方式
2、v相对寻址方式 指令代码中提供目的地址相对于当前IP的位 移量,转移到的目的地址(转移后的IP值)就 是当前IP值加上位移量 v直接寻址方式 指令代码中提供目的逻辑地址,转移后的CS 和IP值直接来自指令操作码后的目的地址操作 数 v间接寻址方式 指令代码中指示寄存器或存储单元,目的地 址从寄存器或存储单元中间接获得 用标号表达 用标号表达 用寄存器或存储器操作数表达 砂 叶 浆 降 整 埠 腰 菜 症 走 付 装 白 屑 僧 侣 八 洼 蚀 擂 雷 未 堡 盒 狭 埋 帜 非 多 搁 讥 庆 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t
3、o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 2 目标地址的寻址范围:段内寻址 v段内转移近转移(near) 在当前代码段64KB范围内转移( 32KB范围) 不需要更改CS段地址,只要改变 IP偏移地址 v段内转移短转移(short) 在段内128127字节范围的 转移 代码段代码段 勉 号 股 湘 瓤 惠 玛 迭 郊 募 寿 垒 壕 慢 踪 铰 柞 汤 像 郝 配 痕 痴 张 欧 粒 偶 掉 稼 调 朱 忘 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制
4、 类 3 目标地址的寻址范围:段间寻址 v段间转移远转移(far) 从当前代码段跳转到另一个代码 段,可以在1MB范围 需要更改CS段地址和IP偏移地址 目标地址必须用一个32位数表达 ,叫做32位远指针,它就是逻辑地址 代码段代码段 实际编程时,汇编程序会根据目标地址的 属性,自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制成为需要的转移类型 佐 裳 察 诽 隘 旺 鹃 柒 京 凌 肪 秀 许 北 土 梨 缀 莎 陨 兼 秉 芭 疟 乓 彩 乞 君 芜 带 烁 危 袜 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o
5、 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 4 2.6.1 无条件转移指令 v只要执行无条件转移指令JMP,就使程序转到指定 的目标地址,从目标地址处开始执行指令 v操作数label是要转移到的目标地址(目的地址、转 移地址) vJMP指令分成4种类型: 段内转移、相对寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址 JMP label;程序转向label标号指定的地址 蓄 丸 熊 嗽 琳 浆 拧 肯 尚 涣 句 襟 峙 舞 垄 园 壕 驶 渡 评 华 颐 醒 羚 翔 镶 丢 缉 民 先 银 橙 第 2 6 t o 2 7
6、指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 5 无条件转移指令JMP(jump) JMP label;段内转移、相对寻址 ;IPIP位移量 JMP r16/m16;段内转移、间接寻址 ;IPr16/m16 JMP far ptr label;段间转移、直接寻址 ;IP偏移地址,CS段地址 JMP far ptr mem;段间转移,间接寻址 ;IPmem,CSmem2 演示 演示演示 演示 演示 汀 支 灯 嚣 香 痰 既 遁 幌 椿 嫌 傀 狞 饼 挺 郑 箍 捎 竿 擂 授 侈 徽 锯 桅 趾 运
7、 哟 升 漂 眷 搞 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 6 2.6.2 条件转移指令 v条件转移指令Jcc根据指定的条件确定程序是否发生 转移。其通用格式为: Jcc label;条件满足,发生转移 ;IPIP8位位移量; ;否则,顺序执行 vlabel是一个标号、一个8位位移量,表示Jcc指令后 的那条指令的偏移地址,到目标指令的偏移地址的地 址位移 vlabel只支持短转移的相对寻址方式 歪 座 宪 另 程 刹 铃 帖 衫 高 翅 措 潦 缘 愿 获 磕 载
8、 坡 原 劝 匪 秀 熙 嘿 模 窃 圈 瞥 评 檀 羽 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 7 Jcc指令的分类 vJcc指令不影响标志,但要利用标志(表2-4) v根据利用的标志位不同,分成三种情况: 判断单个标志位状态 比较无符号数高低 比较有符号数大小 Jcc指令实际虽然只有16条,但却有30个助记符 采用多个助记符,目的是为了方便记忆和使用 堕 惜 鞋 亢 扩 兵 倪 皱 刷 志 凸 获 勿 蹦 凶 狼 豪 沪 葬 朝 腹 任 免 捧 诡 抒 贺 戴 螟
9、 键 场 吗 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 8 判断单个标志位状态 JZ/JE和JNZ/JNE 利用零标志ZF,判断结果是否为零(或相等) JS和JNS 利用符号标志SF,判断结果是正是负 JO和JNO 利用溢出标志OF,判断结果是否产生溢出 JP/JPE和JNP/JPO 利用奇偶标志PF,判断结果中“1”的个数是偶是 奇 JC/JB/JNAE和JNC/JNB/JAE 利用进位标志CF,判断结果是否进位或借位 塑 时 况 旋 侦 惩 呻 睛 画 洱 糟 多
10、该 掐 惊 驳 祥 序 泵 木 班 嗡 幂 衡 乒 塌 淹 渣 谬 郑 筋 蕊 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 9 题目:将AX中存放的无符号数除以2,如果是奇数则 加1后除以2 问题:如何判断AX中的数据是奇数还是偶数? 解答:判断AX最低位是“0”(偶数),还是“1”(奇 数)。可以用位操作类指令 1:用逻辑与指令将除最低位外的其他位变成0,保留 最低位不变。判断这个数据是0,AX就是偶数;否则 ,为奇数 2:将最低位用移位指令移至进位标志,判断进位标志
11、是0,AX就是偶数;否则,为奇数 3:将最低位用移位指令移至最高位(符号位),判断 符号标志是0,AX就是偶数;否则,为奇数 腕 梭 滋 傍 蕊 锥 这 分 丑 阔 莲 究 扬 骏 牢 植 铲 腾 峙 台 圭 健 冕 标 信 胀 佬 累 穆 悲 袋 漠 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 10 解答1用JZ指令实现 TEST AX,01H ;测试AX的最低位D0(不用AND指令,以免改变AX ) JZ EVEN ;标志ZF1,即D00:AX内是偶数,程序转移 AD
12、D AX,1 ;标志ZF0,即D01:AX内的奇数,加1 EVEN: SHR AX,1;AXAX2 用右移一位的方法实现除以2。 酞 该 寝 豹 凶 屡 酋 椰 律 叠 哺 淀 夕 卧 某 隘 斋 摧 恨 铅 律 今 值 违 锈 漆 需 咨 帜 且 孕 琴 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 11 解答2 用JNC指令实现 MOV BX,AX SHR BX,1 ;将AX的最低位D0移进CF JNC EVEN ;标志CF0,即D00:AX内是偶数,程序转移 ADD
13、AX,1 ;标志CF1,即D01:AX内的奇数,加1 EVEN: SHR AX,1;AXAX2 还可用SAR、ROR和RCR指令 哉 习 撞 旋 莲 最 密 臻 矗 涧 宣 珐 围 滔 织 差 哀 羞 婆 丝 饭 芜 为 涂 阶 靶 蔬 助 库 况 每 盎 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 12 解答3 用JNS指令实现 mov bx,ax ror bx,1 ;将AX的最低位D0移进最高位(符号位SF) jns even ;标志SF0,即D00:AX内是偶数,程
14、序转移 add ax,1 ;标志SF1,即D01:AX内的奇数,加1 even: shr ax,1;AXAX2 错误!循环指令不影响SF等标志 ADD BX,0;增加一条指令 北 亚 泻 蜂 剑 诱 秆 竭 寂 杜 抵 堵 答 惑 卒 羊 固 勺 毫 忙 考 盾 掀 万 炬 谦 盾 低 滋 稽 捉 拓 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 13 例2.20 寄存器AL中是字母Y(含大小写),则令AH 0,否则令AH1 CMP AL,y;比较AL与小写字母y JE N
15、EXT;相等,转移 CMP AL,Y ;不相等, ;继续比较AL与大写字母Y JE NEXT;相等,转移 MOV AH,-1;不相等,令AH1 JMP DONE;无条件转移指令 NEXT: MOV AH,0;相等的处理:令AH0 DONE: 译 服 子 肉 独 亦 厦 寻 腺 耿 菩 显 农 蹿 驹 止 共 碘 氓 卸 隙 鸡 射 旬 尿 拘 拖 敲 拜 卖 慢 节 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 14 例2.21 对DL寄存器中8位数据进行偶校验,校验位 存
16、入CF标志 TEST DL,0FFH ;使CF0,同时设置PF标志 JPE DONE ;DL中“1”的个数为偶数 ;正好CF0,转向DONE STC ;DL中“1”的个数为奇数,设置CF1 DONE: ;完成 发 肩 隅 例 荧 榜 涝 沏 慈 母 朵 腾 蒋 氰 币 拨 浦 灵 楚 鬃 节 弗 杉 菜 肇 抑 型 劳 笺 梨 遁 章 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 15 比较无符号数高低 v无符号数的大小用高(Above)、低(Below)表示 ,需要利用C
17、F确定高低、利用ZF标志确定相等( Equal) v两数的高低分成4种关系,对应4条指令 JB(JNAE):目的操作数低于(不高于等于)源操作数 JNB(JAE):目的操作数不低于(高于等于)源操作数 JBE(JNA):目的操作数低于等于(不高于)源操作数 JNBE(JA):目的操作数不低于等于(高于)源操作数 沮 霖 弓 淑 息 箍 镐 皂 果 诚 诽 沛 乳 笋 趋 戊 俞 耍 焊 耘 汾 蹄 汗 都 洼 上 羽 栗 层 咨 马 扼 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控
18、 制 类 16 比较有符号数大小 v判断有符号数的大(Greater)、小(Less),需要 组合OF、SF标志、并利用ZF标志确定相等与否 v两数的大小分成4种关系,分别对应4条指令 JL(JNGE):目的操作数小于(不大于等于)源操作数 JNL(JGE):目的操作数不小于(大于等于)源操作数 JLE(JNG):目的操作数小于等于(不大于)源操作数 JNLE(JG):目的操作数不小于等于(大于)源操作数 谷 裂 濒 毗 测 蛔 晤 吕 扰 殆 换 豫 弘 终 核 张 琉 吗 演 吼 齿 脸 硼 蹈 罐 咬 说 躯 呐 憾 正 唾 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移
19、 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 17 例2.22 将AX和BX中较大的数值存放在WMAX内存单元 CMP AX,BX;比较AX和BX JAE NEXT;若AXBX,转移 XCHG AX,BX;若AXBX,交换 NEXT: MOV WMAX,AX 如果AX和BX存放的是有符号数,则条件转 移指令应采用JGE指令 析 钓 聚 柠 椿 衍 雁 娜 摄 假 闰 说 寡 剿 郡 垣 责 淋 谭 盂 吊 涨 菌 挫 语 嵌 虱 尊 各 曙 沪 譬 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第
20、 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 18 例2.22 求较大值(另解) CMP AX,BX;比较AX和BX JAE NEXT MOV WMAX, BX ;若AXBX,WMAXBX JMP DONE NEXT: MOV WMAX,AX ;若AXBX,WMAXAX DONE: 冰 火 措 全 刘 哉 棉 驻 抄 阉 氏 憨 碟 门 歉 骡 黍 搬 暗 江 骤 钓 岂 宗 棠 桑 形 嗽 顺 睡 挤 挪 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t
21、o 控 制 类 19 例2.22 求较大值(另解对比) cmp ax,bx;比较AX和BX jbe next mov wmax, ax ;若AXBX,wmaxAX jmp done next: mov wmax,bx ;若AXBX,wmaxBX done: 恋 榆 杉 斌 镶 闽 玖 偶 诛 食 壬 映 端 阻 谋 绣 果 铝 桌 浊 介 躬 诅 噶 是 肺 瓶 洽 结 鲁 环 聚 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 20 2.6.3 循环指令 v一段代码序列多次
22、重复执行就是循环 v8088设计有针对CX计数器的计数循环指令 LOOP label;循环指令 ;首先CXCX1;然后判断;若CX0,转移 JCXZ label;为0循环指令 :如果CX0,则转移 vlabel操作数采用相对短转移寻址方式 v还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条指令 dec cx jnz label 惧 汀 或 糖 锈 裸 栈 鸭 垦 圃 玲 麻 延 狸 痞 绩 拣 草 斧 泞 幢 利 思 柱 裁 陵 茫 舌 稽 舵 馒 宴 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 -
23、控 制 转 移 t o 控 制 类 21 例2.23 将数据段的Sbuf指示的1KB数据传送到附加段 的Dbuf缓冲区 MOV CX,400H ;设置循环次数:1K1024400H MOV SI,OFFSET SBUF ;设置循环初值:SI指向数据段源缓冲区开始 MOV DI,OFFSET DBUF ;DI指向附加段目的缓冲区开始(附加段) AGAIN:MOV AL,SI ;循环体:实现数据传送 MOV ES:DI,AL;每次传送一个字节 INC SI ;SI和DI指向下一个单元 INC DI LOOP AGAIN ;循环条件判定:循环次数减1,不为0转移(循环) 磕 卡 勾 郴 滓 梁 何
24、痴 峭 檀 扔 墙 改 靖 蛛 撇 洁 墙 泽 舔 化 嚣 悄 离 淤 洱 杠 叼 熄 玉 杨 匠 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 第 2 6 t o 2 7 指 令 系 统 - 控 制 转 移 t o 控 制 类 22 例 数据块传送(字) mov cx,200h ;设置循环次数:1K2200H mov si,offset sbuf ;设置循环初值:SI指向数据段源缓冲区开始 mov di,offset dbuf ;DI指向附加段目的缓冲区开始(附加段) again: mov ax,si;循环体:实现数据传送 mov es:di,ax;每次
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 26 to27 指令系统 控制 转移 to
链接地址:https://www.31doc.com/p-5924591.html