pentium指令系统之逻辑运算和移位指令.ppt

上传人:sh****n 文档编号:6399183 上传时间:2020-02-24 格式:PPT 页数:52 大小:503.31KB
返回 下载 相关 举报
pentium指令系统之逻辑运算和移位指令.ppt_第1页
第1页 / 共52页
pentium指令系统之逻辑运算和移位指令.ppt_第2页
第2页 / 共52页
pentium指令系统之逻辑运算和移位指令.ppt_第3页
第3页 / 共52页
点击查看更多>>
资源描述
三 逻辑运算和移位指令 一 逻辑运算指令1 AND Logicaland 逻辑 与 指令2 TEST Testornon destructivelogicaland 测试指令3 OR Lgicalinclusiveor 逻辑 或 指令4 XOR Logicalexclusiveor 逻辑 异或 指令5 NOT Logicalnot 逻辑 非 指令特点 逻辑运算是按位操作 操作数应该是位串而不是数 影响条件码 NOT指令除外 其他指令同 SFZFPF 1 AND Logicaland 逻辑 与 指令格式 ANDdest src B W dest dest src src 立即数 寄存器 存储器 dest 寄存器 存储器 执行操作 按位进行 与 运算 操作类型举例 ANDAL 0FH 寄存器 立即数ANDCX DI 寄存器 寄存器ANDSI MEM NAME 寄存器 存储器ANDALPHA DI AX 存储器 寄存器ANDwordptr BX SI 0FFFEH 存储器 立即数 与 指令的用途 对一个数据的指定位清0将指定位与 0 相与 例 若 AL 43HANDAL 0FH AL 03H AL 0 3不变 AL 4 7 00H 屏蔽高4位 与 指令应用举例 例1 将英文小写字母ASCII转换成大写 小写英文字母ASCII为 a z 61H 7AH大写英文字母ASCII为 A Z 41H 5AH程序 MOVAL z ANDAL 0DFH 例2 判断键盘按下的字符是不是 Y MOVAH 7INT21H 键入无回显 AL 输入键的字符码ANDAL 0DFHCMPAL Y JEYES YES 01100001 01000001 11011111 61H 41H DFH 2 TEST Testornon destructivelogicaland 测试指令格式 TESTdest src dest src src 立即数 寄存器 存储器 dest 寄存器 存储器 执行操作 二个操作数相与的结果不存入目的 只影响标志位 操作类型举例 TESTBH 7 寄存器 立即数TESTSI BP 寄存器 寄存器TESTDI TABLE BX 寄存器 存储器TEST SI CH 存储器 寄存器TESTwordptr BX DI 6ACEH 存储器 立即数 例 判断A单元中数据的奇偶性设 A 0AEH程序 MOVAL A AL 0AEHTESTAL 01HJZEVEN 结果 0为偶数转EVEN 奇数处理 EVEN 偶数处理检测 AL 的最低位是否为0 若为0转EVEN 用途 常常用来检测指定位是1 0 但又不希望改变原有的操作数的情况下 常在此指令后边加一条条件转移指令 3 OR Lgicalinclusiveor 逻辑 或 指令格式 ORdset src dset dset src dest 寄存器 存储器 src 立即数 寄存器 存储器 执行操作 进行按位 或 运算用途 将操作数的指定位置1 操作类型举例 ORBL 0F6H 寄存器立即数ORAH BL 寄存器寄存器ORCL BETA BX DI 寄存器存储器ORGAMMA SI DX 存储器寄存器ORBYTEPTRMEM BYTE 80H 存储器立即数 4 XOR Logicalexclusiveor 逻辑 异或 指令格式 XORdset src B W dset dset src dest 寄存器 存储器 src 立即数 寄存器 存储器 执行的操作 对指令的两个操作数进行按位 异或 运算 操作类型举例 XORDI 23F6HH 寄存器 立即数XORSI DX 寄存器 寄存器XORCL BUFFER 寄存器 存储器XORMEM BX AX 存储器 寄存器XORbyteptrTABLE BP SI 3DH 存储器 立即数 用途 a对某些特定位求反 某些特定位与 1 其余位保持不变 保持不变与 0 b初始化时将某个寄存器清0应用举例 例1 将 AL 中的第1 3 5 7位求反0 2 4 6位保持不变 MOVAL 0FHXORAL 0AAH例2 比较三条AX清 0 指令 XORAX AX 清AX 清CF 2个字节 3个T SUBAX AX 清AX 清CF 2个字节 3个T MOVAX 0 清AX 不影响标志位 3个字节 4个T XOR清 0 指令在多字节累加程序中十分有用 例3 将存放在TABLE开始的100个字节的16进制数进行累加 和存于SUM 1 SUM单元 程序 100个字节的16进制数进行累加 LEABX TABLEMOVCL 100XORAX AXLOOPER ADDAL BX JNCGOONINCAHGOON INCBXDECCLJNZLOOPERMOVSUM AXHLT 流程图 5 NOT Logicalnot 逻辑 非 指令格式 NOTdest B W指令操作数只有一个 指令对操作数按位求反 执行操作 字节求反 dest 0FFH dest 字求反 dest 0FFFFH dest 源操作数 寄存器 存储器 不能是立即数 影响标志位 对标志位无影响 操作类型举例 NOTAH 8位寄存器求反NOTCX 16位寄存器求反NOTBYTEPTR BP 8位存储器求反NOTWORDPTRCOUNT 16位存储器求反 综合举例 1 使某些位置 0 INAL 61H AL B 设备控制寄存器 想使此位为0执行指令 ANDAL 0FDH即可 2 使某些位置 1 INAL 61H AL 执行指令 ORAL 02 想使此位为 1 3 使某些位求反 INAL 61H AL 0 XORAL 02H 00000010 1 4 测试某些位 测奇偶性 测试 奇 偶 性 见TEST指令的用途例子 逻辑指令应用小结 1 AND指令用来对指令的指定位清 0 2 OR指令常用来对某些位置1 3 XOR指令用在程序开头 使某个寄存器清 0 4 NOT指令对某个数据取反 1成补码 5 TEST指令用来检测指定位为1 还是0 1 算逻移位指令 4条 SHL SHR SAL SAR 1 SHL SAL Shiftlogicalleft shiftarithmeticleft 逻辑左移 算术左移指令 2 SHR Shiftlogicalright 逻辑右移指令 3 SAR Shiftarithmeticright 算术右移指令 2 循环移位 4条 ROL ROR RCL RCR 1 ROL Rotateleft 不含CF循环左移指令 2 ROR Rotateright 不含CF循环右移指令 3 RCL Rotateleftthroughcarry 含CF循环左移指令 4 RCR Rotaterightthroughcarry 含CF循环右移指令 二 移位指令 共同点 所有移位指令都可以作B W DW操作 指令中的dest 寄存器 存储器寻址方式 cnt 表示移位次数cnt 1 31 移位的位数可直接在指令中写出cnt 31 用CL存放移位次数 不能是其他寄存器 如 SALAX 1MOVCL 4SALAX CL利用移位指令编制 程序 执行时间比直接用 指令快 速度可提高5 6倍 1 算逻移位指令 4条 SHL SHR SAL SAR 1 SHL SAL Shiftlogicalleft shiftarithmeticleft 逻辑左移 算术左移指令格式 SHLdest cnt 逻辑左移指令 B WSALdest cnt 算术左移指令 B Wdest 寄存器 存储器寻址方式 cnt 表示移位次数cnt 1 31 常数可写在指令中 cnt 31 用CL存放移位次数 执行操作 相当于无符号数的 2功能 SHL SAL指令操作示意图如下图所示 指令格式举例 SHLAH 1SALSI CLSALWORDPTR BX 5 1SHLBYTEPTR CL dest 2 SHR Shiftlogicalright 逻辑右移指令格式 SHRdest cnt 逻辑右移指令 B W执行操作 相当于无符号数的 2功能 SHR指令操作示意图如下图所示 dest 寄存器 存储器寻址方式 指令格式举例 SHRBL 1SHRAX CLSHRBYTEPTR DI BP 1SHRWORDPTRBLOCK CL dest 3 SAR Shiftarithmeticright 算术右移指令格式 SARdest cnt 算术右移指令 B W执行操作 SAR指令操作示意图如下图所示 dset dest 寄存器 存储器寻址方式 指令格式举例 SARAL 1SHRDL CLSHRWORDPTRTABLE SI 1SHRBYTEPTRSTATUS CL 2 循环移位 4条 ROL ROR RCL RCR 共同点 ROL ROR不含CF循环移位指令 操作数移动8次后还原 RCL RCR含CF循环移位指令 操作数移动9次后还原 影响标志OF CF 1 ROL Rotateleft 不含CF循环左移指令格式 ROLdest cnt 不含CF循环左移指令 B W执行操作 ROL指令操作示意图如下图所示移动8次后操作数还原 dest 指令格式举例 ROLBH 1ROLDX CLROLWORDPTRTABLE DI 1ROLBYTEPTRALPHA CL 影响标志OF CF情况 左循环移动1次后 移位后 最高有效位 符号位 是否发生变化 如果移位后 最高有效位与CF不等则 OF 1 否则 无变化时 OF 0CF根据各条指令的规定设置 左循环移动多次后 OF值不定 CF 从目标操作数移出的最后一位 SF ZF PF AF不影响 2 ROR Rotateright 不含CF循环右移指令格式 RORdest cnt 不含CF循环右移指令 B W执行操作 ROR指令操作示意图如下图所示右移8次后操作数还原 dest 指令格式举例 RORCX 1ROLBH CLROLBYTEPTRBETA 1ROLWORDPTRCOUNT CL 3 RCL Rotateleftthroughcarry 含CF循环左移指令格式 RCRdest cnt 含CF循环左移指令 B W执行操作 RCL指令操作示意图如下图所示左移9次后操作数还原 dest 指令格式举例 RCLBX 1RCLDL CLRCLBYTEPTRARRAY DI 1RCLWORDPTR SI BP CL影响标志 RCL与ROL影响标志OF CF情况相同 4 RCR Rotaterightthroughcarry 含CF循环右移指令格式 RCRdest cnt 含CF循环左移指令 B W执行操作 RCR指令操作示意图如下图所示右移9次后操作数还原 dest 指令格式举例 RCRDI 1RCRSI CLRCRWORDPTR SI BX 3 1RCLBYTEPTRPORT CL影响标志 RCR与ROR影响标志OF CF情况相同 小结 循环移位指令 Rotate 与移位指令 Shift 不同点 循环移位指令移位后 操作数中原来各数位的信息不会丢失 这是移动了位置 必要时可以恢复 循环移位指令可以对操作数进行测试 例 测试 AL 5 0 MOVCL 3ROLAL CLJNCZERO ZERO 3 双精度移位指令SHLD SHRD 格式 SHLD shrddest src cnt 执行操作 目的操作数和源操作数连续左移 右移cnt位 结果在目的操作数中 源操作数不变 注意 源操作数必须在寄存器中 目的操作数可以是寄存器 也可以是内存单元 例 SHLDEAX EBX 3SHLDMEM WORD DX 8SHRDECX EDX 19SHRDEAX EBX CL 5种基本操作 1 MOVS Movestring 串传送指令2 CMPS Comparestring 串比较指令3 SCAS Scanstring 串扫描指令 串检索 4 LODS Loadfromstring 从串取指令5 STOS Storeintostring 存入串指令6 INS OUTS In Outstring I O串操作指令 四 串操作指令 Stringmanipulation 串 就是内存中一段地址相连的字节或字 串操作 对串中各单元进行操作 也叫数据块操作 共同点 可以只有源操作数 可以只有目标操作数 可能二者都有 源操作数用SI寻址 隐含DS值为段地址 可以用段跨越前缀指定其它段 目标操作数用DI寻址 隐含ES为段地址 每次操作对SI DI调整 DF 1 DI SI自动 1 字节 或 2 字 DF 0 DI SI自动 1 字节 或 2 字 与上述指令基本配合使用前缀有 REP Repeat 重复 REPE REPZ Repeatwhileequal zero 相等 为零则重复 REPNE REPNZ Repeatwhilenotequal notzero 不相等 不为零则重复 下面分二种情况来讨论 一 与REP相配合工作的MOVS STOS LODS指令REP重复串操作直到 CX 0为止 二 与REPE REPZ和REPNE REPNZ联合工作的CMPS和SCAS指令REPE REPZ当相等 为零时重复串操作REPNE REPNZ当不相等 不为零时重复串操作 一 与REP相配合工作的MOVS STOS LODS指令REP重复串操作直到 CX 0为止格式 REP串指令串指令可为 MOVS STOS LODS MOVS MoveString 串传送LODS LoadfromString 从串取指令STOS StoreintoString 存入串指令 MOVS Movestring 串传送串传送有3种格式 1 MOVSB 字节 执行操作 ES DI DS SI SI SI 1 DI DI 1 2 MOVSW 字 执行操作 ES DI DS SI SI SI 2 DI DI 2当方向标志CLD DF 0时用 STD DF 1时用 该指令不影响条件码 归纳在执行MOVS指令时 应该先做好以下准备工作 1 数据段中源串首地址 如反向传送到末地址 存入SI寄存器中 2 附加段中目的串首地址 或反向传送末地址 存入DI寄存器中 3 数据串长度存入CX寄存器 4 建立方向标志建立方向标志介绍两条指令 CLD cleardirectionflag 功能 DF 0 执行串处理指令时可以使地址自动 1或 2 STD setdirectionflag 功能 DF 1 执行串处理指令时可以使地址自动 1或 2 LODS Loadfromstring 取字符串指令取字符串指令有3种格式 1 LODSB 字节 AL DS SI SI SI 1LODSW 字 AX DS SI SI SI 2 3 LODSD 双字 EAX DS SI SI SI 4功能 该指令把由 SI 指定的数据段中某单元内容 AL 或 AX 或 EAX 中 DF 0 SI SI 1或 2或 4DF 1 SI SI 1或 2或 4 LODS应用注意 1 指令允许用段跨越前缀来指定非数据段的存储区 2 该指令不影响条件码 一般说来 它不与REP联用 每重复一次 累加器的内容就改变一次 AL 中只能保持最后一个元素 有时缓冲区中的一串字符需要多次取出测试时可用本指令 适用于在一个循环中 用基本串操作指令构成复杂串操作时很有用 存入串指令有3种格式 1 STOSB 字节 ES DI AL DI DI 1STOSW 字 ES DI AX DI DI 2 3 STOSD 字 ES DI AX DI DI 4 用途 与REP联用时 CX 缓冲区长度 用来建立一串相同的值 3STOS Storeintostring 存入串指令将 AL 或 AX ES DI DI 1或 2或 4 DI 例 在附加段STORE开始存5个空格程序 MOVAL 20H AL MOVCX 5MOVDI offsetSTORECLDREPSTOSB ES DI AL DI DI 1 学习LODS STOS指令应用例 内存中有一个首地址为BLOCK补码表示的有符号数的数据块 要求将正 负数分开 分别存于二个缓冲区 存放正数的缓冲区首址为PLUS DATA 存放负数的缓冲区首址为MINUS DATA 设 源数据块用SI寻址 正数的目的区用DI寻址 负数的目的区用BX寻址 循环次数 CX 传送过程 用LODS指令把源数据取入 AL 中 检查其符号 确定正 负 若为正数用STOS指令送至正数缓冲区 若是负数 把 DI 与 BX 交换 仍使用STOS传送 传送完后再将 DI 与 BX 交换 恢复原值 程序 START MOVSI OFFSETBLOCKMOVDI OFFSETPLUS DATA 正数缓冲区MOVBX OFFSETMINUS DATA 负数缓冲区MOVCX COUNTCLDGOON LODSBTESTAL 80HJNZMINS 若负数转MINSSTOSB 正数 DI AL DI DI 1JMPAGAINMINS XCHGBX DISTOSB 负数 DI AL DI DI 1XCHGBX DIAGAIN DECCXJNZGOONHLT 4I O串操作指令 In OutString INSB OUTSB INSW OUTSW INSD OUTSD INSB INSW INSD从一个输入端口读一串数据送到有EDI或DI指出的连续存储单元 OUTSB OUTSW OUTSD从ESI或SI指出的连续存储单元输出一串数据到输出端口 例 INSW 例 OUTSD 二 与REPE REPZ和REPNE REPNZ联合工作的CMPS和SCAS指令REPE REPZ当相等 为零时重复串操作格式 REPE 或REPZ stringprimitive当相等重复前缀REPZStringprimitive可为 CMPS SCAS1 CMPS Comparestring 串比较指令2 SCAS Scanstring 串扫描指令 搜索指令 REPNE REPNZ当不相等 不为零时重复串操作格式 REPNE 或REPNZ stringprimitive当不相等重复前缀REPNZstringprimitive可为 CMPS SCAS1 CMPS Comparestring 串比较指令2 SCAS Scanstring 串扫描指令 搜索指令 注意 两数相减 只影响标志 不影响操作数 其它操作规定与MOVS同 1 CMPS Comparestring 串比较指令 SI 作为源串地址 DI 目的串地址 串比较指令有3种格式 1 CMPSB 字节 SI SI 1 DI DI 1 2 CMPSW 字 SI SI 2 DI DI 2 3 CMPSD 双字 SI SI 4 DI DI 4 执行操作 ES DI DS SI 结果不存 置标志 字节操作 SI SI 1 DI DI 1字操作 SI SI 2 DI DI 2双字操作 SI SI 4 DI DI 4 MOVSI OFFSETSTRING1MOVDI OFFSETSTRING2MOVCX COUNTCLDREPZCMPSBJNZUNMAT 若串不同 在RESUL单元中置0FFHMOVAL 0 若串相等 在RESULT单元中置00HJMPOUTPTUNMAT MOVAL 0FFHOUTPT MOVRESULT ALHLT REPZCMPSB指令应用 例 利用CMPS指令对STRING1和STRING2二个字符串进行比较 相同在RESULT单元送00H 不同送0FFH 串扫描指令有3种格式 格式 SCASSCASB 字节 AL ES DI DI DI 1SCASW 字 AX ES DI DI DI 2SCASD 双字 AX ES DI DI DI 4 2 SCAS Scanstring 串扫描指令 搜索指令 DI 字符串起始地址 AL 或 AX 关键字 注意 AL 或 AX 目的串两数相减 只影响标志 不影响操作数 其它特性与MOVS同 MOVDI OFFSETBLOCK 设置数据块地址指针MOVCX COUNT 设置数据块长度MOVAL CHAR 关键字送入AL或AXREPNESCASB CX 0 ZF 0继续SCASBJZFOUNDMOVDI 0JMPDONEFOUND DECDIMOVPOINTR DIMOVBX OFFSETBLOCKSUBBX DIMOVDI BX 把搜索次数记下来 且记录关键字地址DONE HLT REPNESCASB指令应用 例 要搜索的关键字放在 AL 或 AX 中 搜索某一数据块或字符串中有无关键字 若有 把搜索次数记下来 且记录关键字地址 若次数为0 表示没有要搜索的关键字 LODB STOSB应用举例 例 一个数据块由大小写英文字母 数字 其他符号组成 用CR ASCII码0DH 结束 数据块首地址为LOCK1 将其传送到BLOCK2为首地址的内存区 并将英文中小写英文字母 a z 转换成大写英文字母 A Z 其余不变 分析 大小写英文字母中相应ASCII码的关系 a z 相应ASCII码为 61H 7AH A Z 相应ASCII码为 41H 5AH英文中小写英文字母 a z 转换成大写英文字母 A Z 只要将小写的ASCII码减去20H即可 程序和流程图如下 程序 LEASI BLOCK1LEADI BLOCK2CLDNEXT LODSBCMPAL 0DHJZDONECMPAL 61HJCOKCMPAL 7BHJNCOKSUBAL 20HOK STOSBJMPNEXTDONE HLT 流程图 小结 串操作指令重复前缀 操作数 地址指针
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!