指令系统14762_第1页
指令系统14762_第2页
指令系统14762_第3页
指令系统14762_第4页
指令系统14762_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

第2章指令系统 2 1数据传送类指令2 2算术运算类指令2 3位操作类指令2 4控制转移类指令2 5串操作指令2 6DOS功能调用指令 学习指令的注意事项 指令的功能 该指令能够实现何种操作 通常指令助记符就是指令功能的英文单词或其缩写形式 指令支持的寻址方式 该指令中的操作数可以采用何种寻址方式 指令对标志的影响 该指令执行后是否对各个标志位有影响 以及如何影响 其他方面 该指令其他需要特别注意的地方 如指令执行时的约定设置 必须预置的参数 隐含使用的寄存器等 记住了吗 指令操作数的表达 OPD 目的操作数OPS 源操作数reg8 任意一个8位通用寄存器AH AL BH BL CH CL DH DLreg16 任意一个16位通用寄存器AX BX CX DX SI DI BP SPreg 代表reg8或reg16seg 段寄存器CS DS ES SSmem8 一个8位存储器操作数单元 包括所有主存寻址方式 mem16 一个16位存储器操作数单元 包括所有主存寻址方式 mem 代表m8或m16imm8 一个8位立即数imm16 一个16位立即数imm 代表i8或i16dest 目的操作数src 源操作数ac 累加器 一定要熟悉噢 2 1数据传送类指令 把数据从一个位置传送到另一个位置14条指令分5组1 通用数据传送 MOVXCHGXLAT2 堆栈操作 PUSHPOP3 标志寄存器传送 LAHFSAHFPUSHFPOPF4 地址传送 LEALDSLES5 输入输出 INOUT本节要求 2 1节要求 除标志寄存器传送指令外 均不影响标志位重点掌握 MOVPUSHPOP特别熟悉 XCHGXLATLEA一般了解 LAHFSAHFPUSHFPOPFLDSLES以后展开 INOUT 传送指令MOV move 把一个字节或字的操作数从源地址传送至目的地址 且源操作数和目的操作数的类型必须一致 MOVreg mem imm 立即数送寄存器或主存 例2 1 MOVreg mem seg reg 寄存器送 段 寄存器或主存 例2 2 MOVreg seg mem 主存送寄存器 例2 3 MOVreg mem seg 段寄存器送寄存器或主存 例2 4 传送指令不是万能的 有不少非法传送的情况 看一看吧 例2 1 立即数传送 moval 4movcx 0ffhmovbyteptr si 0ahmovwordptr si 2 0bh 注意 立即数送主存时 要明确是字节传送还是字传送 例2 2 寄存器传送 movax bxmovah almovds axmov bx al 例2 3 存储器传送 moval bx al ds bx movdx bp dx ss bp moves si es ds si 例2 4 段寄存器传送 mov si dsmovax esmovax cs 注意 对段寄存器的操作有一些限制进一步解释 非法传送种种 两个操作数的类型不一致movbx al 两个操作数不能都是存储器mov bx bp si 段寄存器的操作有一些限制段寄存器属专用寄存器 对他们的操作能力有限 AL 45H 例 判断下列指令是否合法 MOVDS AX 不允许两个操作数都是存储器单元 MOVCS AX MOVCH 4050H MOVDL 5BH MOVDX 5BH MOVDX AL MOVVA1 VA2 MOV45 DL 目的操作数不允许是CS段寄存器 目的操作数不允许是立即数 数据类型不匹配 数据类型不匹配 MOVDS 45H 立即数不能传送给段寄存器 段寄存器的操作有一些限制 不允许立即数传送给段寄存器MOVDS 100H 非法指令 立即数不能传送段寄存器不允许直接改变CS值MOVCS SI 不允许使用的指令不允许段寄存器之间的直接数据传送MOVDS ES 非法指令 不允许段寄存器间传送 交换指令XCHG exchange 把两个地方的数据进行互换 XCHGreg reg mem reg reg mem 交换指令不能在存储器与存储器之间对换数据 也不能与段寄存器对换数据 xchgax bxxchgah alxchgax 2000h 查表转换指令XLAT translate 在BX为首址的内存表中查找相对地址为AL的单元 取出其中的内容再放入AL中 即把AL中的偏移量换成对应的存储单元的内容 XLAT al ds bx al MOVBX offsetTABMOVAL 6XLAT 注意 由于AL为8位二进制位 所以表格的最大长度不能超过256 堆栈操作指令 堆栈的概念堆栈的操作堆栈的特点 什么是堆栈 堆栈是一个 先进后出 的主存区域 位于堆栈段中 使用SS段寄存器记录其段地址 堆栈只有一个出口 即当前栈顶 栈顶是地址较小的一端 低端 它用堆栈指针寄存器SP指定 堆栈的操作 堆栈只有两种基本操作 进栈和出栈 对应两条指令PUSH和POP PUSHreg16 mem16 seg 进栈指令 SP SP 2 SS SP reg16 mem16 seg POPreg16 mem16 seg 出栈指令 reg16 mem16 seg SS SP SP SP 2 堆栈的实例和图例 pushax 堆栈的实例和图例 popax 堆栈的特点 堆栈操作的单位是字 进栈和出栈只对字操作字数据从栈顶压入和弹出时 都是低地址字节送低字节 高地址字节送高字节堆栈操作遵循先进后出原则堆栈常用来临时存放数据传递参数保存和恢复寄存器 例2 11 现场的保护和恢复 pushax 进入子程序后pushbxpushds popds 返回主程序前popbxpopax 注意 CS寄存器只能用PUSH指令 不能用POP指令 地址传送指令 这类指令有3条 它们的作用是将存储单元的地址送寄存器 装入有效地址指令LEA loadeffectiveaddress 将存储器操作数的有效地址传送至指定寄存器中 LEAreg16 mem reg16 mem的有效地址 例 有效地址的获取movbx 0400hmovsi 3chleabx bx si 0f62h bx 139EH 操作 注意 BX得到的是主存单元的有效地址 不是物理地址 也不是该单元的内容 段寄存器装入指令 一般了解 LDSreg16 mem reg16 mem DS mem 2LDS指令将主存中mem指定的字单元内容送至reg16 并将mem的下一字单元内容送DS寄存器 LESreg16 mem reg16 mem ES mem 2LES指令将主存中mem指定的字单元内容送至reg16 并将mem的下一字单元内容送ES寄存器 注意 目标操作数不能是段寄存器 例 地址指针的传送 movwordptr 3060h 0100hmovwordptr 3062h 1450hldssi 3060h ds 1450h si 0100hlesdi 3060h es 1450h di 0100h mem指定主存的连续4个字节作为逻辑地址 32位的地址指针 送入DS reg或ES reg 操作 标志传送指令 一般了解 对标志寄存器进行存取的指令有4条 它们都是无操作数指令 即指令隐含指定标志寄存器 AH寄存器或堆栈为操作数 取标志寄存器指令 格式 LAHF 作用 将标志寄存器的低8位送入AH寄存器 即将标志SF ZF AF PF和CF分别送入AH的第7 6 4 2 0位 而AH的第5 3 1位不确定 存储标志寄存器指令 格式 SAHF 作用 将寄存器AH中的第7 6 4 2 0位分别送入标志寄存器的SF ZF AF PF和CF各标志位 而标志寄存器高8位中的各标志位不受影响 标志寄存器出入堆栈指令 PUSHF SP SP 2 SS SP FLAGSPUSHF指令将栈顶指针SP减2 同时标志寄存器的内容压入堆栈 POPF FLAGS SS SP SP SP 2POPF指令将栈顶字单元内容送标志寄存器 同时栈顶指针SP加2 2 2算术运算类指令 实现二进制 和十进制 数据的四则运算1 加法运算 ADDADCINC2 减法运算 SUBSBBDECNEGCMP3 乘法运算 MULIMUL4 除法运算 DIVIDIV5 符号扩展 CBWCWD6 十进制调整 DAADASAAAAASAAMAAD本节要求 2 2节要求 请注意算术运算指令对标志的影响重点掌握 ADD ADCSUB SBBINC DECCMP比较熟悉 NEGMUL IMULDIV IDIV一般了解 CBWCWD认真理解 DAADASAAAAASAAMAAD 加法指令ADD add ADD指令将源操作数与目的操作数相加 结果送到目的操作数 ADD指令按状态标志的定义相应设置0或1 ADDreg imm reg mem reg reg imm reg mem ADDmem imm reg mem mem imm reg 例2 17 分析下列加法指令的功能 ADDAX CX功能 将寄存器AX的内容与CX的内容相加 结果传送到AX中 2 ADDAH DATA BYTE功能 将由直接寻址方式所指示的存储单元的内容与AH内容相加 结果送回AH中 3 ADDCX 10H功能 将常数10H加入到CX中 为字操作数指令 4 ADDAX BX SI 功能 将由基址变址寻址方式所指示的存储单元的内容加入到AX中 例2 18 分析指令对标志寄存器的影响 MOVAH 56HMOVBH 24HADDAH BH AH 7AH CF 0 OF 0 ZF 0 SF 0 PF 0 AF 0 带进位加法指令ADC addwithcarry ADC指令将源与目的操作数相加 再加上当前进位标志CF 结果送到目的操作数 ADC指令按状态标志的定义相应设置0或1 ADC指令主要与ADD配合 实现数据长度大于16位的两数相加 注意 参加运算的进位CF是本条指令执行之前的值 例2 18 无符号双字加法运算 movax 4652h ax 4652haddax 0f0f0h ax 3742h CF 1movdx 0234h dx 0234hadcdx 0f0f0h dx f325h CF 0 计算02344652H F0F0F0F0H 指令执行后 结果的高16位在DX 低16位在AX中 增量指令INC increment INC指令对操作数加1 增量 INC指令不影响进位标志CF 按定义设置其他状态标志 INCreg mem reg mem reg mem 1 incbxincbyteptr bx INC指令是单操作数指令 主要用于对计数器和地址指针的调整 减法指令SUB subtract SUB指令将目的操作数减去源操作数 结果送到目的操作数 SUB指令按照定义相应设置状态标志 例2 19 减法运算 moval 0fbh al 0fbhsubal 07h al 0f4hmovwordptr 200h 4652h 200h 4652hmovbx 1feh bx 1fehsubal bl al f6hsubwordptr bx 2 0f0f0h 200h 5562h 带借位减法指令SBB subtractwithborrow SBB指令将目的操作数减去源操作数 再减去借位CF 进位 结果送到目的操作数 SBB指令按照定义相应设置状态标志 SBB指令主要与SUB配合 实现高于16位的减法运算 例2 20 无符号双字减法运算 movax 4652h ax 4652hsubax 0f0f0h ax 5562h CF 1movdx 0234h dx 0234hsbbdx 0f0f0h dx 1143h CF 1 计算 02344652H F0F0F0F0H 减量指令DEC decrement DEC指令对操作数减1 减量 DEC指令不影响进位CF标志 按定义设置其他状态标志 DECreg mem reg mem reg mem 1 decsidecbyteptr si DEC指令是单操作数指令 主要用于对计数器和地址指针的调整 求补指令NEG negative 用零减去操作数 然后结果返回操作数求补运算也可以表达成 将操作数按位取反后加1 NEGreg mem reg mem 0 reg mem 只有当操作数为零时 进位标志CF被置零 其它情况都被置1 对进位标志CF的影响 对溢出标志OF的影响 当字节操作数为 128 或字操作数为 32768时 执行NEG指令的结果操作数将无变化 但溢出标志OF被置1 例1设AL中存放一个正数 AL 25H BL中存放一个负数 BL 58H 求它们的相反数 即负数 NEGALNEGBL 指令执行后 AL 25H 11011011B BL 58H 01011000B 比较指令CMP compare CMP指令将目的操作数减去源操作数 按照定义相应设置状态标志 CMP指令执行的功能与SUB指令 但结果不回送目的操作数 例2 22 比较AL是否大于100 cmpal 100 al 100jbbelow al 100 跳转到below执行subal 100 al 100 al al 100incah ah ah 1below 执行比较指令之后 可以根据标志判断两个数是否相等 大小关系等 所以 CMP指令后面常跟条件转移指令 根据比较结果不同产生不同的分支 乘法指令 multiply unsigned MULreg8 mem8 无符号字节乘法 AX AL reg8 mem8MULreg16 mem16 无符号字乘法 DX AX AX reg16 mem16 乘法指令对标志的影响 乘法指令如下影响OF和CF标志 若乘积的高一半 AH或DX 为0 则OF CF 0 否则OF CF 1 乘法指令对其他状态标志没有定义 指令执行后这些标志是任意的 不可预测对标志没有影响是指令的执行不改变标志的状态 无符号的乘法运算 moval 0b4h al b4h 180movbl 11h bl 11h 17mulbl ax Obf4h 3060 OF CF 1 AX高8位不为0 除法指令 division unsigned DIVreg8 mem8 无符号字节除法 AL AX reg8 m8的商 Ah AX reg8 mem8的余数DIVreg16 mem16 无符号字除法 AX DX AX reg16 mem16的商 DX DX AX reg16 mem16的余数 除法指令对标志没有定义 但会产生结果溢出 除法错中断 当被除数远大于除数时 所得的商就有可能超出它所能表达的范围 如果存放商的寄存器AL AX不能表达 便产生溢出 8086CPU中就产生编号为0的内部中断 除法错中断 对DIV指令 除数为0 或者在字节除时 商超过8位 或者在字除时商超过16位 则发生除法溢出 无符号数的除法运算 movax 0400h ax 400h 1024movbl 0b4h bl b4h 180divbl 商al 05h 5 余数ah 7ch 124 2 3位操作类指令 以二进制位为基本单位进行数据的操作1 逻辑运算 ANDORXORNOTTEST2 移位 SHLSHRSAR3 循环移位 ROLRORRCLRCR这是一类常用的指令 都应该特别熟悉 同时 注意这些指令对标志位的影响 逻辑与指令AND 对两个操作数执行逻辑与运算 只有相 与 的两位都是1 结果才是1 否则 与 的结果为0 AND指令设置CF OF 0 根据结果设置SF ZF和PF状态 而对AF未定义 应用 逻辑或指令OR 对两个操作数执行逻辑或运算 只要相 或 的两位有一位是1 结果就是1 否则 或 的结果为0 OR指令设置CF OF 0 根据结果设置SF ZF和PF状态 而对AF未定义 应用 逻辑异或指令XOR 对两个操作数执行逻辑异或运算 只有相 异或 的两位不相同 结果才是1 否则 异或 的结果为0 XOR指令设置CF OF 0 根据结果设置SF ZF和PF状态 而对AF未定义 应用 逻辑非指令NOT 对一个操作数执行逻辑非运算 按位取反 原来是 0 的位变为 1 原来是 1 的位变为 0 NOT指令是一个单操作数指令NOT指令不影响标志位NOT指令易于NEG指令混淆 NOTreg mem reg mem reg mem 逻辑运算的应用 逻辑运算指令除了用来实现各种逻辑运算之外 还常用于对字节或字数据的某些位的组合 分离或位设置 例1 ANDAH 0F0H 分离出AH中的高4位 ANDAH 0FH 分离出AH中的低4位 ORAH 01H 将AH中最低位置1 ANDAL 7FH 将AL的最高位置0 XORAX 0FFH 将AX的低字节变反 XORBX 8000H 将BX的符号位变反 逻辑指令的应用 AND指令可用于复位某些位 同0相与 不影响其他位andbl 11110110B 将BL中D3和D0位清0 其他位不变 OR指令可用于置位某些位 同1相或 不影响其他位orbl 00001001B 将BL中D3和D0位置1 其他位不变 XOR指令可用于求反某些位 同1相异或 不影响其他位xorbl 00001001B 将BL中D3和D0位求反 其他位不变 测试指令TEST 对两个操作数执行逻辑与运算 只有相 与 的两位都是1 结果才是1 否则 与 的结果为0 测试指令进行逻辑与的结果不回送目的操作数 TEST指令设置CF OF 0 根据结果设置SF ZF和PF状态 而对AF未定义 例 测试某些位为0或1 testal 01h 测试AL的最低位D0jnzthere 标志ZF 0 即D0 1 则程序转移到there 否则ZF 1 即D0 0 顺序执行there TEST指令通常用于检测一些条件是否满足 但又不希望改变原操作数的情况 这条指令之后 一般都是条件转移指令 目的是利用测试条件转向不同的程序段 移位指令 shift 移位指令将操作数移动一位或多位 分成逻辑移位和算术移位 分别具有左移或右移操作 SHLreg mem 1 CL 逻辑左移 最低位补0 最高位进入CF SHRreg mem 1 CL 逻辑右移 最低位进入CF 最高位补0 移位指令 shift SALreg mem 1 CL 算术左移 最低位补0 最高位进入CF SARreg mem 1 CL 算术右移 最低位进入CF 最高位不变 逻辑左移SHL与算术左移SAL功能相同 移位指令对标志的影响 移位指令按照移入的位设置进位标志CF根据移位后的结果影响SF ZF PF对AF没有定义如果进行一位移动 则按照操作数的最高符号位是否改变 相应设置溢出标志OF 如果移位前的操作数最高位与移位后操作数的最高位不同 有变化 则OF 1 否则OF 0 当移位次数大于1时 OF不确定 例2 31 移位指令的功能 movcl 4moval 0f0h al f0hshlal 1 al e0h CF 1 SF 1 ZF 0 PF 0 OF 0shral 1 al 78h CF 0 SF 0 ZF 0 PF 0 OF 1saral 1 al 38h CF 0 SF 0 ZF 0 PF 0 OF 0saral cl al 03h CF 1 SF 0 ZF 0 PF 1 操作 例6 32 移位指令可实现乘法功能 movsi axshlsi 1 si 2 axaddsi ax si 3 axmovd

温馨提示

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

评论

0/150

提交评论