第三章8086指令系统-1.ppt

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

《第三章8086指令系统-1.ppt》由会员分享,可在线阅读,更多相关《第三章8086指令系统-1.ppt(66页珍藏版)》请在三一文库上搜索。

1、第三章8086指令系统 每种计算机都有一组指令集提供给用户使用,这组指令集称为 该计算机的指令系统。8086微处理器的指令系统具有8位和16位的 处理能力。80386、80486等CPU具有32位处理能力。本课程只讲 8086指令系统。 CPU只能执行二进制代码形式的机器指令,8086机器指令是变字 节指令,一条指令一般由16个字节组成(加上前缀字节,最长的 可为7字节指令)。 8086 机器指令代码由操作码和操作数代码两部分组成。 直接用机器指令编写程序是一件十分困难的事。通常是用汇编 语言编写程序,输入计算机后,由汇编程序将它翻译成机器语言程 序,计算机才能执行。因此这里对8086机器语言

2、格式不作更多的叙 述。本课程主要介绍汇编语言格式的8086计算机指令。 尽 傅 屿 裁 酣 排 候 垛 樊 斥 阅 晚 沁 屎 维 茶 涟 隔 漠 脐 姑 叛 长 访 甘 瘩 背 谬 浩 榷 奠 拳 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 3.18086指令的寻址方式 一条指令主要包括两方面内容:一是指令进行什么操作,这由 指令操作符表明。二是操作涉及的操作数存放在什么地方,操作的 结果存放在什么地方(有些指令不涉及操作数)。 8086指令涉及的操作数的存放地点可分为4类: 操作数直接存放在指令中,即指令本身就含有操作数。 操作数

3、在寄存器中,指令中指眀寄存器的名称。 操作数在内存单元中,指令中指明内存单元的地址。 当操作数在内存单元中,寻址所需的偏移地址又叫有效地址,用 EA表示,它是一个16位的无符号数。 数据存放在I/O端口中,指令中指明I/O端口的地址。 寻址方式就是指令中用于说明操作数所在地址的方法。8086可采 用许多不同的方法来说明操作数所在的地址。 伴 斋 屎 筏 墙 掠 讯 淘 媒 簿 俺 谈 说 涩 睦 缮 吻 每 敞 贴 酣 绘 往 担 帅 皖 图 殿 扁 辽 搔 姆 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 在后面要用到下列表示方法:

4、DS1000H,表示DS寄存器的内容为1000H。 (2300H)8CH,表示物理地址为2300H的内存单元的内容为8CH。 AX5000H表示数值5000H传到AX寄存器中 AX(8000H),表示物理地址为8000H的内存字单元的内容传到AX中。 (8000H)AX,表示AX的内容传到物理地址为8000H的内存字单元中。 AX(DS:5000H),表示逻辑地址为DS:5000H的内存字单元的内容传 到AX中。DS内容为段地址,5000H为偏移量) AL(DS:BX),表示逻辑地址为DS:BX的内存单元的内容传到AL中 。 AL(DS:BX5),表示逻辑地址为DS:BX5的内存单元的内容传到

5、 AL中。 妆 贱 够 拔 闭 涅 焦 熬 棋 杏 嗣 鞍 页 譬 疤 家 窝 塞 僻 恕 和 垮 驮 针 隙 辞 陷 桔 矾 肠 眺 轮 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 寻址方式可分为数据的寻址方式和转移地址的寻址方式两种。 3.1.1 数据的寻址方式 1、立即寻址方式 立即寻址方式即操作数直接存放在指令中,紧跟在操作码以后,作为指令的 一部分存放在代码段区域中。这种操作数称为立即数。它只能用于源操作数字段 ,不能用于目的操作数字段. 【例】MOVAL,42H 指令的执行:AL42H 42H为8位立即数,它是指令的一个组

6、成部分。指令执行后,AL=42H。 【例】MOVDX,2345H;指令的执行:DX2345H 2345H为16位立即数,它是指令的一个组成部分。指令执行后,DX=2345H。 剩 仙 推 缕 黔 缠 札 腻 弛 了 穷 烫 秽 黄 珊 汲 匹 斥 朵 换 攘 关 钩 鸳 垛 劲 圈 娠 季 鼎 处 涂 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 2、寄存器寻址方式 寄存器寻址方式即操作数在寄存器中,指令中指明寄存器名称;对于8位操作 数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH之一。在这种寻址方 式中,寄存器可以用作

7、源操作数,也可以存放目的操作数。 【例】MOVAX,BP 指令的执行:AXBP 如果指令执行前,AX=3664H,BP=2758H,则指令执行后AX=2758H,BP保 持不变。 【例】MOVCH,BL 指令的执行:CHBL 如果指令执行前,CH=64H,BL=58H,则指令执行后CH=58H,BL保持不变 。 立即寻址和寄存器寻址指令,执行速度最快,后面要讲到的存储器寻址指令 执行速度较慢。 旭 掘 宇 坡 集 逊 谦 龚 未 国 约 切 扛 筐 品 墩 弱 文 绚 读 叠 趟 骨 勾 厂 祸 须 酪 厚 幂 龄 惜 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8

8、 6 指 令 系 统 - 1 3、直接寻址方式 直接寻址方式中,操作数一般在内存数据段中,而操作数的有效 地址直接包含在指令中。操作数的物理地址是由数据段寄存器DS 的值乘以16再加上这16位的有效地址得到。 【例】MOVAX,2500H 指令的执行:AX(DS:2500H) 该指令默认DS中为数据段的段地址,指令括号指明的偏移量为 2500H,从而可计算出字单元的物理地址,指令执行把该单元内容 送到AX中。 如果指令执行前DS8000H,(82500H)02, (82501H)03,则指令执行后AX0302H 坠 舍 金 哄 濒 绪 黔 积 鞍 蜗 指 挽 梅 袋 埔 忧 奋 满 卧 曳 兄

9、 峪 治 窄 窍 苫 纸 存 棚 珐 突 缎 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 通常指令中不出现DS段寄存器名称,这种情况叫做默认段寄存器(或叫缺省 段寄存器)。但是也允许段超越,即允许操作数在代码段或堆栈段或附加段中, 只是必须在指令中指明。 【例】MOVAX,SS:2500H 指令的执行:AX(SS:2500H) 该指令将SS指明的堆栈段中偏移量为2500H的字单元的内容送到AX中。 直接寻址方式中,存储器操作数的有效地址常常用已经定义的变量名表示,此 时指令中可不写括号。 【例】MOVBH,ARRY 指令的执行:BH(

10、DS:ARRY) 指令中ARRY是已经定义的变量名。如果ARRY表示有效地址为3000H的字节 变量,则指令执行后,数据段中偏移量为3000H的字节单元的内容送到BH中。 着 帖 士 柑 谎 伺 宽 选 键 咖 于 卖 匿 砾 娟 挠 烂 照 吸 鹿 话 兹 涉 句 妆 祥 萤 扰 诸 龙 院 囱 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 4、寄存器间接寻址 操作数的有效地址EA在寄存器中,指令中指明寄存器名称。寄存器可以是下 列几个中的一个: BX、BP、SI、DI 如果指令中指定的寄存器是BX,SI,DI,则操作数在数据段中,段

11、地址由DS 提供。 如果指令中指定BP寄存器,则操作数在推栈段中,段地址在SS中。 【例】MOVAX,SI 指令的执行:AX(DS:SI) 若初始条件为DS=2000H,SI=1000H,则该指令源操作数的物理地址为: 2000H10H+1000H=21000H 爱 住 雍 估 默 湘 散 宏 姐 毡 租 煽 卧 腮 男 尽 餐 牢 温 绣 帐 洪 或 矽 凄 瘸 靳 呕 霓 沽 式 小 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 指令中也可以不使用缺省的段寄存器,而另指定其它的段寄存 器,这就是段超越。指令指令中写眀段超越前缀从而指

12、定其它的段 寄存器。如指令: MOVAX,ES:BX 原来BX默认的是DS段寄存器,现在用段超越前缀指定ES段寄存 器。用ES:BX计算出源操作数的物理地址。 寄存器间接寻址方式中EA可以表示为 BX BP SI DI EA 坞 睡 情 剥 拥 乖 抿 濒 相 攫 影 诗 债 转 次 草 筛 跋 焚 届 授 极 厅 熊 嚷 掐 整 促 底 杆 霄 悠 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 5、寄存器相对寻址 在寄存器相对寻址中,有效地址EA是位移量值和16位寄存器(BX、BP、SI、 DI之一)的内容之和。可表示为: BX BP

13、8位位移量 SI或16位位移量 DI 【例】MOVAX,CountBP AX(SS:BPCount) 指令中Count表示8位或16位位移量,如果Count8,BP20H,SS1F00H, 则存储器单元物理地址1F00H10H20H81F028H。 即:AX(1F028H) EA 敦 远 以 滩 街 坊 艺 葵 搅 苗 鸳 剔 灯 沮 眶 版 王 脂 仓 围 拭 拭 晤 椭 犯 词 拉 猫 庸 惩 藩 鲜 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 寄存器相对寻址指令可以有下面两种形式: 即:MOVAX,CountBP 或:MOVAX

14、,Count+BP 两种形式等价。 盘 批 腔 澡 侨 吃 览 泳 孰 廉 巫 假 荔 闺 眉 诱 贫 薪 浑 遵 铰 摇 兵 苏 鹃 信 兽 它 爹 配 爆 换 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 6、基址加变址寻址方式 基址加变址寻址方式中,操作数的有效地址是一个基址寄存器(BX或BP) 和一个变址寄存器(SI或DI)的内容之和。 EA BX BP SI DI 由基址寄存器决定哪一个段寄存器作为默认段寄存器。若基址寄存器为BX时 ,段寄存器使用DS;若基址寄存器为BP时,段寄存器则用SS; 若在指令中规定了段超越,也可用其

15、它段寄存器作地址基准。 【例】MOVCL,BXSI 指令的执行:CL(DS:BXSI) 指令中源操作数有效地址为BX内容与SI内容之和。 上面指令也可以写为:MOVCL,BX+SI 庞 妆 淖 彬 幸 星 叹 葡 膏 楞 孟 喻 硼 独 汉 掖 匙 眯 障 彪 旺 钱 押 侯 郡 拿 陶 校 搔 蛇 棱 扔 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 7、基址加变址相对寻址方式 这种寻址方式中,操作数的有效地址是一个基址寄存器(BX或BP)和一个变 址寄存器(SI或DI)的内容再加上指令中指定的8位或16位位移量之和。 由基址寄存器决

16、定哪一个段寄存器作为默认段寄存器。若基址寄存器为BX时 ,段寄存器使用DS;若基址寄存器为BP时,段寄存器则用SS; 可指定段超越。 EA BX BP SI DI 8位位移量或 16位位移量 速 籍 薛 陪 邵 忠 早 郴 抢 值 挝 醚 鲜 音 夷 骏 渐 路 斋 捉 庙 桐 呛 歹 桌 波 团 铣 挫 九 皋 迅 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 基址加变址相对寻址方式的例: MOVDX,CountBXSI 这条指令也可以写为: MOVDX,CountBX+SI 或: MOVDX,CountBX+SI 式中Count是变

17、量名,即位移量 指令的执行:DX(DS:BXSICount) 棍 夫 伙 轿 捷 旺 颓 招 禁 孕 技 贱 汉 诞 钨 达 治 堰 掣 犬 柏 桐 曙 箩 荫 卜 屠 怔 确 洽 瞬 玩 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 一般情况下使用默认的段寄存器来寻找操作数,有些情况下允 许使用非默认的段寄存器,则在指令中必须写明段寄存器名,这叫 作段超越。 操作类型默认段寄存器 可超越使用的段寄存器 用BP作指针的存储器寻址方 式 SSCS,ES,DS 存储器寻址方式 (BP作基址除外) DSCS,ES,SS 捧 赘 乒 括 捐 娩

18、 贫 簧 兴 乎 朋 耻 鹏 拆 守 嘛 隐 崎 也 蹿 笼 育 叶 颗 职 贩 燥 皋 辛 提 缸 黎 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 8、访问I/O端口数据的寻址方式 访问I/O端口数据使用输入/输出指令,有两种不同的寻址方式可用。 直接端口寻址方式:端口的号码是8位的立即数,可以访问0255号端口。 【例】OUT20H,AL 指令的执行:(端口20H)AL 指令把AL内容输出到地址为20H的端口中。 间接端口寻址方式:端口的编号取自寄存器DX,其访问端口范围为065535 。 【例】OUTAL,DX 指令的执行:AL

19、(DX为端口地址) 若DX3FFH,则指令把地址为3FFH的端口中内容输入到AL。 黑 罪 乐 蔗 账 宇 洁 十 焊 榨 柜 盾 唾 谜 秉 乙 例 卒 疏 箕 眯 榷 庇 韦 遁 镁 惮 势 谅 淀 衬 甥 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 8086指令系统关于转移指令和调用指令的寻址方式有4种: 段内直接转移寻址方式 段内间接转移寻址方式 段间直接转移寻址方式 段间间接转移寻址方式 在发生段内转移时,CS的值不变,只是IP的值发生改变。在发生段间转移时 ,CS和IP的值都发生改变。 3.1.2转移地址的寻址方式 驾 抑

20、 恃 擒 竭 抡 蔼 辖 倪 游 康 眨 霄 中 律 礼 偏 舜 款 蜕 侵 痈 巨 摄 迫 吩 锁 鲸 填 乡 僻 饿 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 1、段内直接转移方式 用这种方式时,指令中给出一个相对位移量,有效转移地址为IP的当前内容 再加上一个8位或16位的(有符号数)位移量,CS内容不变。因为位移量是相对 于IP来计算的,所以段内直接转移寻址也称为相对转移寻址。 段内直接转移方式既可以用在条件转移指令中,也可以用在无条件转移指令中 ,同样也可以用在调用指令中。但是在条件转移指令中,只能用8位位移量。 【例】请

21、看如下指令。 JMPA2;无条件转移到标号A2 指令执行:IPA2 JNZA3;ZF标志为0则转移到A3,否则顺序执行 指令执行:如果ZF标志为0,则IPA3 否则IPIP2(条件转移指令是2字节指令) 悄 懒 琐 眯 柱 奇 壶 谴 阉 科 谜 炕 钾 季 韧 袁 臆 蛇 辞 靖 二 静 器 笛 矽 周 锥 茫 篆 癌 劝 酉 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 2、段内间接转移方式 用段内间接转移方式时,转移地址(16位)总是在16位通用寄存器中或者在 内存单元中,而对内存单元则可以用前面所述的对存储器数据的各种寻址方式进

22、 行访问。 段内间接转移寻址方式只适用于无条件转移指令。 【例】请看如下指令。 JMPCX;把BX内容传给IP,即转移到BX所指出的地址 执行指令:IPCX JMPWORDPTRSI;从DS:SI指定的内存字单元取出转移的有效地址传 给IP,实现转移 执行指令:IP(DS:SI) 笔 盂 圾 呈 钞 刮 赋 唐 玛 漆 暮 第 帝 她 抗 绳 瘩 冬 币 鬼 矣 蓬 剥 嘘 累 身 瘸 卒 缓 罗 邯 鳖 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 3、段间直接转移方式 用段间直接转移方式进行寻址时,指令中要给出转移地址的段 值和偏移

23、量,在汇编语言中通常使用FARPTR操作符表明是段间 转移。段间转移只能是无条件转移指令。 【例】请看如下指令。 JMPFARPTRA2;转移到另一个代码段中标号为A2的地方 执行指令:CS目标段地址,IP目标偏移地址 姆 苛 辟 绝 沛 腰 途 钳 絮 畦 阮 亏 移 验 沧 歧 娩 疥 忍 晚 恒 后 劲 饼 示 崖 呕 膏 姨 幂 呜 欲 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 4、段间间接寻址方式 使用段间间接寻址方式时,转移的目标地址存放在数据段的双 字单元中,可以使用前面所讲的对存储器数据的各种寻址方式来访 问。指令执

24、行时把双字单元的内容传送到CS和IP。 【例】 JMPDWORDPTR1000H;把数据段中有效地址为1000H的 双字单元中的段地址及偏移地址传给CS和IP,产生转移。DWORD PTR是双字操作符,表示传送2个字数据。 执行指令:CS(DS:1002H),IP(DS:1000H) 挥 瞅 浪 稗 弊 谗 谗 毛 桅 抗 艳 划 允 检 吞 逊 绸 总 营 秩 汞 涸 战 佩 预 昏 苏 聚 郭 正 档 宰 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 又例,用前面讲到的寄存器间接寻址方式从内存取段间转移的目标 地址: JMPDWOR

25、DPTRBX 该指令由BX指定数据单元地址,从中取段地址及偏移地址传给CS 和IP,产生段间转移。 定 谩 组 帕 惰 明 菩 篷 攫 虫 痛 钩 霓 寨 转 编 丫 碳 牛 嘴 闲 疯 霞 戳 咱 瑚 卯 耕 鸦 美 幽 睛 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 8086的指令可分为以下5类: 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 控制转移指令 3.28086指令系统 填 撤 懈 剂 曳 辗 疤 蓝 抛 孤 熏 丰 虫 粮 呸 智 诞 丙 阁 胚 槛 补 俘 峙 夜 薪 叠 纲 善 掸 效 写 第 三 章

26、 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 数据传送指令又可分为5种: 通用数据传送指令 MOV指令、PUSH指令、POP指令和XCHG指令 累加器专用传送(输入/输出数据传送)指令 IN指令、OUT指令和XLAT指令 地址传送指令 LEA指令、LDS指令和LES指令 标志寄存器传送指令 LAHF指令、SAHF指令、PUSHF指令和POPF 字长扩展指令 CBW指令、CWD指令 3,2.1数据传送指令 晚 谐 疹 膏 雏 搬 挎 汾 迂 糟 订 旁 寐 历 二 唬 贯 协 昧 熄 雄 叔 培 剐 涂 秤 即 垒 汉 特 拦 末 第 三 章 8

27、0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 一、通用数据传送指令 8086有四种通用数据传送指令,即: 传送指令MOVE、堆栈指令PUSH和POP、交换指令XCHG 1、传送指令MOV 格式:MOVDST,SRC DST表示目标操作数,SRC表示源操作数 例如:MOVAL,20H MOV2000H,AX MOVDS,AX MOVAL,AREAIBP MOVCH,AL 注意:8位操作数只能传送给8位操作数,16位操作数只能传送给16位操作数。 糊 奉 丧 臀 彪 旱 坠 澜 鸿 缄 爵 瞳 洱 先 舟 宦 组 妈 精 跺 纶 君 楷 甚 碗 消 肉 改

28、 恭 赊 豪 娜 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 MOV允许的源操作数和目的操作数的组合见下图 漱 零 咋 从 蓄 佑 理 绊 傣 革 隅 踏 喊 业 刹 收 醋 灿 挂 轻 冈 拖 简 顾 呼 孟 册 拂 黄 灵 扶 盂 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 要注意以下几点: 这里的寄存器不包括IP。 CS段寄存器不能作目的操作数。 立即数寻址方式不能作目的操作数。 立即数不能直接送至段寄存器,段地址必须通过通用寄存器(如AX)送 到段寄存器。 8位操作数

29、只能传送给8位操作数,16位操作数只能传送给16位操作数。 不能在两个存储单元之间直接传送数据,只能间接通过CPU内部寄存器 来实现。 悼 溜 挝 秦 揭 闪 暗 唐 杖 昼 瘫 纳 凯 癸 踌 眉 湿 浸 疗 岁 俭 兑 拆 渊 摔 验 织 渣 小 鳞 圭 囊 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 【例】请看如下指令。 MOVAX,0200H;立即数传送到AX MOVDS,AX;AX内容传送到DS 不允许用MOV指令在两个存储单元之间直接传送数据,而应间接通过 CPU内部寄存器来实现。 【例】要把AREA1地址单元的内容传送到

30、AREA2单元: MOVAL,AREA1 MOVAREA2,AL 访问存储器操作数时,只有使用BP为指针时默认的段寄存器是SS,其它 情况默认段寄存器为DS。 操作类型默认段寄存器 可超越使用的段寄存器 用BP作指针的存储器寻址方 式 SSCS,ES,DS 存储器寻址方式 (BP作基址除外) DSCS,ES,SS 崩 琐 忆 忠 瘫 溜 包 居 拱 顶 咒 叫 纺 肥 吱 耪 拒 缅 叠 耕 尘 查 台 逐 甚 咖 翘 凭 撞 滔 叛 戚 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 2、堆栈操作指令PUSH和POP 堆栈是以“先进后出

31、”方式工作的一个存储区,它必须存在于堆栈段中, 堆栈段首址由段寄存器SS的值所确定。 堆栈有一个堆栈指针寄存器SP,SP的内容在任何时候都指向当前的栈顶。 在子程序调用和中断处理过程时,分别要保存返回地址和断点地址;子程 序返回和中断处理返回时,则要恢复通用寄存器的值,子程序返回或中断返回时 地址或断点地址恢复到指令指针寄存器中。这些功能都要通过堆栈指令来完成。 推入堆栈指令,格式:PUSHSRC 【例】 PUSHAX;SP的值先减2,再将AX的内容传到SP指到的单元(栈顶),叫 作推入堆栈。 PUSHDS;将DS的内容推入堆栈 PUSHCS;将CS的内容推入堆栈 PUSHBX+DI;将BX+

32、DI所指的内存字单元的内容推入堆栈。 啮 赴 修 寨 茸 兼 溺 挺 紧 吮 芽 徒 醛 募 孪 庐 锄 锰 游 敞 逸 荆 刻 椅 截 寄 衫 遣 恩 棋 递 双 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 弹出堆栈指令,格式:POPDST 【例】 POPBX;将栈顶字单元内容传到BX,然后SP的值加2,叫作弹出堆栈 POPES;将栈顶字单元内容弹出送ES 使用时堆栈操作指令有几点必须注意: 8086的堆栈操作总是按字进行的,也就是说,没有PUSHAH、POPBL这样 的字节操作指令。也不能把立即数推入堆栈,没有PUSH2000H这

33、样的指令。 CS寄存器的值可以推入堆栈,但反过来,不能从堆栈中弹出1个值到CS寄存器 。 每执行一条推入堆栈指令,堆栈地址指针SP先减2,再把数据传送到堆栈指针 指到的栈顶。执行弹出指令时,正好相反,先把栈顶数据取出,然后栈顶指针SP 的值加2。 如下面的示例: 审 履 幂 糠 殖 洲 手 汐 揽 笑 送 主 膊 旺 轰 勒 颓 碉 韶 君 漠 辞 闽 是 磊 车 萄 瞻 杂 技 允 侄 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 物理地址 23000H 24000H SS2300H SP1000H 设堆栈的初始情况如图:SP初始值为

34、1000H,AX1234H 贱 区 花 母 泛 佃 默 锄 准 触 住 既 谓 姆 宽 炊 想 蛹 湖 闪 呛 腾 篷 幻 龟 斩 聚 墙 刹 伏 萍 颐 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 物理地址 23000H 23FFEH 24000H SS2300H SP0FFEH 执行指令PUSHAX后, 堆栈如下: 34H 12H PUSHAX指令执行过程: SPSP2 (SS:SP)AX 饿 皱 闺 漱 碎 落 汇 吁 悲 摆 郁 野 分 施 休 霞 懒 纶 釉 凳 殆 瀑 刁 傍 换 智 桓 霉 察 胚 底 筏 第 三 章 8

35、 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 3、数据交换指令XCHG 格式:XCHGOPR1,OPR2 OPR1和OPR2表示第一和第二个操作数 交换指令XCHG可以实现两个字节内容交换,也可以实现两个字内容交换。 交换过程可以在CPU的通用寄存器之间进行,也可以在通用寄存器和存储单 元之间进行,但不能在两个存储单元之间执行数据交换过程,段寄存器和IP寄存 器内容不能作为交换指令的操作数。 【例】 XCHGAL,BL;AL和BL之间进行字节交换 XCHGBX,CX;BX和CX之间进行宇交换 XCHG2530H,CX;CX中的内容和地址为DS:253

36、0H的字单元的内容交换 锨 怨 聋 妙 诸 旁 菊 怜 爬 呸 沙 叶 曼 冤 花 厂 敷 颧 捌 兹 倒 后 制 忻 串 沃 泳 秦 凄 咸 逼 朋 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 二、累加器专用传送指令 在8086指令系统中,累加器作为数据传输的核心,有两类指令是专门通 过累加器来执行的,即: 输入输出指令IN和OUT 换码指令XLAT 1、输入输出指令IN和OUT 格式:INAL,PORT8 INAX,PORT16 OUTPORT8,AL OUTPORT16,AX PORT8表示8位I/O端口,PORT16表示16位

37、I/O端口 输入输出指令只能使用累加器。对I/O端口只可以使用直接寻址和DX寄 存器间接寻址。 屯 就 章 淡 惊 拍 拯 害 对 篆 佳 夫 护 牧 妊 厘 团 敌 崩 羚 棕 鸽 洗 首 梨 恍 琅 贫 恍 孵 鸯 棚 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 直接寻址的例: INAL,20H;AL(端口20H) INAX,70H;AX(端口70H) OUT64H,AL;(端口64H)AL 下面是间接寻址的输入输出指令的例子(假定执行这些指令前,在DX 寄存器中已经用传送指令设置好了端口号): INAL,DX;AL(DX所指的端

38、口) OUTDX,AL;(DX所指的端口)AX 使用输入输出指令时,要注意: 只能用累加器,不能用其他寄存器代替。 用直接输入输出指令时,寻址范围为0255,即FFH是允许使用的最 大端口号。 对端口的间接寻址只能使用DX寄存器 摘 瘁 粉 卓 虱 妄 烛 靡 贼 硅 梳 膘 身 鹃 形 活 勉 喝 鼓 珊 瀑 衬 呛 腺 撒 非 渠 垢 辰 裁 旱 谋 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 2、换码指令XLAT 格式为:XLAT;操作数是隐含的。 执行:AL(DS:BXAL) 它可以根据AL的值去查表,取得内存表格中的某一个值

39、,一般用来实 现编码制的转换,所以叫换码指令。 使用换码指令时,要求BX寄存器指向表的首地址,AL中为表中某一项与 表格首地址之间的位移量。指令执行时,将BX和AL中的值相加,把得到的 值作为有效地址,然后将此地址单元的值取到AL中。 【例】内存存放着字节数据表:0,1,4,9,16,25,36,49,64,81。 设BX已经指到数据表的首地址,AL5,则: XLAT;指令执行后,AL=25 上面是一个查平方表的例。 穗 试 宴 邦 炊 滇 寄 敞 绝 镇 铬 祭 婿 赣 兑 猿 衬 逮 偏 娃 烫 砍 贵 增 廓 碰 余 入 每 网 盼 守 第 三 章 8 0 8 6 指 令 系 统 - 1

40、 第 三 章 8 0 8 6 指 令 系 统 - 1 三、地址传送指令 8086指令系统中,有3条专用于传送地址的指令: 取有效地址指令LEA 地址指针装入DS和另一个寄存器的指令LDS 地址指针装入ES和另一个寄存器的指令LES 1、取有效地址指令LEA LEAREG16,SRC REG16表示一个16位的通用寄存器,SRC是一个存储器寻址方式。LEA指令的功 能是将SRC的偏移地址送到一个寄存器。 【例】请看如下指令。 LEAAX,ARRY;将变量ARRY的偏移地址传送给AX 此指令与下面的传送指令比较: MOVAX,ARRY;将变量ARRY存储的数据传送给AX 窗 芍 汉 恶 汹 急 帚

41、 援 梗 煮 珐 描 炯 稽 樟 盏 指 缘 鸦 抚 了 皮 叭 柑 着 墨 遂 眨 鼠 更 妆 蕴 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 LEA指令要求: 源操作数是5种存储器操作数寻址方式之一,但是它传送的不是存储单元 的内容,而是存储单元的地址。 目的操作数必须为一个16位的通用寄存器。 这条指令常用来设置一个寄存器作为地址指针。 例: LEABX,BP+SI;执行后,BXBP+SI LEASP,0482H;执行后SP0482H 湿 镐 镶 践 恤 洛 乃 网 愁 忠 扬 虐 剪 迄 卜 撤 奴 诀 赶 式 痴 混 境 拇

42、 祷 盈 钙 蕊 痞 丽 的 幼 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 2、将地址指针装入DS和另一个寄存器的指令LDS 格式:LDSREG16,SRC LDS指令的功能是把内存中的2个字单元的内容(该内容是一个逻辑地址 ,即段地址和偏移量)传送到DS和REG16中。 【例】设2130H2133H这4个字节单元中存放着一个逻辑地址,2130H和 2131H中为地址的偏移量,2132H和2133H中为地址的段值,执行指令: LDSDI,2130H 使2130H和2131H中的偏移量送到DI,2132H和2133H中的段值送到DS。

43、 2130H 2131H 2132H 2133H 12H 34H 56H 78H DS7856H DI3412H 系 菲 愁 妥 多 良 佩 鞋 玖 嘘 靳 杯 挠 井 宠 朵 虽 爱 矮 稻 凭 籽 挚 伙 够 烹 篇 柜 乏 栽 伦 闷 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 3、将地址指针装入ES和另一个寄存器的指令LES 格式:LESREG16,SRC LES指令和LDS指令类似,只是LES是将段地址装入ES和另一个寄存器。 如图所示,在数据段有效地址为5062H处,存放有4个字节的逻辑地址。执 行指令:LESBX,506

44、2H 指令执行后,将逻辑地址取到ES和BX,ES7C30H,BX5AB0H LDS和LES这2条指令中,源操作数只能使用存储器寻址方式,可以使用直接寻址 ,寄存器间接寻址和寄存器相对寻址。 匿 阮 踢 锤 赶 梗 瘴 侗 寡 皂 该 蹲 茂 助 缸 邀 奄 狈 掏 醋 芳 屁 掖 遭 愉 贱 肃 樊 疲 街 摊 陛 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 四、标志传送指令 标志寄存器送AH指令LAHF AH送标志寄存器指令SAHF 标志寄存器内容推入堆栈指令PUSHF 标志寄存器内容弹出堆栈指令POPF 1、标志寄存器送AH指令L

45、AHF 格式:LAHF;操作数是隐含的 执行AHFLAGS低8位 具体地说,就是将SF(符号标志)、ZF(零标志)、AF(辅助进位标志)、PF(奇 偶标志)和CF(进位标志)传送到AH寄存器的相应位,即D7、D6、D4、D2 和D0位。 2、AH送标志寄存器指令SAHF 格式:SAHF; 执行:FLAGS低8位AH,SAHF指令将AH寄存器的内容传送到标志 寄存器的低8位。 晒 防 馒 麻 揽 渗 熄 毯 垢 蚕 货 划 留 梳 涤 遥 壶 临 柏 国 阂 怕 备 较 绩 教 吃 剧 抓 灾 宏 审 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统

46、 - 1 3、标志寄存器内容推入堆栈指令PUSHF和弹出堆栈指令POPF 格式:PUSHF 执行:SPSP2 (SS:SP)FLAGS 即:PUSHF指令将栈指针SP的值减2,然后把标志寄存器的值推入堆栈顶 。标志寄存器的值不变。 格式:POPF 执行:FLAGS(SS:SP) SPSP2 POPF指令在执行时从堆栈中弹出一个字送到标志寄存器中然后堆栈指针 SP的值加2。 纶 黍 色 恨 艾 圭 诀 幢 疟 睛 钙 浙 漆 塞 肃 送 舆 邮 峭 页 嗅 蔓 稼 喀 皱 皑 镭 失 庶 见 眉 挚 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统

47、- 1 五、字长扩展指令 1、字节转换为字指令CBW 格式CBW;操作数隐含 执行:把AL的符号位扩展到AH 2、字转换为双字指令CWD 格式:CWD;操作数隐含 执行:把AX的符号位扩展到DX,形成DX,AX双字 这两条指令适合于补码数的扩展。无符号数的扩展只要高字节扩展全0即可 。 例:设AL89H是补码数 执行指令CBW后,AXFF89H 纫 僳 俩 毫 蠢 凸 切 僻 卫 彤 妮 危 撂 匝 烛 炒 宿 斌 俱 舅 戚 咋 胎 伐 访 葛 梁 宣 芜 俘 疯 靖 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 8086数据传送指令

48、共5种: 通用数据传送指令 MOV指令、PUSH指令、POP指令和XCHG指令 累加器专用传送(输入/输出数据传送)指令 IN指令、OUT指令和XLAT指令 地址传送指令 LEA指令、LDS指令和LES指令 标志寄存器传送指令 LAHF指令、SAHF指令、PUSHF指令和POPF 字长扩展指令 CBW指令、CWD指令 在数据传送指令中,只有POPF指令和SAHF指令会影响标志寄存器,其 余都不影响标志寄存器。 逮 夕 收 拓 粉 二 几 氢 退 斤 勉 帧 烦 铃 愈 爵 寞 禾 毖 邓 兢 介 韶 尖 箩 炙 彬 称 半 彝 耽 谭 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三

49、 章 8 0 8 6 指 令 系 统 - 1 算术指令包括: 加法指令 ADD指令、ADC指令和INC指令 减法指令 SUB指令、SBB指令、DEC指令、NEG指令和CMP指令 乘法指令 MUL指令和IMUL指令 除法指令 DIV指令和IDIV指令 十进制调整指令 AAA指令、DAA指令、AAS指令、DAS指令、AAM指令和AAD指令 3.2.2算术指令 灵 裔 斑 权 奖 寡 拯 窥 徽 胞 授 步 纂 钨 遏 萄 汰 庞 吴 被 殆 畏 蒋 滇 屏 束 弧 暑 淘 瞬 誉 陨 第 三 章 8 0 8 6 指 令 系 统 - 1 第 三 章 8 0 8 6 指 令 系 统 - 1 一、加法指令 加法指令包括: 不带进位的加法指令ADD 带进位的加法指令ADC 加1指令INC ADD和ADC指令是双操作数指令,INC指令是单操作数指令。 加法指令操作数不能使用段寄存器,只可以有一个操作数是存储器操作数,立 即数只能作源操作数。 1、不带进位位的加法指令ADD 格式:ADDDST,SRC 执行:DSTDSTSRCF ADD用来执行2个数的相加。8位数加8位数,和数保留8位数。1

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

当前位置:首页 > 其他


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