第3章+汇编语言_1.ppt_第1页
第3章+汇编语言_1.ppt_第2页
第3章+汇编语言_1.ppt_第3页
第3章+汇编语言_1.ppt_第4页
第3章+汇编语言_1.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言 第三章指令系统与汇编语言程序设计 指令 第3 1节基本概念指令与指令系统 一 指令 Instruction 指令是微处理器执行某种操作的命令 操作 传送类加工处理类 算术运算 逻辑运算 移位循环控制类 转移 调用 中断串操作类 指令系统与寻址方式 二 指令系统 InstructionSet 微处理器全部指令的集合称为指令系统 8086CPU包括133条指令 三 寻址方式一条指令通常包括两部分操作码 规定所要执行的操作类型操作数 所需要处理的数据或者数据的地址信息我们把获得数据或者数据地址信息的方式称为寻址方式例 MOVAX 1234H在这条指令中有两个操作数 按照在指令中所处的位置 将前者称为目的操作数 后者称为源操作数 该指令将数据1234H传送到数据寄存器AX中 源操作数是 立即 寻址方式 目的操作数是 寄存器 寻址方式 隐含寻址 第3 2节8086寻址方式寻址方式 寻找指令中操作数地址的方式 数据寻址方式 一 隐含寻址指令已经默认对CPU中的某个寄存器进行操作 不用在指令中指明所使用的寄存器 即隐含了规定的操作数 这样的寻址方式称为隐含寻址 例 DAA指令 只有操作码 无操作数 但已经规定是对AL中的内容进行十进制调整 立即寻址与寄存器寻址 二 立即寻址操作数直接写在指令中 在指令译码执行时 可以立即得到 同时把操作数又称作 立即数 例 MOVAL 5 AL 5 操作数5采用的就是立即寻址 三 寄存器寻址操作数放在CPU内部的寄存器中 在指令中直接指出寄存器的名字 例 MOVBX AX BX AX 以上三种寻址方式都是直接在处理器内部获得数据 操作速度快 存储器寻址 四 存储器操作数寻址操作数存放在存储器中时 指令执行时必须通过总线在存储器中存取操作数 执行单元EU根据指令中给出的寻址方式计算出16位的偏移量 称为有效地址 EA 送到总线接口单元BIU 经过加法器生成20位实际物理地址 在存储器读写总线周期对存储器进行操作 一般在表示EA时 用 操作数 表示 由于计算EA需要时间 进行总线操作比较慢 因此存储器操作寻址比前三种要慢 直接寻址指令中直接给出了操作数的有效地址例 MOVSI 2000H SI 2000H 上例中默认使用数据段 若需使用其他段可使用段超越 MOVSI ES 2000H 间接寻址 间接寻址指令中寄存器的值是操作数的有效地址 可间接寻址的寄存器有 BX BP SI DI例 MOVAL BX AL BX BX用于间接寻址时 默认段寄存器为DS 允许段超越BP用于间接寻址时 默认段寄存器为SS 允许段超越SI用于间接寻址时 默认段寄存器为DS 允许段超越DI用于间接寻址时 只有在串操作指令中 默认段寄存器为ES 其余情况默认段寄存器均为DS 不允许段超越直接寻址时 默认段寄存器为DS 允许段超越注 IP只能在代码段中 CS 寻址 SP只能在堆栈段 SS 中寻址 相对寻址 相对寻址基址寻址操作数的有效地址是一个基址寄存器的内容加上一个8位或者16位的偏移量 基址寄存器是BX或者BP 例 MOVAX BX 1000H AX BX 1000H 有时也写成MOVAX 1000H BX 或MOVAX BX 1000H变址寻址操作数的有效地址是一个变址寄存器的内容加上一个8位或者16位的偏移量 变址寄存器是SI和DI 例 MOVAX ARRAY SI AX SI ARRAY 在C语言中 常使用全局数组 例如定义了一个全局数组A 3 具有三个元素 分别为A 0 A 1 A 2 实 际上A在编译时就转换成具体的在数据段中分配的位置 例如1000H 下标0 1 2一般就存放在寄存器中 如SI 通过1000H SI 就可以访问到具体的数据 基址变址寻址操作数的有效地址是由基址寄存器和变址寄存器的内容相加产生例 MOVAX BP SI AX BP SI 相对基址变址寻址操作数的有效地址是由基址寄存器 变址寄存器和偏移量三者相加产生 例 MOVAX BX SI 3H AX BX SI 3H 有时也可写成MOVAX 3H BX SI 或MOVAX 3H BX SI 基址变址寻址 I O端口寻址 数据串寻址DS SI指示源串 ES DI指示目的串 串长度计数用CX 并自动修改指针和计数器值 只用于串操作命令 例 MOVSB ES DI DS SI CX CX 1 SI SI 1 DI DI 1 五 I O端口寻址操作数存放在I O端口中 指令执行时必须通过累加器 AX或AL 实现对端口的访问 直接端口寻址指令直接提供8位端口的地址 例 INAL 63H AL 0063H 在端口寻址时 地址可以不需要加 当端口地址用一个字节来表示时 可使用直接端口寻址 I O端口寻址 间接端口寻址由DX寄存器给出16位端口地址 例 MOVDX 162HINAX DX从端口162H读取一个字的数据到AX中 实质是用DX间接表示端口地址 比较 MOVAX DX AX DX INAX DX AX DX 程序寻址 程序寻址方式 一 段内直接寻址短跳转 把IP的内容加上一个字节的补码数作为新的IP 往前最多跳 128个字节 往后最多跳127个字节 近跳转 把IP的内容加上两个字节的补码数作为新的IP 往前最多跳 32768个字节 往后最多跳32767个字节 二 段内间接寻址将寄存器或存储器操作数的内容赋给IP 程序寻址 三 段间直接寻址直接在指令中给出新的CS和IP内容 四 段间间接寻址用存储器操作数的内容赋给CS和IP 第3 3节8086指令格式 指令格式指令一般由1 6个字节组成 具体格式如下 一 说明字节1OPCODE 指令操作码D 操作数传输方向 立即数指令和串操作指令除外 D 0 Reg为源操作数D 1 Reg为目的操作数W 操作数字节长度W 0 字节操作W 1 字操作 指令格式 字节2 寻址方式MOD 寻址方式字段00 存储器方式 指令中无偏移量01 存储器方式 指令中有8位偏移量10 存储器方式 指令中有16位偏移量11 寄存器方式 指令中无偏移量Reg 寄存器编码字段000 AL AX100 AH SP001 CL CX101 CH BP010 DL DX110 DH SI011 BL BX111 BH DI 指令格式 R M 寄存器 存储器字段在MOD 11 寄存器模式下 R M给出第二个操作数的寄存器编码 在MOD 11 存储器模式下 R M给出计算有效地址的方法 指令格式 字节3 字节6DISP 存储器操作数地址偏移量 长度由MOD字段定义DATA 指令中的立即数例 MOVAX BX 指令码为 8B07MOV BX SI 2000H 2345H指令码为 C78000204523MOVAX BX指令码为 89D8 第3 4节 8086指令系统 一 操作数符号表示DST 目的操作数SRC 源操作数TARGET 循环 转移和调用指令操作数reg 寄存器操作数 字节或字reg8 寄存器操作数 字节reg16 寄存器操作数 字mem 存储器操作数 字节或字mem8 字节型存储器操作数mem16 字型存储器操作数mem32 双字型存储器操作数 acc 累加器AL或AXseg reg 段寄存器imm 立即操作数 字节或字imm8 8位立即操作数imm16 16位立即操作数short label 短标号 8位偏移量 near label 近标号 16位地址或偏移 far label 远标号 32位地址 二 数据传送指令 一 通用数据传送指令MOVDST SRC DST SRC 具体指令 movmem accmovacc memmovreg regmovreg memmovmem regmovreg immmovmem immmovseg reg reg16 CS除外movseg reg mem16 CS除外movreg16 seg regmovmem16 seg reg 例 合法指令 MOVAX SI AX SI MOVAL SI AL SI MOVDS AX DS AX MOVAX DS AX DS MOVSI 2000H SI 2000HMOV SI 20H SI 20HMOVSI 2000H SI 2000H MOVSI SI 6 SI SI 6 MOVAX AX AX AX 非法指令 MOV SI 2000H MOVCS BXMOVDS 2000H 二 堆栈及堆栈操作 1堆栈堆栈是一种按先进后出 FILO 原则存取的存储器 它由堆栈指针寄存器SS SP和RAM中的一部分组成 主要用于保护现场和恢复现场 SP的内容总是指向栈顶 即最后推入信息所在单元 2进栈指令PUSHSRC SP SP 2 SP 1 SP SRC 具体指令 PUSHreg16PUSHseg regPUSHmem163出栈指令POPDST DST SP 1 SP SP SP 2 具体指令 POPreg16POPseg regPOPmem16 4堆栈的应用主要用于子程序调用或中断子程序的现场保护和恢复 以及参数传递等 例1 保护现场 fun PUSHDSPUSHESPUSHAXPUSHBX 处理部分POPBXPOPAXPOPESPOPDSRET 例2 用堆栈交换数据PUSHAXPUSHBXPOPAXPOPBX 堆栈的应用 三 交换指令 三 交换指令XCHGDST SRC DST SRC 具体指令 XCHGacc regXCHGmem regXCHGreg reg例1 XCHGAX BX AX BX XCHGAL BL AL BL 例2 使用3种方法完成将寄存器AX和BX内容交换 方法1XCHGAX BX AX BX 方法2PUSHAXPUSHBXPOPAXPOPBX方法3 MOVCX AXMOVAX BXMOVBX CX 1 输入指令INAL PORT AL PORT INAX PORT AX PORT INAL DX AL DX INAX DX AX DX PORT为8位直接地址2 输出指令OUTPORT AL PORT AL OUTPORT AX PORT AX OUTDX AL DX AL OUTDX AX DX AX 四 累加器专用传送指令 3 换码指令XLATSRC SRC仅做类型检查或XLAT AL BX AL 例 MOVBX offsetTABLEXLATTABLETABLE DB0DB1DB4DB9DB16DB25 LEA loadeffectiveaddress LDS loadDSwithpointer LES loadESwithpointer 1 有效地址传送指令LEAreg16 SRC reg16 SRC例 MSGdb Hello LEADX MSG 指令执行后 DX 2000H相当于 MOVDX OFFSETMSG如果指令 MOVDX MSG则 DH e DL H 五 地址传送指令 2 指针送寄存器和DSLDSreg16 mem32 reg16 mem32 DS mem32 2 把源操作数指定的4个字节传送到指定的寄存器及DS寄存器中 例 VECTDW01F0HDW2018HLDSBX VECT 执行后 DS 2018H BX 01F0H 3 指针送寄存器和ESLESreg16 mem32 reg16 mem32 ES mem32 2 把源操作数指定的4个字节传送到指定的寄存器及ES寄存器中 地址传送指令 六 标志寄存器传送1 LAHF AH flag低字节 2 SAHF flag低字节 AH 3 PUSHF SP SP 2 SP 1 SP flag4 POPF flag SP 1 SP SP SP 2 六 标志寄存器传送 三 算术指令 一 加法指令1 ADDDST SRC DST SRC DST 具体指令 ADDreg regADDreg memADDmem regADDreg immADDmem immADDacc imm2 ADCDST SRC DST SRC DST CF 具体指令 ADCreg regADCreg memADCmem regADCreg immADCmem immADCacc imm3 INCDST DST DST 1具体指令 INCreg16INCreg8INCmem 算术类指令 间接寻址程序 LEASI DATA1LEADI DATA2LEABX RESULTMOVAX SI ADDAX DI MOV BX AXMOVAX SI 2 ADCAX DI 2 MOV BX 2 AX 直接寻址程序 MOVAX DATA1ADDAX DATA2MOVRESULT AXMOVAX DATA1 2ADCAX DATA2 2MOVRESULT 2 AX 例 将数据段DATA1和DATA2中的32位二进制无符号数相加 结果存放在RESULT单元中 二 减法指令 1 SUBDST SRC DST DST SRC 具体指令 SUBreg regSUBreg memSUBmem regSUBreg immSUBmem immSUBacc imm 2 SBBDST SRC DST DST SRC CF具体指令 SBBreg regSBBreg memSBBmem regSBBreg immSBBmem immSBBacc imm 5 CMPDST SRC DST SRC 仅影响标志具体指令 CMPreg regCMPreg memCMPmem regCMPreg immCMPmem immCMPacc imm 3 DECDST DST DST 1具体指令 DECreg16DECreg8DECmem 4 NEGDST DST 0 DST 具体指令 NEGregNEGmem 二 减法指令 1 无符号数乘法MULSRC AX AL SRC DX AX AX SRC 具体指令 MULreg8MULreg16MULmem8MULmem16 三 乘法指令 2 有符号数乘法IMULSRC AX AL SRC DX AX AX SRC 具体指令 IMULreg8IMULreg16IMULmem8IMULmem16 四 除法指令 1 无符号数除法指令DIVSRC AL AX SRC AH AX SRC 或 AX DX AX SRC DX DX AX SRC 具体指令 DIVreg8DIVreg16DIVmem8DIVmem16 2 有符号数除法指令IDIVSRC 操作与DIV相同具体指令 IDIVreg8IDIVreg16IDIVmem8IDIVmem163 字转换成字节指令 有符号数 CBW 若 AL 80H则 AH 0 否则 AH FFH 4 有符号字转换成双字指令CWD 若 AX 8000H 则 DX 0 否则 DX FFFFH 五 BCD码调整指令 1 8086支持两种BCD码运算压缩BCD码 通常BCD码 每个字节2位BCD码 如 10010101B 95H 值为95非压缩BCD码 低4位为BCD码 高4位为零 如 00000101B表示BCD码5 加减运算非压缩BCD码高4位的值可不为0 乘除时高4位必须是0 2 压缩BCD码调整指令DAA 对加法运算结果 AL 进行BCD码调整 DAS 对减法运算结果 AL 进行BCD码调整 3 非压缩BCD码调整AAA 对加法运算非压缩BCD码进行调整 进位送 AH 中AAS 对减法运算非压缩BCD码进行调整AAM 对乘法运算非压缩BCD码进行调整AAD 对除法运算非压缩BCD码进行调整例 下列程序段执行后 AL CF MOVAL 89HADDAL 43HDAA 算术类指令 例 将32位无符号数DATA1和DATA2相乘 结果存于RESULT中 DA1HDA1L DA2HDA2LDA1L2LHDA1L2LLDA1H2LHDA1H2LLDA2H1LHDA2H1LL DA1H2HHDA1H2HL 算术类指令 LEASI RESULTSUBAX AXMOV SI 4 AXMOV SI 6 AXMOVAX DATA1MULDATA2MOV SI AXMOV SI 2 DXMOVAX DATA1 2MULDATA2ADD SI 2 AXADC SI 4 DXADC SI 6 0 MOVAX DATA1MULDATA2 2ADD SI 2 AXADC SI 4 DXADC SI 6 0MOVAX DATA1 2MULDATA2 2ADD SI 4 AXADC SI 6 DX 四 逻辑指令 2 ORDST SRC DST DST SRC 具体指令ORreg regORreg memORmem regORreg immORmem immORacc imm3 NOTDST DST DST 具体指令 NOTregNOTmem 一 逻辑运算指令1 ANDDST SRC DST DST SRC 具体指令ANDreg regANDreg memANDmem regANDreg immANDmem immANDacc imm 逻辑指令 4 XORDST SRC DST DST SRC 具体指令XORreg regXORreg memXORmem regXORreg immXORmem immXORacc imm 5 TESTDST SRC DST SRC 仅影响标志具体指令TESTreg regTESTreg memTESTreg immTESTmem immTESTacc imm 二 移位指令 1 逻辑左移指令SHLDST count count可以为1 也可以为CL做移位计数 具体指令 SHLreg 1SHLreg CLSHLmem 1SHLmem CL 移位和循环指令均雷同 2 算术左移指令SALDST count 例 写出3条指令将寄存器AX中的数据乘2 SALAX 1SHLAX 1ADDAX AX 3 逻辑右移指令SHRDST count 4 算术右移指令SARDST count 5 循环左移指令ROLDST count 6 循环右移指令RORDST count 7 带进位循环左移指令RCLDST count 8 带进位循环右移指令RCRDST count 五 串处理指令 一 数据串传送指令1 串传送指令MOVSDST SRC DST与SRC做类型检查 具体指令 MOVSB ES DI DS SI SI SI 1 DI DI 1MOVSW ES DI DS SI SI SI 2 DI DI 2其中 加 减地址指针SI和DI由FLAG中的DF决定 DF 0地址增加 DF 1地址减少 2 建立方向标志指令CLD DF 0STD DF 1 3 重复串操作直到 CX 0在串操作指令前 可加重复操作REP前缀 使串连续操作直到 CX 0 例 REPMOVSB 以CX寄存器做计数器 每传送一个数 CX 减1 直到 CX 为0 串操作类指令 例1 将1000H开始的10个字节移动到2000H开始的单元MOVSI 1000H 置源操作数起始地址MOVDI 2000H 置目的操作数起始地址MOVAX DS 将DS和ES段统一 比PUSHDSMOVES AX POPES要快MOVCX 0AH 初始化CX为10 移动10个字节CLD 使DF 0 使地址作增量变化REPMOVSB ES DI DS SI SI SI 1 DI DI 1INT3 断点指令 4 存入串指令STOSDST DST做类型检查具体指令 STOSB ES DI AL DI DI 1STOSW ES DI AX DI DI 2由DF决定方向 可加入前缀REP 5 从串中取指令LODSSRC SRC做类型检查具体指令 LODSB AL DS SI SI SI 1LODSW AX DS SI SI SI 2地址增减由DF决定 串操作类指令 1 串比较指令CMPSSRC DST SRC和DST仅做类型检查具体指令 CMPSB DS SI ES DI SI SI 1 DI DI 1CMPSW DS SI ES DI SI SI 2 DI DI 2串比较仅影响标志 地址增减由DF决定 2 条件重复前缀 1 相等或为0时重复REPZREPE执行操作 若 CX 0或ZF 0 比较不相等 时退出 否则继续执行 2 不相等或不为0时重复REPNZREPNE执行操作 若 CX 0且ZF 0 比较不相等 时继续执行 否则退出 二 字符串扫描和比较指令 3 串扫描指令SCASDST DST做类型检查具体指令 SCASB AL ES DI DI DI 1 影响标志SCASW AX ES DI DI DI 2 影响标志地址增减由DF决定 可加条件前缀 例 REPNZSCASB 例 以ds si为起始地址以NULL结束标志的字符串 计算其长度 结果存于 AX 中movdi si movax ds moves ax es di指向字符串xoral al al 清零movcx 0ffffh cx 置初值cldrepnzscasb 查找结束符movax cxnotax cx 含结束符长度decax 去掉结束符ret 六 控制转移指令 一 无条件转移指令JMPTARGET 转移到目的地址具体指令 JMPshort label IP IP short labelJMPnear label IP IP near labelJMPfar label CS IP far labelJMPmem16 间接转移 IP mem16 JMPreg16 间接转移 IP reg16 JMPmem32 间接转移 IP mem32 CS mem32 2 二 条件转移指令1 根据单个标志转移JZshort label 结果为0转移JEshort label 结果相等转移测试条件 ZF 1JNZshort label 结果不为0则转移JNEshort label 结果不相等则转移测试条件 ZF 0 JSshort label 结果为负则转移测试条件 SF 1JNSshort label 结果非负则转移测试条件 SF 0JNOshort label 结果不溢出则转移测试条件 OF 0JOshort label 结果溢出则转移测试条件 OF 1JPshort label 奇偶为1则转移JPEshort label 偶转移测试标志 PF 1 JNPshort label 奇偶为0则转移JPOshort label 奇转移测试标志 PF 0JBshort label 有借位转移JNAEshort label 不大于等于转移JCshort label 有进位转移测试条件 CF 1JNBshort label 无借位转移JAEshort label 大于等于转移JNCshort label 无进位转移测试条件 CF 0 条件转移指令 2 两个无符号数比较转移JB JNAE JC CF 1JNB JAE JC CF 0JBEshort label 小于等于转移JNAshort label 不大于转移测试条件 CF ZF 1JNBEshort label 不小于等于 转移JAshort label 大于转移测试条件 CF ZF 0 3 两个有符号数比较转移JLshort label 小于转移JNGEshort label 不大于等于转移测试条件 SF OF 1JN

温馨提示

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

评论

0/150

提交评论