微型计算机原理与汇编语言 第4章-指令系统.ppt_第1页
微型计算机原理与汇编语言 第4章-指令系统.ppt_第2页
微型计算机原理与汇编语言 第4章-指令系统.ppt_第3页
微型计算机原理与汇编语言 第4章-指令系统.ppt_第4页
微型计算机原理与汇编语言 第4章-指令系统.ppt_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

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

文档简介

4 1 38086 8088指令系统 8086 8088CPU指令系统包含有133条基本指令 按其功能可以分为6类 它们是 数据传送类指令 算术运算类指令 逻辑运算与移位类指令 字符串指令 控制转移类指令 处理器控制类指令 用到的符号意义如下 DST 目的操作数SRC 源操作数OPR 操作数MEM 存储器操作数REG 寄存器操作数 16位的AX BX CX DX BP SP SI DI或8位的AH AL BH BL CH CL DH DL SEG 段寄存器 16位的CS DS ES SS Data 立即数port 8位的端口地址DST ADDR 转移的目标地址COUNT 计数器 一 数据传送类指令 数据传送类指令将数据 地址或立即数传送到寄存器或存储器单元中 它又可分为通用数据传送指令 累加器专用传送指令 地址传送指令和标志传送指令等四组 一 通用数据传送指令1 最基本的传送指令指令格式及操作 MOVdst src dst src dst是目的操作数Src是源操作数 需说明一点 对于代码段寄存器CS和指令指针寄存器IP 通常无需用户利用传送指令改变其中的内容 但是CS可以作为源操作数 16位 说明 DST和SRC的组合关系是 REG MEMREG REG MEMSEG CS不能做目的操作数 不能MEMMEM 不能SEGSEG 不能SEG data MOV不改变源操作数 不影响标志位 例 MOVAL 80HMOV BX 1020HMOVAX BXMOVDH ALMOV BX 10H DXMOVDX BX SI MOVSS AXMOVSS 1000H MOVAX DSMOV 3020H DS 2 堆栈操作指令堆栈操作指令是用来完成压入和弹出堆栈操作的 压入堆栈指令指令格式及操作 PUSHsrc SP SP 2 SP 1 SP src 弹出堆栈指令指令格式及操作 POPdst dst SP 1 SP SP SP 2 源操作数src和目的操作数dst可以是REG MEM SEG 且必须是16位的操作数 但不能是立即数 说明 堆栈按后进先出原则组织 堆栈操作以字为单位进行 目的操作数dst不可以是CS 例 PUSH BX DI PUSHAXPUSHCSPOP BX SI 1020H POPBXPOPDS例 已知 AX 1234H BX 5678H 分析下面程序段的执行过程 1PUSHAX2PUSHAXPUSHBXPUSHBXPOPAXPOPBXPOPBXPOPAX 3 交换指令XCHG Exchange 格式 XCHGOPR1 OPR2执行操作 OPR1OPR2说明两个操作数中必有一个是寄存器REGREG MEM例 XCHGBX BP SI XCHGDL BLXCHGBX CXXCHG 2000H AHXCHG 2000H BXXCHGDXXCHGBL 二 累加器专用指令这类指令中的一个操作数必须是累加器 累加器操作数可以是8位的 也可以是16位的 1 输入 输出指令输入输出指令可以分为两大类 一类是直接端口地址的输入 输出指令 一类是通过DX寄存器间接端口地址的输入 输出指令 输入指令 直接寻址的输入指令指令格式及操作 INacc port acc port 间接寻址的输入指令指令格式及操作 INacc DX acc DX 输出指令 直接寻址的输出指令指令格式及操作 OUTport acc port acc 间接寻址的输出指令指令格式及操作 OUTDX acc DX acc 2 字节转换指令指令格式及操作 XLATsrc table AL BX AL XLAT指令是用来将一种字节代码转换成另一种字节代码 常用该指令进行查表操作 使用前先建立一个字节表格 表格的首址存入BX 要转换的代码 即相对于表格首址的位移量 放入AL 然后执行XLAT 在AL中得到转换以后的代码 XLAT指令还可以有以下几种表示形式 XLAT 不写操作数XLATB 有B就不允许再写操作数 XLATES src table 重设段寄存器为ES 例 在内存的数据段有一张16进制数的ASCII码表 其首地址为Hex table 如下图所示 欲将十六进制数0AH转换成ASCII码 则可用以下几条指令实现 MOVBX OFFSETHex tale BX 表首址MOVAL 0AH AL 十六进制数AXLATHex table 查表转换 BX 1000H AX 000AH Hex table 三 地址传送指令1 取有效地址指令指令格式 LEAreg16 mem此指令的功能是将存放源操作数的16位偏移地址 即有效地址EA 送到一个16位的通用寄存器中 即源操作数必须是一个存储器操作数 目的操作数必须是一个寄存器操作数 例如 LEABX bufferLEAAX BP DI LEADX bety BX SI 注意LEA指令和MOV指令的异同 比较下面两组指令 不同 LEABX buffer 将存储器buffer的偏移地址送到BXMOVBX buffer 将存储器buffer的内容传送到BX相同 LEABX bufferMOVBX OFFSETbuffer以上两条指令都是将存储器buffer的偏移地址送到BX 其中OFFSETbuffer表示存储器偏移地址 2 地址指针装入DS指令指令格式 LDSreg16 mem32此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容 一般为16位段基址 送入DS 低字内容 一般为偏移地址 送入指令所指定的寄存器中 例如 LDSDI 2130H 3 地址指针装入ES指令指令格式 LESreg16 mem32此指令的功能是将源操作数所对应的双字长的内存单元中的高字内容 一般为16位段基址 送入ES 低字内容 一般为偏移地址 送入指令所指定的寄存器中 例如 LESDI 2130H 四 标志传送指令1 取标志指令指令格式 LAHF2 置标志指令指令格式 SAHF OF DF IF TF SF ZF AF PF CF FLAG AH LAHF和SAHF指令操作示意图 3 标志压入堆栈指令指令格式及操作 PUSHF SP SP 2 SP 1 SP FLAG 4 标志弹出堆栈指令指令格式及操作 POPF FLAG SP 1 SP SP SP 2 二 算术运算指令 8086 8088有丰富的算术运算指令 而且可以处理4种类型的数据 如下表所示 2算术运算类指令 1 加法指令ADD add 加法格式 ADDDST SRC操作 DST DST SRCADC addwithcarry 带进位的加法格式 ADCDST SRC操作 DST DST SRC CFINC increment 加1格式 INCDST操作 DST DST 1说明 1 DST REG MEM SRC 8 16data REG MEM 2 DST SRC不能同时为MEM 3 加法指令影响标志寄存器的状态标志 4 INC指令不影响CF标志 2 减法指令SUB subtract 减法格式 SUBDST SRC操作 DST DST SRCSBB subtractwithborrow 带借位的减法格式 SBBDST SRC操作 DST DST SRC CFDEC Decrement 减1格式 DECDST操作 DST DST 1NEG Negate 求补格式 NEGDST操作 DST 0 DST利用NEG指令可以得到负数的绝对值 CMP Compare 比较格式 CMPDST SRC操作 DST SRC相当于减法 但不保存结果 仅影响标志 说明 1 DST REG MEM SRC 8 16data REG MEM 2 DST SRC不能同时为MEM 3 减法指令影响标志寄存器的状态标志 4 DEC指令不影响CF标志 例 教材P93 94例 求两个多字节16进制数之和 3B74AC60F8 20D59E36C1 例题 计算两个多字节十六进制数之和 374AC60F8H 20D59E36C1H MOVCX 5 设置循环次数MOVSI 0 置位移量初值CLC 清进位CFLOOPER MOVAL DATA2 SI 取一个加数ADCDATA1 SI AL 和一个被加数相加INCSI 位移量加1DECCX 循环次数减1JNZLOOPER 加完否HLT 程序暂停 例题 在数据段从MYDATA开始的存储单元中分别存放了两个8位无符号数 试比较它们的大小 并将大者传送到MAX单元 程序如下 LEABX MYDATA MYDATA偏移地址送BXMOVAL BX 第一个无符号数送ALINCBX BX指向第二个无符号数CMPAL BX 两个数比较JNCDONE 如CF 0 则转DONEMOVAL BX 否则 第二个无符号数送ALDONE MOVMAX AL 较大的无符号数送MAX单元HLT 停止 3 乘法指令MUL UnsignedMultiple 无符号数乘法格式 MULSRC操作 AX AL SRC 字节 DX AX AX SRC 字 默认使用AX或DX AX为目的操作数 IMUL SignedMultiple 有符号数乘法格式 IMULSRC操作 类似MUL 默认使用AX或DX AX为目的操作数 说明 1 SRC为REG MEM 2 乘法指令影响状态标志 但只对CF和OF有定义且CF OF 字节乘法运算的结果可以保存在AL中或字乘法的运算结果可以保存在AX中 即无符号数相乘结果的高半部分为零或带符号数相乘结果的高半部分为低半部分符号位的扩展 则CF OF 0 否则CF OF 1 4 除法指令DIV Unsigneddivide 无符号数除法格式 DIVSRC操作 1 字节除法 AX SRC 商 AL 余数 AH2 字除法 DX AX SRC 商 AX 余数 DX IDIV Signeddivide 有符号数除法格式 IDIVSRC操作 类似DIV 说明 1 SRC为REG MEM 2 除法指令影响状态标志但对所有标志无定义 3 商可能出现溢出 会立即产生除法溢出中断 CBW Convertbytetoword 字节扩展到字格式 CBW操作 把AL扩展到AX CWD Convertwordtodoubleword 字扩展到双字格式 CWD操作 把AX扩展到DX AX 说明 1 CBW和CWD对标志位无影响2 扩展方法由符号扩展指令实现 正数补0 负数补1 无符号数的扩展 将高位补0 例 若 AL 0F2H 执行CBW后 AX 0FFF2H 5 BCD码运算调整指令在微处理器中 没有专用的BCD码运算指令 使用二进制运算指令进行BCD码数的运算后 要用BCD码运算调整指令进行调整 重新得到BCD码的结果 举例如下 1 34H 29H按照二进制加法得到的结果是5DH2 用调整指令DAA调整成BCD码 规则是低4位 9或AF 1结果加06H 高4位 9或CF 1结果加60H 3 调整以后得到 5DH 06H 63H 这是BCD码运算的结果 组合 紧缩格式 BCD码的调整指令 DAA加法调整DAS减法调整分离 非紧缩格式 BCD码的调整指令 AAA加法调整AAS减法调整AAM乘法调整AAD除法调整 这类指令的操作数隐含为AL或AX AAA指令的操作为 如果 AL 0FH 9或 AF 1则 AL AL 06H AH AH 1 AF 1 CF AF AL AL 0FH 否则 AL AL 0FH DAA指令的操作为 如果 AL 0FH 9 AF 1则 AL AL 06H AF 1如果 AL 9FH或 CF 1则 AL AL 60H CF 1 例 要求计算两个十进制数之和 7 8 可用以下指令实现 MOVAX 0007H AL 07H AH 00HMOVBL 08H BL 08HADDAL BL AL 0FHAAA AL 05H AH 01H CF AF 1MOVAX 0007H AL 07H AH 00HMOVBL 08H BL 08HADDAL BL AL 0FHDAA AL 15H AH 00H CF 0 AF 1 AAS指令的操作为 非压缩型BCD码调整 如果 AL 0FH 9或 AF 1则 AL AL 06H AH AH 1 AF 1 CF AF AL AL 0FH 否则 AL AL 0FH DAS指令的操作为 压缩型BCD码调整 如果 AL 0FH 9 AF 1则 AL AL 06H AF 1如果 AL 9FH或 CF 1则 AL AL 60H CF 1 AAM指令的操作为 将二进制数转换成十进制数 AH AL 0AH的商 即AL除以10 商送AH AL AL 0AH的余数 即AL除以10 余数送AL例 要求进行以下十进制乘法运算 7 9 解 可编程序段如下 MOVAL 07H AL 07HMOVBL 09H BL 09HMULBL AX 07H 09H 003FHAAM AH 06H AL 03H AAD指令的操作为 将十进制数转换成二进制数 AL AH 0AH AL AH 0例 要进行以下十进制除法运算 73 2 解 可编程序段如下 MOVAH 07H AH 07H AL 03HMOVAL 03H AH 07H AL 03HMOVBL 02H BL 02HAAD AL 49H 即十进制数73 DIVBL AL 24H 商 AH 01H 余数 AAM AH 03H AL 06H 例题 计算4609 3875 开始 结束 初始化 置被加数 加数 结果的首地址 置循环次数 清进位标志CF 取一个字节加数 地址指针加1 与一个被加数相加 循环次数减1 循环完否 N Y 送存 AAA调整 LEASI STRING1 SI 被加数首地址LEABX STRING2 BX 加数首地址LEADI SUM DI 结果首地址MOVCX 4 CLC NEXT MOVAL SI ADCAL BX AAA ASCII调整MOV DI AL INCSI INCBX INCDI DECCX JNZNEXT HLT 总结 加法指令 减法指令 乘法指令 除法指令 三 逻辑类指令 1 逻辑运算指令逻辑运算类指令与算术运算指令不同 算术指令是按字节或字进行算术运算 而逻辑运算指令是把操作数按位来进行逻辑运算 说明 TEST相当于AND运算 但是不保存结果 仅影响标志 常见的用法举例 清进位标志位 ANDAX AX或ORAL AL等 清零操作数 XORAX AX不仅把AX清零 而且也影响了状态标志 把某几位取反 用XOR指令 把要取反的位和1异或 不变的位和0异或 清零或置位某几位 用AND指令清零 用OR指令置位 CF dst CF 0 dst CF 0 dst CF 0 dst 2 移位操作指令该类指令的使用方法是 移动1位 用类似于SHLAX 1的格式 移动n位 用类似于SHLAX CL的格式 说明 逻辑移位适用于无符号数 算术移位适用于有符号数 逻辑左移和算术左移的机器码完全相同 是助记符的两种写法 3 循环移位操作指令ROL循环左移 操作数整体左移 最高位移到CF 同时最高位补原最低位 ROR循环右移 操作数整体右移 最低位移到CF 同时最低位补原最高位 RCL带进位的循环左移 操作数整体左移 最高位移到CF 同时CF移到最低位 RCR带进位的循环右移 操作数整体右移 最低位移到CF 同时CF移到最高位 说明 循环移位常用来变换数据格式 使用举例 例一 利用循环移位指令可以对寄存器或存储器中的任一位进行测试 如要测试AL寄存器中的第5位的状态是 0 还是 1 则可利用以下指令实现 MOVCL 5 CL 移位次数ROLAL CL CF AL的第5位JNCZERO 若 CF 0 转ZARO 否则 ZARO 例二 利用带进位循环移位指令可以实现将两个以上寄存器或存储器单元组合起来一起移位 如DX和AX两个寄存器组成的32位数乘以2 可用以下两条指令实现 SHLAX 1 AX左移1位 CF AX的最高位RCLDX 1 DX带进位左移1位 DX的最低位 CF 具体操作如下图 CF DX AX 0 RCLDX 1 SHLAX 1 四 串操作指令 串操作指令的特征是对数据块 字符串或数值串 进行操作 并且其中部分指令可以两个操作数同时是存储器操作数 MOVS Movestring 串传送CMPS Comparestring 串比较SCAS Scanstring 串扫描LODS Loadfromstring 从串中取数据STOS Storeintostring 存数据到串中 说明 串操作指令每次执行完成一个字节或一个字的操作 通常使用重复前缀 用来完成数据块的操作 重复前缀 REP重复 REPE REPZ相等 为零则重复 REPNE REPNZ不相等 不为零则重复 特点 串操作指令需要指明每次操作的类型 B字节 W字例如 MOVSB CMPSW等 串操作指令使用DS SI作为源操作数的指针 ES DI作为目的操作数的指针 使用DF来表示每次操作以后变址寄存器SI和DI的变化方向CLD DF 0SI DI做增量变化B 1或W 2STD DF 1SI DI做减量变化B 1或W 2 使用CX来表示用重复前缀以后指令需要重复执行的次数 说明 MOVS指令MOVSB或MOVSW以字节或字为单位在存储单元之间传送数据可以使用REP前缀 LODS指令LODSB或LODSW从内存中取出字节或字到累加器AL或AX可以使用REP前缀 但意义不大 STOS指令STOSB或STOSW从累加器中存字节或字到存储器可以使用REP前缀 CMPS指令CMPSB或CMPSW以字节或字为单位进行两个存储器操作数的比较可以使用REPE REPZ前缀用源操作数 目的操作数 SCAS指令SCASB或SCASW在数据串中查找AL或AX中的内容 可以使用REPNE REPNZ前缀 五 控制转移类指令 能够使程序的执行流程发生改变的指令1 无条件转移JMP转移指令操作 有以下几种类型 段内直接短转移JMPSHORTopr IP IP Data8Data8是一个字节的补码数范围 128 127 段内直接近转移JMPNEARPTRopr IP IP Data16Data16是两个字节的补码数范围 32768 32767 段内间接转移JMPWORDPTRopr IP 寄存器或存储器操作数 段间直接转移JMPFARPTRopr指令中用立即数的形式指出目标位置的段地址和偏移量 段间间接转移JMPDWORDPTRopr目标位置的段地址和偏移量保存在存储器中 说明 在汇编语言中通常使用标号表示要转移到的位置 在DEBUG环境中通常使用直接指出的是将要转移到的位置 使用该指令 可以使程序流程改变到任何目标位置 2 条件转移根据判断条件是否成立决定是否转移 按照判断条件的不同分为以下类型 单个标志 无符号数判断 有符号数判断 CX寄存器 条件转移都是段内直接短转移 即 IP IP Data8类型的转移 判断单个标志ZF JZ JE JNZ JNE SF JS JNSOF JO JNOPF JP JNPCF JC JNC 判断无符号数的大小助记符中的意义 A 大于 B 小于 E 等于JB JNAE JNB JAE 同JC JNC JBE JNA JNBE JA 判断CFandZF 判断有符号数的大小助记符中的意义 G 大于 L 小于 E 等于JL JNGE SFxorOF 1JNL J

温馨提示

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

评论

0/150

提交评论