微机原理05.ppt_第1页
微机原理05.ppt_第2页
微机原理05.ppt_第3页
微机原理05.ppt_第4页
微机原理05.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

上节课回顾 1 了解汇编语言概念 格式2 掌握汇编语言指令的7种寻址方式 三种数据存在形式 3 运用寻址方式判断指令对错 3 2数据传送指令 Intel8086 8088指令系统共有117条基本指令 按照指令功能 可分位6类指令 数据传送类指令 算术指令 逻辑移位指令 串操作指令 控制转移指令 处理机控制类指令 数据传送是计算机中最基本 最重要的一种操作 也是最常用的一类指令 传送指令是把数据从一个位置传送到另一个位置 除了标志寄存器传送指令外 其余传送类指令均不影响标志位 数据传送类指令实现CPU内部寄存器之间 寄存器与存储器之间 CPU与I O端口之间的数据传送 数据传送类指令共有14条 根据传送的内容可分成以下4组 1 通用数据传送指令 2 累加器专用传送指令 3 地址传送指令 4 标志寄存器传送指令 一 通用数据传送指令通用传送指令包括 传送指令MOV move 进栈指令PUSH pushontothestack 出栈指令POP popfromthestack 和交换指令XCHG exchange 指令格式及操作如下 1 MOV传送指令 把一个字节或字的操作数从源地址传送至目的地址 指令格式 MOVDST SRC指令执行操作 DST SRC 其中DST表示目的操作数 SRC表示源操作数 总结数可以从什么地方传送到什么地方 MOV指令传送信息可以从 寄存器到寄存器 立即数到寄存器 立即数到存储器 存储器到寄存器 寄存器到存储器 寄存器或存储器到除CS外的段寄存器段寄存器到寄存器或存储器 例3 11 下列MOV指令都是错误的MOV1234H AX 立即数不能用于目标操作数MOVCS AX CS不能用于目标操作数MOVIP AX IP不能用于目标操作数MOVDS 1234H 立即数不能直接传送给段寄存器MOVAL BX 原操作数与目标操作数的位数必须一致MOVBUF1 BUF2 不能在两个存储器单元之间传送数据MOVDS ES 不能在两个段寄存器单元之间传送数据注意 MOV指令的两个操作数 源 目的 均可采用不同的寻址方式 但是必须有一个为寄存器 MOV指令可以传送8位或16位的数据 但是必须与8位或16位寄存器相对应 MOV指令不允许把立即数作目的操作数 也不允许向段寄存器送立即数 IP CS不能当目的操作数 MOV指令不允许在段寄存器之间 存储器单元之间传送数据 MOV指令不影响标志位 2 堆栈操作指令堆栈是存储器中的一个特殊区域 主要用于存入和取出数据 堆栈是以 先进后出 的方式进行数据操作的 它在内存的堆栈段中 它的一端固定一端活动 称固定端为栈底 活动端为栈顶 堆栈的唯一出入口为栈顶 堆栈指针SP任何时候都指向栈顶 为了提高堆栈的访问速度 堆栈的操作以字为单位进行 当堆栈为空时 栈底和栈顶重合 随着入栈的内容的增加 栈顶的地址即SP的值减少 反之SP的值增加 1 PUSH进栈指令 把一个字的操作数从源地址压入到堆栈中 PUSH指令的格式 PUSHSRC指令执行操作 SP SP 2 SP 1 SP SRC 功能解释 先将SP的内容减2 再将源操作数的内容 一个字 压入 到堆栈栈顶的一个字中 操作数 寄存器 IP除外 或存储单元 注意点 源操作数只能是16位 而不能是8位的 画图举例说明 2 POP出栈指令 把一个字的操作数从栈中弹出到目的操作数中 POP指令的格式 POPDST指令执行操作 SCR SP 1 SP SP SP 2功能解释 先将堆栈栈顶的一个字 弹出 到目的操作数的一个字中 再将SP的内容加2 画图举例说明 例3 13 堆栈指令错误书写如下 PUSHAL 字节不能进栈PUSH1000H 立即数不能进栈POPAL 字节不能出栈对象POPCS CS不能作为出栈对象POP1234H 立即数不能出栈对象注意 8086堆栈操作必须是字数据 操作数不能是立即数 源操作数SRC 目的操作数DST 可以是存储器 通用寄存器和段寄存器 但是不能将数据弹至段寄存器CS 可以将段寄存器CS的内容压入到堆栈中 堆栈操作可以用于数据的暂存与恢复 子程序返回地址及中断断点地址的保护与返回 堆栈操作指令不影响状态标志位 3 XCHG交换指令XCHG交换指令能将源操作数的内容与目的操作数的内容进行交换 可以进行字节交换 也可以进行字交换 XCHG交换指令格式 XCHGOPR1 OPR2指令执行操作 OPR1 OPR2 XCHG交换指令允许的操作数及数据传送方向如图3 20所示 例3 14 已知 BX 1100H BP 3344H DI 0055H SS 2000H 23399H 1234H指令 XCHGBX BP DI 源操作数的物理地址 16 SS BP DI 20000H 3344H 0055H 23399H指令执行结果为 BX 1234H 2219BH 1100H 例3 15 以下XCHG交换指令都是错误的 XCHGAL BX 字节与字不能交换XCHGAX 1000H 寄存器与立即数不能交换XCHGDS SS 段寄存器之间不能不能交换XCHGCS IP CS与IP不能交换注意 XCHG指令实现两个操作数内容 8位或16位 的互换 两个操作数不能为段寄存器或立即数 并且不能同时为存储器操作数 则两个操作数至少有一个在寄存器中 CS IP寄存器的内容不能交换 XCHG指令不影响状态标志位 4 地址传送指令它可将存储器操作数的地址传送到16位目标寄存器中 这类指令有3种形式 1 LEA有效地址送寄存器指令格式 LEAREG SRC执行的操作 REG SRC指令把源操作数 存储器 的有效地址送到指定的16位通用寄存器中 地址传送指令不影响状态标志位 REG不能为段寄存器 SRC必须为存储器寻址方式 例3 18 LEA有效地址送寄存器指令LEAAX 5678H AX 5678H与MOVAX 5678H等价 2 3 LDS LES不讲以及书上的累加器专用指令在后面章节用到时再讲 标志寄存器传送指令标志寄存器传送指令包括 LAHF loadAHwithflags 标志送AH SAHF storeAHintoflags AH送标志寄存器 PUSHF pushtheflags 标志进栈 POPF poptheflags 标志出栈 本组指令用来保存标志寄存器和恢复标志寄存器 这组指令中的LAHF和PUSHF不影响标志位 SAHF和POPF由装入值来确定标志位的值 LAHF指令指令格式 LAHF执行的操作 AH PSW的低字节 SAHF指令指令格式 SAHF执行的操作 PSW的低字节 AH PUSHF标志进栈指令指令格式 PUSHF执行的操作 SP SP 2 SP 1 SP PSW POPF标志出栈指令指令格式 POPF执行的操作 SP SP 2 PSW SP 1 SP 回顾 习题 如果数据段中有一个符号地址DBUF为3100H 并它所对应的内存单元存放的内容是1234H 请分析一下程序 LEABX DBUFMOVAX BX PUSHAXXCHGAH ALMOVBX AXPOPAX请问AX BX的内容是否相同 3 3算术运算指令 算术运算指令用来执行算术运算 它们中有的是双操作数指令 有的是单操作数指令 双操作数指令是两个操作数中 除了源操作数为立即数的情况外 必需有个操作数在寄存器中 单操作数指令不允许使用立即数方式 算术指令分为加法指令 减法指令 乘法指令 除法指令和十进制调整指令 一 加法指令1 加法指令ADD add 指令格式 ADDdst src功能 把源操作数的值加到目的操作数中 dst src dst 操作数 目的操作数DST 通用寄存器 存储器 源操作数SRC 通用寄存器 存储器 立即数 注意点 两操作数必须类型一致 两操作数不能同时为存储器操作数 运算结果影响标志寄存器 AF CF PF OF ZF SF 例3 22 ADDAX BX AX AX BXADD BX DI 64H AX BX DI 64H AX 例3 23 ADDAX 0CFA8H若执行指令前 AX 5623H 则执行指令后 AX 25CBH 且CF 1 OF 0 SF 0 ZF 0 AF 0 PF 1 2 带进位加法指令ADC addwithcarry 指令格式 ADCdst src功能 把源操作数和进位标志位CF的值 0 1 一起加到目的操作数 dst dst src CF 操作数 目的操作数 通用寄存器 存储器 源操作数 通用寄存器 存储器 立即数 注意点 与ADD指令相同适用场合 举例说明 例3 16 有两个双字0A1365724H和9248B578H 计算两数之和 结果的高位放在DX中 低位放在AX中 程序段如下 MOVAX 5724HADDAX 0B578HMOVDX 0A136HADCDX 9248H该指令主要用于多字节数或多字数的相加运算 在多字节或多字相加时 先进行低字节或低字相加 用ADD指令实现 再进行高字节或高字相加 用ADC指令实现 在进行高字节或高字相加时必须加上低位的进位CF 3 加1指令INC increment 指令格式 INCdst功能 把操作数的值加1 dst dst 1 操作数 8位 16位通用寄存器或存储器 注意点 影响标志寄存器OF SF ZF AF PF 不影响CF 主要用于对计数器或地址指针的调整 常用在循环结构程序中 例3 25 INCAL AL的内容加1后 送回ALINCCX CX的内容加1后 送回CX加法指令包括 ADD加法 ADC带进位加法 INC加1同理得出相关的三个减指令 SUB subtract 减法 SBB subtractwithborrow 带借位减法 DEC decrement 减1 二 减法指令1 减法指令SUB指令格式 SUBdst src功能 从目的操作数中减去源操作数 dst dst src 注意点 影响标志寄存器AF CF PF OF ZF SF 注意是目的减源例3 27 SUBBX CX BX BX CX2 带借位减SBB指令格式 SBBdst src功能 dst dst src CF 注意点 影响标志寄存器AF CF PF OF ZF SF 例3 28 SBB BX SI AL BX SI BX SI AL CF3 减1指令DEC指令格式 DECdst功能 dst dst 1操作数 8位 16位通用寄存器或存储器 注意点 影响标志寄存器OF SF ZF AF PF 不影响CF 4 NEG求补指令指令格式为 NEGOPR执行的操作 OPR OPR 指令功能 对指定操作数求补运算 亦即把操作数按位求反 符号位也取反 后末位加1 因而执行的操作也可表示为 OPR 0FFFFH OPR 1 可以用来求负数的绝对值 例3 29 NEGDX若执行指令前 DX 9A80H 则执行指令后 DX 6580H CF 1 OF 0 SF 0 ZF 0 AF 0 PF 0 5 CMP比较指令指令格式为 CMPOPR1 OPR2执行的操作 OPR1 OPR2 指令功能 将目的操作数减去源操作数 结果不予保存 只是根据结果的状态设置状态标志位 例3 30 判断AL中存的是正数还是负数 CMPAL 0 AL和0比较JGEnext 若AL 0则转到next位置执行通常用在选择结构程序中 其后紧跟着条件转移指令 用来根据比较结果转向不同的程序分支 三 乘法指令乘法指令包括 MUL unsignedmultiple 无符号数乘法 IMUL signedmultiple 带符号数乘法 指令格式及操作如下 MUL无符号数乘法指令指令格式为 MULSRC执行的操作 8位数乘法 AX AL SRC 16位数乘法 DX AX AX SRC 指令功能 完成两个无符号数的乘法运算 用于字节运算和字运算 指令中只指定乘数 被乘数默认在寄存器AL或AX中 IMUL带符号数乘法指令指令格式为 IMULSRC执行的操作 与MUL相同 但必须是带符号数 而MUL是无符号数注意 在乘法指令中 目的操作数必须是累加器 字节运算为AL 字运算为AX 两个8位数相乘得到的是16位乘积 存放在AX中 两个16位数相乘得到的是32位乘积 存放在DX AX中 其中DX存高位字 AX存低位字 指令的源操作数可以使用除立即数方式以外的任何一种寻址方式 乘法指令运算结果只影响状态标志CF OF 对其他状态标志位无影响 状态不定 指令执行后 如果乘积的高一半是低一半的符号扩展 则OF CF 0 否则 OF CF 1 例3 21 假设 AL 0B5H BL 12H 分析下列指令的执行情况 MOVAL 0B5HMULBL指令执行前 AL 0B5H 为无符号数181 BL 12H 为无符号数18 执行指令时 字节相乘 AL BL 3258 0CBAH 指令执行后 AX 0CBAH OF CF 1例3 22 假设 AL 0B5H BL 12H 分析下列指令的执行情况 IMULBL指令执行前 AL 0B5H 为带符号数 75 BL 12H 为无符号数18 执行指令时 字节相乘 AL BL 1350 0FABAH 指令执行后 AX 0FABAH OF CF 1 四 除法指令除法指令包括 DIV unsigneddivide 无符号数除法 IDIV signeddivide 带符号数除法 注意位数 2倍 MUL无符号数除法指令指令格式为 DIVSRC执行的操作 字节操作数 16位被除数在AX中 8位除数为源操作数 结果的8位商在AL中 8位余数在AH中 表示为 AL AX SRC 的商 AH AX SRC 的余数字操作数 32位被除数在DX AX中 16位除数位源操作数 结果的16位商在AX中 16位余数在DX中 表示为 AX DX AX SRC 的商 DX DX AX SRC 的余数 IMUL带符号数乘法指令指令格式为 IDIVSRC执行的操作 与DIV相同 但必须是带符号数 商和余数也都是带符号数 且余数的符号与被除数的符号相同 注意 1 除法指令的寻址方式与乘法指令相同 指令中只指定除数 被除数默认在寄存器AX或 DX AX 中 2 该指令对所有状态标志位无定义 例3 23 假设 AX 0CBAH BL 12H 分析下列指令的执行情况 DIVBL指令执行前 AX 0CBAH 为无符号数3258 BL 12H 为无符号数18 执行指令时 进行字节相除 AX BL 3258 18 181 0B5H 余数为0 指令执行后 AH 0 AL 0B5H请自己分析用带符号数的除法指令执行后的结果 3 符号扩展指令在实际应用中 位数不是2倍关系怎么办 我们有时需要将操作数由字节型转换成字型 或由字型转换成双字型 这时不能简单地通过在高位补0的方法实现 因为带符号数在计算机中是以补码形式存放 扩展时 正数前补0 负数前全补1 为便于扩展 8086 8088提供了两条符号扩展指令CBW和CBD 1 字节扩展指令CBW指令格式 CBW功能 将AL中数的符号位扩展到AH中 若AL中的数为正数 则 AH 00 若AL中的数为负数 则 AH 0FFH 例3 24 分析下列程序段的执行过程 MOVAL 15 AL 0F1HCBW执行上述2条指令后 AX 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论