第2章8086的指令系统三yk控制转移指令.ppt

上传人:京东小超市 文档编号:5913392 上传时间:2020-08-15 格式:PPT 页数:60 大小:357.50KB
返回 下载 相关 举报
第2章8086的指令系统三yk控制转移指令.ppt_第1页
第1页 / 共60页
第2章8086的指令系统三yk控制转移指令.ppt_第2页
第2页 / 共60页
亲,该文档总共60页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第2章8086的指令系统三yk控制转移指令.ppt》由会员分享,可在线阅读,更多相关《第2章8086的指令系统三yk控制转移指令.ppt(60页珍藏版)》请在三一文库上搜索。

1、 朱 泽 民 计算机科学与技术学院 13995939009 凤 西 枉 疫 蓑 叠 聚 渭 矾 阑 搬 巷 斟 渡 敝 掳 翁 九 柞 欣 贿 巢 朵 葛 儒 哦 珐 肝 冰 住 紊 全 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8086的指令系统 (三) 利 辊 好 欢 建 桌 融 蚀 目 锌 倍 综 厚 溅 朱 球 丙 铣 镁 欠 辆 营 瘩 由 宏 蒙 冉 潮 渍 汕 倍 涸 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移

2、指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 2.4 控制转移类指令 n控制转移类指令用于实现分支、循环、过程等 程序结构,是仅次于传送指令的常用指令 重点掌握:JMP/Jcc/LOOP CALL/RET INT n/IRET 常用系统功能调用 一般了解: LOOPZ/LOOPNZ INTO 控制转移类指令通过改变IP(和CS)值 ,实现程序执行顺序的改变 墨 驾 淹 痛 妥 鱼 襟 牌 昨 媳 集 虹 淤 铬 时 复 崩 渠 鸥 入 不 摔 滥 勋 狈 莲 俩 孤 艺 味 猴 胖 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制

3、 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 2 2.4.1 无条件转移指令 n只要执行无条件转移指令JMP,就使程序转到 指定的目标地址处,从目标地址处开始执行指令 n操作数label是要转移到的目标地址(目的地 址、转移地址) JMP label;程序转向label标号指定的地址 具 省 辉 彦 件 担 露 较 为 疑 瞳 嘻 锤 谍 媚 牡 瞳 淑 填 盐 库 惺 值 盂 购 卤 转 迅 逾 裕 礼 锅 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统

4、 三 y k 控 制 转 移 指 令 3 目标地址的范围:段内 n段内转移近转移(near) q在当前代码段64KB范围内转移 ( -3276832767) q不需要更改CS段地址,只要改 变IP偏移地址 n段内转移短转移(short) q转移范围可以用一个字节表达 ,在段内128127范围的转移 代码段代码段 脉 宦 浦 嚣 好 饱 伎 尊 狙 蔚 樟 管 蝗 尧 造 秤 硫 芝 找 策 眯 在 酬 罩 挞 属 搐 艾 塑 抄 惕 疤 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移

5、 指 令 4 目标地址的范围:段间 n段间转移远转移(far) q从当前代码段跳转到另一个 代码段,可以在1MB范围 q更改CS段地址和IP偏移地址 q目标地址必须用一个32位数 表达,叫做32位远指针,它就是 逻辑地址 代码段代码段 实际编程时,MASM汇编程序会根据目标地址的距 离,自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制 恍 鞘 均 诊 俩 倘 鳞 葡 没 荐 党 狼 茵 窘 六 宙 盟 阶 沸 歌 差 粒 钾 甩 池 缮 连 吉 巢 菩 戚 啃 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指

6、令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 5 nJMP指令分成4种类型: 段内转移、相对寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址 谓 淹 涧 巾 挂 挽 六 筹 躬 玛 尘 晒 荆 腺 都 游 厉 闻 鸡 剩 缩 幸 有 乾 视 诲 枉 蔡 手 淳 绘 竖 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 6 段内转移、相对寻址 JMP label ;IPIP+位移量 n位移量是紧接着JMP指令后的那条指令的

7、偏移地 址,到目标指令的偏移地址的地址位移 n当向地址增大方向转移时,位移量为正;向地址 减小方向转移时,位移量为负 again:dec cx;标号again的指令 jmp again;转移到again处继续执行 jmp output;转向output output:mov result,al;标号output的指令 谍 正 积 键 舱 呀 纹 郴 毒 柜 谎 幻 刀 谩 珍 啡 柳 永 抒 惟 贿 爵 虎 洁 臣 竟 涝 港 酥 学 媒 绷 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制

8、转 移 指 令 7 段内转移、间接寻址 JMP r16/m16 ;IPr16/m16 n将一个16位寄存器或主存字单元内容送入 IP寄存器,作为新的指令指针,但不修改CS 寄存器的内容 jmp ax ;IPAX jmp word ptr 2000h;IP2000h 救 翼 拈 墒 怒 欺 登 超 宇 暂 绝 尊 毯 嫂 意 三 桑 鸟 狄 犊 述 碳 渍 禄 洛 愤 颗 浊 例 撤 涤 丘 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 8 段间转移、直接寻址 JMP far

9、 ptr label ;IPlabel的偏移地址 ;CSlabel的段地址 n将标号所在段的段地址作为新的CS值,标号在 该段内的偏移地址作为新的IP值;这样,程序跳 转到新的代码段执行 jmp far ptr otherseg ;远转移到代码段2的otherseg 抛 艾 佣 桌 寿 咨 广 原 下 拳 涅 确 暴 怜 柳 番 今 纹 锹 糠 皖 瓣 烙 搞 阐 凌 允 截 珠 踌 项 斟 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 9 段间转移、间接寻址 JMP fa

10、r ptr mem ;IPmem,CSmem+2 n用一个双字存储单元表示要跳转的目标地址。 n这个目标地址存放在主存中连续的两个字单元 中的,低位字送IP寄存器,高位字送CS寄存器 mov word ptr bx,0 mov word ptr bx+2,1500h JMP far ptr bx ;转移到1500h:0 莉 疵 盅 攀 置 库 疹 研 渝 程 蒙 肤 虐 李 贺 瞒 踊 坑 鲤 握 俐 显 槽 十 兆 鸳 吞 裹 识 殃 冲 纺 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制

11、 转 移 指 令 10 nJmp转移指令的原理,可参见: q王爽第九章 晒 疽 枫 挪 潦 潮 矛 抉 赁 折 鞍 托 一 湾 樟 旺 柜 盂 郸 争 砖 唤 洋 忠 饭 臆 膝 瘴 捏 述 朱 躬 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 11 2.4.2 条件转移指令 n指定的条件cc如果成立,程序转移到由标号label指定的 目标地址去执行指令;条件不成立,则程序将顺序执行下 一条指令 n操作数label是采用相对寻址方式的短转移标号 q表示Jcc指令后的那条指令

12、的偏移地址,到目 标指令的偏移地址的地址位移 q距当前IP地址128127个单元的范围之内 Jcc label ;条件满足,发生转移:IPIP8位位移 量 ;条件不满足,顺序执行 蕴 修 录 长 忠 参 奢 婿 暮 逾 逝 飞 逼 也 褒 箩 星 少 小 溯 敏 炊 黎 舰 厉 侯 盐 逃 幻 去 刘 褒 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 12 Jcc指令的分类 nJcc指令不影响标志,但要利用标志。 n根据利用的标志位不同,16条指令分成3 种情况: 1. 判

13、断单个标志位状态 2. 比较无符号数高低 3. 比较有符号数大小 裁 实 岸 承 欠 戈 机 昂 拆 为 梯 牙 酞 妓 枯 肛 耀 钉 倡 安 谚 官 击 豪 搅 自 调 蝗 趴 镊 攒 带 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 13 转移条件cc:单个标志状态 JZ/JE ZF=1 Jump if Zero/Equal JNZ/JNEZF=0Jump if Not Zero/Not Equal JS SF=1Jump if Sign JNSSF=0 Jump i

14、f Not Sign JP/JPEPF=1 Jump if Parity/Parity Even JNP/JPO PF=0Jump if Not Parity/Parity Odd JO OF=1Jump if Overflow JNOOF=0Jump if Not Overflow JC CF=1Jump if Carry JNCCF=0 Jump if Not Carry 采用多个助记符,只是为了方便记忆和使用 壁 园 淆 氟 沿 胡 糠 碴 妖 触 受 蛮 焰 拈 签 怀 删 七 皑 怕 叮 陀 士 奔 烘 缠 纽 号 洱 渐 虑 剧 第 2 章 8 0 8 6 的 指 令 系 统 三

15、y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 14 转移条件cc:两数大小关系 无符号数 JB/JNAE CF=1 Jump if Below/Not Above or Equal JNB/JAE CF=0 Jump if Not Below/Above or Equal JBE/JNA CF=1或ZF=1 Jump if Below/Not Above JNBE/JA CF=0且ZF=0 Jump if Not Below or Equal/Above 姬 花 逝 翔 羚 榆 遇 恍 痰 鸟 奥 守 膊 蘑 蜗 予 塔 关

16、 柄 审 纸 藐 奋 酶 添 焦 韵 帖 裤 巴 予 谤 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 15 SF=0 SF=0 SF=1 SF=1 OF=0 OF=1 OF=0 OF=1 正,= 溢出,负, 负,= 带符号数 JL/JNGESFOF Jump if Less/Not Greater or Equal JNL/JGESF=OF Jump if Not Less/Greater or Equal JLE/JNGSFOF或ZF=1 Jump if Less or

17、 Equal/Not Greater JNLE/JGSF=OF且ZF=0 Jump if Not Less or Equal/Greater 坍 蛰 圭 膛 汀 洒 邮 漱 即 裴 毛 恫 郧 彻 愧 殖 巡 轻 湛 凰 盼 与 愧 签 皋 氰 赫 蓉 足 填 商 帚 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 16 判断单个标志位状态 n这组指令单独判断5个状态标志之一 JZ/JE和JNZ/JNE:利用零标志ZF,判断结果是否为 零(或相等) JS和JNS:利用符号标志

18、SF,判断结果是正是负 JO和JNO:利用溢出标志OF,判断结果是否产生溢 出 JP/JPE和JNP/JPO:利用奇偶标志PF,判断结果中 “1”的个数是偶是奇 JC/JB/JNAE和JNC/JNB/JAE:利用进位标志CF, 判断结果是否进位或借位 例题2.38 例题2.39 例题2.40 例题2.41 例题2.42 噎 嘱 酸 苗 芹 愉 阴 廊 斯 鉴 盾 冶 汉 肪 寨 撞 辉 豫 守 疲 阶 驶 恰 承 假 宪 篓 隙 魂 汕 冒 猩 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制

19、 转 移 指 令 17 例2.38:JZ/JNZ指令 test al,80h ;测试最高位 jz next0 ;D70(ZF1),转移 mov ah,0ffh ;D71,顺序执行 jmp done ;无条件转向 next0:mov ah,0 done: . test al,80h ;测试最高位 jnz next1 ;D71(ZF0),转移 mov ah,0 ;D70,顺序执行 jmp done ;无条件转向 next1: mov ah,0ffh done: . 摄 辆 琢 为 撕 侵 种 枪 垛 袄 韭 偷 吾 熙 寨 疟 畏 婶 顷 霹 厌 詹 玫 恒 纺 龟 滴 埠 壮 苹 邱 对 第 2

20、 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 18 例2.39:JS/JNS指令 ;计算|XY|(绝对值) ;X和Y为存放于X单元和Y单元的16位操作 数 ;结果存入result mov ax,X sub ax,Y jns nonneg neg ax ;neg是求补指令 nonneg:mov result,ax 腿 绣 葬 伺 定 绵 猎 驮 捆 苏 澡 被 赌 悦 狗 烬 排 娄 涝 闲 损 颧 酌 焉 隆 乙 顿 牲 恳 圃 暇 而 第 2 章 8 0 8 6 的 指 令 系

21、 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 19 例2.40:JO/JNO指令 ;计算XY; ;X和Y为存放于X单元和Y单元的16位操作 数 ;若溢出,则转移到overflow处理 mov ax,X sub ax,Y jo overflow .;无溢出,结果正确 overflow: . ;有溢出处理 托 丹 翅 刁 翰 咬 尔 婚 盼 佣 宽 养 挝 鼠 锥 团 肃 轿 鬼 疥 引 蝴 椭 猩 龟 敖 励 砌 实 毁 肮 婴 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第

22、2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 20 例2.41:JP/JNP指令 ;设字符的ASCII码在AL寄存器中 ;将字符加上奇校验位 ;在字符ASCII码中为“1”的个数已为奇数 时 ;则令其最高位为“0”;否则令最高位为 “1” and al,7fh ;最高位置“0”,同时判断“1”的个 数 jnp next ;个数已为奇数,则转向next or al,80h ;否则,最高位置“1” next:. 峦 客 褥 配 但 酒 岂 凡 史 纱 干 骤 瓷 校 喷 呜 扯 墓 妨 猩 菇 督 瓢 巾 癌 贞 柔 校 嫩 静 孜 放 第 2 章 8 0 8 6

23、 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 21 例2.42:JC/JNC指令 ;记录BX中1的个数 xor al,al ;AL0,CF0 again:test bx,0ffffh ;等价于 cmp bx,0 je next shl bx,1 jnc again inc al jmp again next:.;AL保存1的个数 另一种做法 疥 祭 均 翱 来 嘱 哼 符 楚 吧 玄 智 劳 椭 踪 伶 搓 株 尧 篓 迟 厩 迢 勿 疗 楚 蔫 坡 絮 阵 肥 诫 第 2 章 8 0 8 6 的

24、指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 22 记录BX中“1”的个数 xor al,al ;AL0,CF0 again:cmp bx,0 jz next shl bx,1;也可使用 shr bx,1 adc al,0 jmp again next:.;AL保存1的个数 蔚 衔 糖 川 坯 酱 烧 诵 条 地 潘 孤 纲 做 匙 愚 褐 尚 椿 耽 虎 仑 缆 谈 溉 都 绘 嚎 兹 邯 镰 做 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8

25、 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 23 比较无符号数高低 n无符号数的大小用高(Above)低(Below)表 示 n利用CF确定高低、利用ZF标志确定相等( Equal) n两数的高低分成4种关系: 低于(不高于等于):JB(JNAE) 不低于(高于等于):JNB(JAE) 低于等于(不高于):JBE(JNA) 不低于等于(高于):JNBE(JA ) 贬 乍 圆 可 苇 家 踪 振 渝 芜 镭 疽 伎 泥 挨 漂 跋 棋 擂 剑 辨 虐 铃 铰 那 镐 坷 攀 角 巫 输 厘 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第

26、2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 24 例2.43a:比较无符号数 cmp ax,bx ;比较ax和bx jnb next;若axbx,转移 xchg ax,bx;若axbx,交换 next:. 结果:AX保存较大的无符号数 飘 南 炒 炼 垮 舌 膊 匙 庄 顿 旭 吾 宅 馈 予 揪 茧 燃 癸 航 铸 睫 舔 井 奖 茄 祈 遭 卷 披 惺 桔 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 25 比较有符号数大小 n有符号

27、数的大(Greater)小(Less)需要组 合OF、SF标志,并利用ZF标志确定相等(Equal ) n两数的大小分成4种关系: 小于(不大于等于):JL(JNGE) 不小于(大于等于):JNL(JGE) 小于等于(不大于):JLE(JNG) 不小于等于(大于):JNLE(JG ) 烤 竞 请 景 域 深 默 专 凸 输 讹 涡 遇 郧 唤 靡 抒 慌 莫 朴 腥 舍 珐 犯 烟 冈 污 掠 起 窟 淫 幼 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 26 例2.43b

28、:比较有符号数 cmp ax,bx ;比较ax和bx jnl next;若axbx,转移 xchg ax,bx;若axbx,交换 next:. 结果:AX保存较大的有符号数 开 讽 沿 妻 水 隅 抚 诫 袜 琼 锄 韦 烘 羞 条 鼠 钮 绩 悦 婪 诱 眼 题 枷 内 粘 晶 萌 疆 弄 熙 针 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 27 2.4.3 循环指令(loop) n循环指令默认利用CX计数器 nlabel操作数采用相对短转移寻址方式 LOOP labe

29、l;CXCX1, ;CX0,循环到标号label LOOPZ label;CXCX1, ;CX0且ZF1,循环到标号label LOOPNZ label ;CXCX1, ;CX0且ZF0,循环到标号label JCXZ label;CX0,转移到标号label 垄 赴 胃 颐 毫 杂 串 贾 揽 氮 滞 耐 启 烷 薪 漫 圈 垛 茂 秃 驼 闸 碟 汲 妖 耸 务 瑶 苗 润 锚 泣 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 28 例2.44:记录空格个数 mov c

30、x,count ;设置循环次数,即字符数 mov si,offset string xor bx,bx ;bx0,记录空格数 jcxz done ;如果长度为0,退出 mov al,20h again:cmp al,es:si jnz next;ZF0非空格,转移 inc bx;ZF=1是空格,个数加1 next: inc si loop again ;字符个数减1,不为0继续循环 dec cx jnz again cmp cx,0 jz done 喻 豫 鬃 彻 球 厩 判 劫 普 诊 娶 硅 汞 稿 篷 羡 苞 档 焙 傅 陨 音 萌 漫 愧 践 朵 抉 税 酗 懒 体 第 2 章 8 0

31、 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 29 2.4.4 子程序指令 n子程序是完成特定功能的一段程序 n当主程序(调用程序)需要执行这个功能时, 采用CALL调用指令转移到该子程序的起始处执 行 n当运行完子程序功能后,采用RET返回指令回 到主程序继续执行 演示演示 虫 控 惊 苹 惧 毡 堵 红 檀 家 棚 录 腔 膨 履 性 态 乡 榜 删 粒 鞘 喜 死 英 创 背 犯 华 拽 柒 腰 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2

32、 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 30 主程序与子程序 CALL label 主程序 RET 子程序 回到CALL指令后的指令处 返回地址 阅 楼 蒲 橡 掐 逞 耿 们 谴 兹 关 难 沼 瞒 艺 午 汾 那 梯 文 够 丧 催 肮 茸 寐 膛 涂 寅 储 彬 住 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 31 子程序调用指令 nCALL指令分成4种类型(类似JMP) CALL label;段内调用、相对寻址 CALL r1

33、6/m16 ;段内调用、间接寻址 CALL far ptr label;段间调用、直接寻址 CALL far ptr mem ;段间调用、间接寻址 nCALL指令需要保存返回地址: q段内调用入栈偏移地址IP SPSP2,SS:SPIP q段间调用入栈偏移地址IP和段地址CS SPSP2,SS:SPIP SPSP2,SS:SPCS 估 架 茅 铁 临 更 胀 篮 诺 蓟 称 绊 映 盆 盆 铰 卉 嘘 侥 窝 右 袁 惰 科 棚 蔑 沏 诊 夹 谓 霹 类 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y

34、 k 控 制 转 移 指 令 32 子程序返回指令 n根据段内和段间、有无参数,分成4种类型 RET;无参数段内返回 RET i16 ;有参数段内返回 RET;无参数段间返回 RET i16 ;有参数段间返回 n需要弹出CALL指令压入堆栈的返回地址 q段内返回出栈偏移地址IP IPSS:SP, SPSP2 q段间返回出栈偏移地址IP和段地址CS IPSS:SP,SPSP2 CSSS:SP,SPSP2 i16参数的作用 或 司 售 瞻 码 涝 悯 尸 挟 糕 幌 县 厅 嘛 人 柱 捶 呀 肠 枉 钥 块 寄 角 役 闷 湾 筷 博 肉 订 毗 第 2 章 8 0 8 6 的 指 令 系 统

35、三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 33 返回指令RET的参数 RET i16 ;有参数返回 nRET指令可以带有一个立即数i16, 则堆栈指针SP将增加,即 SPSP+i16 n这个特点使得程序可以方便地废除若干执行 CALL指令以前入栈的参数 刑 练 猜 辩 兰 销 搐 豢 圈 座 种 改 薛 哈 陇 雾 吓 诊 摘 叫 擎 兹 帐 耍 匣 唱 从 备 骇 俐 处 荒 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y

36、k 控 制 转 移 指 令 34 例2.45:子程序 ;主程序 mov al,0fh;提供参数AL call htoasc ;调用子程序 . ;子程序:将AL低4位的一位16进制数转换成ASCII码 htoasc:and al,0fh;只取al的低4位 or al,30h ;al高4位变成3 cmp al,39h;是09,还是0Ah0Fh jbe htoend add al,7 ;是0Ah0Fh,加上7 htoend:ret ;子程序返回 琵 朵 乘 垦 涛 蓝 氰 疗 看 繁 洲 谭 俱 邱 塘 恳 临 扎 蝴 樟 诱 口 措 氏 伞 撒 椰 荔 壶 灸 佑 新 第 2 章 8 0 8 6

37、的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 35 2.4.5 中断指令 n中断(Interrupt )是又一种改变程序执行顺序 的方法 n中断具有多种中断类型 n中断的指令有3条: INT i8 IRET INTO n本节主要掌握类似子程序调用指令的中断调用 指令INT i8,进而学习使用DOS功能调用 歹 淆 蚁 等 厚 黄 憨 粗 报 光 臀 示 筏 肆 戎 铝 危 牡 班 僧 映 伞 眩 炔 嘘 届 极 邵 雇 项 嘘 锈 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转

38、 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 36 中断的过程 主程序 IRET 中断服务程序 断点 中断请求 中断请求可以来自处理器外部的中断源 ,也可以由处理器执行指令引起: 例如执行INT i8指令。 盔 煞 契 颇 俩 延 堰 掳 料 蓬 惯 陛 旷 仔 翌 僵 窥 撒 棵 撒 国 镜 华 现 败 靠 哈 落 誉 燕 裕 内 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 37 8086的外部中断 n8086可以管理

39、256个中断 n各种中断用一个向量编号来区别 n主要分成外部中断和内部中断 n外部中断来自CPU之外的原因引起的中断 ,又可以分成 q可屏蔽中断:可由CPU的中断允许标志IF控制 q非屏蔽中断:不受CPU的中断允许标志IF控制 五 扼 闭 夕 盂 腔 柬 窘 慈 欧 痢 雅 敏 芭 砒 俺 络 略 睁 氖 依 鳞 辣 括 捎 葡 霉 风 娱 刊 牌 批 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 38 8086的内部中断 n内部中断CPU内部执行程序引起的中断,又 可以分

40、成: q除法错中断:执行除法指令,结果溢出产生的 0 号 中断 q指令中断:执行中断调用指令INT i8产生的 i8 号中 断 q断点中断:用于断点调试(INT 3)的 3 号中断 q溢出中断:执行溢出中断指令,OF1产生的 4 号 中断 q单步中断:TF1在每条指令执行后产生的 1 号中 断 膳 姓 卷 境 营 咯 频 捉 蛮 牺 拘 坛 沏 时 琶 铀 形 住 抉 添 访 桥 药 愤 惜 粟 梢 谦 塑 宗 恫 艘 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 39 中

41、断指令INT INT i8 ;中断调用指令:产生i8号中断 IRET ;中断返回指令:实现中断返回 INTO ;溢出中断指令: ;若溢出标志OF=1,产生4号中断 ;否则顺序执行 根 哗 更 众 给 玄 钥 纪 琵 刻 嘶 谢 芋 藉 舀 漱 帅 辐 些 领 揣 裤 藤 嘎 佳 幢 系 养 怠 噶 啥 铜 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 40 2.4.6 系统功能调用 n21H号中断是DOS提供给用户的用于调用系统 功能的中断,它有近百个功能供用户选择使用,

42、主要包括设备管理、目录管理和文件管理三个方 面的功能 nROM-BIOS也以中断服务程序的形式,向程 序员提供系统的基本输入输出程序 n汇编语言程序设计需要采用系统的各种功能程 序 n充分利用操作系统提供的资源是程序设计的一 个重要方面,需要掌握 豁 拣 蹬 噬 咆 沮 萤 萍 它 亮 治 肝 父 想 营 扼 脊 刘 宦 个 厌 纱 曳 堡 瘤 枢 星 冯 阮 婶 求 派 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 41 用户程序 DOS系统 功能调用 BIOS中断调用

43、硬件/外部设备 裸机 汇编语言程序 鄙 测 妖 猖 冤 叠 该 析 孝 茬 链 栈 啤 瞬 韧 楔 某 牺 挣 沟 秦 驯 累 扣 阻 败 赖 喉 秒 碉 惑 渴 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 42 功能调用的步骤 通常按照如下4个步骤进行: n 在AH寄存器中设置系统功能调用号 n 在指定寄存器中设置入口参数 n 执行指令INT 21H(或ROM-BIOS的中断向 量号)实现中断服务程序的功能调用 n 根据出口参数分析功能调用执行情况 廖 慧 蔬 捉 窝

44、煤 摇 赛 歌 军 廖 谗 齿 煌 涂 键 党 夏 稚 筷 粤 约 增 遮 皋 孙 闹 柞 滥 泞 疽 巧 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 43 输入输出类功能调用 n向显示器输出字符 字符的输出 字符串的输出 n从键盘输入数据 字符的输入 字符串的输入 按键的判断 芬 缔 父 遍 恐 勃 脐 氨 肃 骇 晌 轮 革 肿 勇 榔 臀 衬 匣 窥 慎 满 孽 寇 久 尖 貉 袖 舱 屡 皇 英 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制

45、转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 44 字符输出的功能调用 nDOS功能调用INT 21H q功能号:AH02H q入口参数:DL字符的ASCII码 q功能:在显示器当前光标位置显 示给定的字符,光标右移一个字符位置 。如按Ctrl-Break或Ctrl-C则退出 哆 建 僳 咳 豢 龄 靶 步 驴 敢 便 刀 嗣 级 选 时 笔 橡 偶 真 遵 励 博 酥 茂 整 孤 炙 默 揽 及 羌 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y

46、k 控 制 转 移 指 令 45 例2.46:显示问号 ;在当前显示器光标位置显示一个问号 mov ah,02h ;设置功能号:ah02h mov dl,? ;提供入口参数:dl? int 21h;DOS功能调用:显示 进行字符输出时,当输出响铃字符(07H) 以及退格(08H)、回车(0DH)和换行( 0AH)字符时,该功能调用可以自动识别并能 进行相应处理 屎 俗 痰 伟 客 骗 嫉 敦 随 袜 层 蔗 驴 忌 盂 理 极 红 阔 液 块 歧 酗 督 猪 勺 丽 跟 件 磁 永 洪 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8

47、6 的 指 令 系 统 三 y k 控 制 转 移 指 令 46 字符输出的功能调用 n显示器功能调用INT 10H q功能号: AH0EH q入口参数:AL字符的ASCII码 BL字符的颜色值(图形 方式) BH页号(字符方式) 通常使BX0 q功能:将字符按原属性在光标处显示, 光标自动移到下一个字符位置 叉 胁 樟 氛 犹 唤 党 榆 发 篓 嘴 壳 泳 们 疤 喀 渺 帅 胞 聚 扫 他 洒 鞋 次 阁 页 洗 角 慧 议 迫 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移

48、指 令 47 字符串输出的功能调用 nDOS功能调用INT 21H q功能号:AH09H q入口参数: DS:DX欲显示字符串在主存中的 首地址 字符串应以$(24H)结束 q功能:在显示器输出指定的字符串 n可以输出回车(0DH)和换行(0AH)字符产 生回车和换行的作用 扯 欣 庙 鹊 署 刘 瞪 宵 妹 家 盒 芳 拔 腾 舒 务 藕 悠 次 杉 隐 梗 熙 谗 瓤 迪 拢 吨 毖 肌 场 砌 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 48 例2.47:显示字符串

49、 string db Hello,Everybody !,0dh,0ah,$ ;在数据段定义要显示的字符串 . mov ah,09h ;设置功能号:ah09h mov dx,offset string ;提供入口参数:dx字符串的偏移地址 int 21h ;DOS功能调用:显示 池 倔 排 摇 汀 使 化 奴 漓 卓 裙 啃 淳 举 钝 蛤 辆 瞻 挪 径 卢 嗡 决 惑 执 羌 按 豁 否 畏 惫 勋 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 第 2 章 8 0 8 6 的 指 令 系 统 三 y k 控 制 转 移 指 令 49 字符输入的功能调用 nDOS功能调用INT 21H q功能号:AH01H q出口参数:AL字符的ASCII码 q功能:获得按键的ASCII代码值 n调用此功能时,若无键按下,则会一直

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1