




已阅读5页,还剩95页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3 4 2算术运算指令 Arithmetic 算术运算指令内容 8086 8088提供加 减 乘 除等六种基本算术操作 一 加法指令 Addition 二 减法指令 Subtraction 三 乘法指令 Multiplication 四 除法指令 Division 五 符号扩展指令 六 十进制调整指令 特点 大部分都影响标志位 不同指令影响不同 1 加 减法指令影响SF ZF AF PF CF OF 2 加1和减1指令不影响CF 3 乘法指令影响CF OF 4 除法指令使大部分标志位的状态不确定 5 对BCD码调整指令对标志位的影响不同 6 转换指令对标志位无影响都可以用于字节 字的运算 双操作数指令除源为立即数外 其余必须有一个操作数为寄存器 单操作数指令不能为立即数 8086具有5种加法操作指令 1 ADD Addition 加法指令2 ADC Addwithcarry 带进位加法指令3 INC Incrementby1 加1指令4 AAA ASCIIadjustforaddition 加法ASCII调整指令5 DAA Decimaladjustforaddition 加法十进制调整指令 一 加法指令 Addition 指令格式 ADDdst src dst dst src Src 立即数 寄存器 存储器 dst 寄存器 存储器 例 ADDCL 10 寄存器 立即数ADDDX SI 寄存器 寄存器ADDAX MEM 寄存器 存储器ADDDATA BX AL 存储器 寄存器ADDBYTEPTRALPHA DI 30H 存储器 立即数 1 ADD Addition 加法指令 格式 ADCdst src dst dst src CFCF 进位标志CF的现行值 上条指令CF值 特点 与ADD同 用途 主要用于多字节运算中 例 ADCCX 300 寄存器 立即数 CFADCAL BL 寄存器 寄存器 CFADCDX COUNT SI 寄存器 存储器 CFADCBLOCK DI BX 存储器 寄存器 CFADCBYTEPTRMEM 6 存储器 立即数 CF 2 ADC Addwithcarry 带进位加法指令 应用举例 计算两个多字节数相加3B74AC60F8H 20D59E36C1H 两个多字节数存放在 DATA1 DATA2开始的单元 流程图 多字节数内存存放 程序 MOVCX 5MOVSI 0 清SICLC 清CFLOOPER MOVAL DATA2 SI ADCDATA1 SI ALINCSI SI 1 SI DECCX CX 1 CX JNZLOOPER CX 0转HLT 停机 特点 可以进行8位 16位的无符号数和带符号数的加法运算 源操作数和目标操作数不能同时为存储器 不能为段寄存器 指令影响标志位的情况 OF 1 8位带符号数相加 和超出范围 128 127 16位带符号数相加 和超出范围 32768 32767 CF 1 8位无符号数相加 和超过255 16位无符号数相加 和超过65535 其他条件标志 SF AF PF ZF 根据定义设定 例 MOVAL 7EH AL 7EHMOVBL 5BH BL 5BHADDAL BL AL 7EH 5BH D9H影响标志位的情况 SF 1 结果最高位 1ZF 0 结果不等于0AF 1 D3位向D4有进位PF 0 1 的个数为奇数CF 0 无进位OF 1 和超过 127 两个正数相加 结果为负 反之亦是 分析两标志位 1 什么叫溢出 什么叫进位 2 有进位就有溢出 没有进位就没有溢出 1 解答 溢出 通常是指带符号数的补码溢出 补码运算能表示范围为 2n 1 2n 1 1 如果运算结果超出该范围 叫补码溢出 此时OF 1 故用OF标志判断带符号数运算是否超范围 结果溢出 进位 是指运算结果的最高位向更高位的进位 有进位 CF 1 无进位 CF 0 用CF标志判断无符号数运算是否超范围 结果溢出 问题思考 2 有进位就有溢出 没有进位就没有溢出 结论 有进位不一定有溢出 没有进位不一定没有溢出 以8位二进制数为例分析一下数的溢出与进位情况 下面分4种情况加以讨论 1 带符号数和无符号数都不溢出 2 无符号数溢出 3 带符号数溢出 4 带符号数和无符号数都溢出 1 带符号数和无符号数都不溢出 2 无符号数溢出 3 带符号数溢出 4 带符号数和无符号数都溢出 1 带符号数相加是否溢出根据OF 1 判断 OF 1 同符号数相加 结果符号与其相反 产生溢出 OF 0 同符号数相加 结果符号与其相同 不产生溢出 异号数相加 不可能溢出 2 无符号数相加是否溢出根据CF 1 判断 CF 1 无符号数相加产生溢出 3 对标志的解释 取决于程序员 如带符号数只关心OF SF 无符号数只关心CF 而OF SF无意义 结论 格式 INCdst B W dst dst 1dst 寄存器 存储器 不能是段寄存器 功能 对指定的目标操作数 1 操作数单元 用途 用于在循环程序中修改地址指针和循环次数 标志位影响情况 影响SF ZF AF PF OF 不影响CF 3 INC Incrementby1 加1指令 操作数类型 可以是寄存器 存储器 不能是段寄存器 例 INCDL 8位寄存器 1INCSI 16位寄存器 1INCBYTEPTR BX SI 存储器 1 字节操作 INCWORDPTR DI 存储器 1 字操作 INCDS 错 8086有7条减法指令 1 SUB Subtraction 减法指令2 SBB Subtractionwithborrow 带进位减法指令3 DEC Decrementby1 减1指令4 NEG Negate 求补指令5 CMP Compare 比较指令6 AAS ASCIIadjustforsubtraction 减法ASCII调整指令7 DAS Decimaladjustforsubtraction 减法十进制调整指令 二 减法指令 Subtraction 格式 SUBdst src dst dst src Src 立即数 寄存器 存储器 dst 寄存器 存储器 例 SUBAL 37H 寄存器 立即数SUBBX DX 寄存器 寄存器SUBCX VAR1 寄存器 存储器SUBARRAY SI AX 存储器 寄存器SUBWORDPTR BX DI 512H 存储器减立即数这种指令影响标志位 AF CF OF PF SF ZF标志 CF 1 无符号数小减大 运算结果溢出 OF 1 带符号数运算溢出 1 SUB Subtraction 减法指令 格式 SBBdst src dst dst src CFCF 借位标志CF的现行值 上条指令CF值 Src 立即数 寄存器 存储器 dst 寄存器 存储器 指令影响标志位 B W数运算情况同SUB 用途 用于多字节数相减 例 SBBBX 100H 寄存器 立即数 CFSBBCX DX 寄存器 寄存器 CFSBBAL DATA1 SI 寄存器 存储器 CFSBBDISP BP BL 存储器 寄存器 CFSBBBYTEPTRALPHA SI 6 96H 存储器 立即数 CF 2 SBB Subtractionwithborrow 带借位减法指令 格式 DECdst B W dst dst 1dst 寄存器 存储器 不能是段寄存器 功能 对指定的目标操作数 1 操作数单元 用途 用于在循环程序中修改地址指针和循环次数 标志位影响情况 影响SF ZF AF PF OF 不影响CF 3 DEC Decrementby1 减1指令 DEC用途举例 MOVAX 0FFFFHCYC DECAXJNZCYCHLT 用于延时时间 格式 NEGdst B W dst 0 dst dst 寄存器 存储器 操作 把操作数按位求反后末位 1 dst 0FFFFH dst 1影响标志 AF CF OF PF SF ZF CF 操作数为0时求补 CF 0 其他情况均使CF 1 OF 对 128或 32768求补 OF 1 否则OF 0 4 NEG Negate 求补指令 应用举例 求绝对值在内存中 从AREA1开始存放100个带符号数 求各数的绝对值存于AREA2的开始单元 流程图 程序 LEASI AREA1LEADI AREA2MOVCX 100CHECK MOVAL SI ORAL AL AL 内容不变 置标志JNSNEXT SF 0转NEXTNEGAL 负数求补NEXT MOV DI AL 送目标INCSIINCDIDECCXJNZCHECKHLT 格式 CMPdst src B W dst src 结果不回送 只置标志 影响标志 AF CF OF PF SF ZF src 立即数 寄存器 存储器 dst 寄存器 存储器 例 CMPAL 0AH 寄存器与立即数比较CMPCX DI 寄存器与寄存器比较CMPAX AREA1 寄存器与存储器比较CMP BX 5 SI 存储器与寄存器比较CMPWORDPTRAMMA 100H 存储器与立即数比较 5 CMP Compare 比较指令 用途 用比较指令来比较两个数之间的关系 两者是否相等 两个数中哪个大 1 根据ZF标志 判断两者是否相等 2 根据CF标志 判断两个无符号数的大小 3 用SF OF标志 判断二个带符号数的大小 1 根据ZF标志 可判断两者是否相等例 CMPAX BXZF 1 AX BX 两者相等ZF 0 AX BX 两者不相等 2 根据CF标志 判断两个无符号数的大小例 比较AX BX寄存器 将大数 AX CMPAX BXJNCNEXT CF 0转NEXTXCHGAX BXNEXT 结论 CF 0 AX BX CF 1 AX BX 3 用SF OF标志 判断二个带符号数的大小 分析略 三 乘法指令 Multiplication 可对字节 字进行操作 两个8位数相乘 结果为16位数 两个16位数相乘 结果为32位数 可对无符号整数或有符号整数进行操作 对应有两条乘法指令 1 MUL Multiply 无符号数乘法指令格式 MULsrc 字节操作 AX AL src 字操作 DX AX AX src 2 IMUL IntegerMultiply 有符号数乘法指令格式 IMULsrc 执行的操作同MUL 只是处理的数据是带符号的 例 MULCLIMULDLMULBYTEPTR BX IMULNUMR 说明 1 被乘数 即dst 隐含在AL或AX中 乘数 即src 由指令寻址 其寻址方式可以是除立即寻址方式之外的任何数据寻址方式 同时 它也决定了乘法是字运算还是字节运算 2 乘法指令对除CF和OF以外的标志位无定义 即状态不定 如果乘积的高一半为0 或为符号位 则CF和OF均为0 否则均为1 四 除法指令 Division 除法与乘法指令一样可对字节 字进行操作 但字节除法是用16位数除以8位数 字除法是用32位数除以16位数 可对无符号整数或有符号整数进行操作 对应有两条除法指令 1 DIV Division 无符号数除法指令格式 DIVsrc 字节操作 AL AX src 的商 AH AX src 的余数 字操作 AX DX AX src 的商 DX DX AX src 的余数2 IDIV IntegerDivision 有符号数除法指令格式 IDIVsrc 执行的操作同DIV 只是处理的数据是带符号的 商和余数均为有符号数 余数符号同被除数符号 例 DIVCLIDIVDLDIVBYTEPTR BP IDIVWORDPTR BX 说明 1 被除数 即dst 隐含在AX或 DX AX 中 除数 即src 由指令寻址 其寻址方式可以是除立即寻址方式之外的任何数据寻址方式 同时 它也决定了除法是字运算还是字节运算 2 除法指令对所有标志位无定义 即状态不定 3 执行除法指令时如果产生商溢出 微处理器就会产生除法错中断 五 符号扩展指令 功能 将带符号的字节类型 8位 数据扩展为字类型 16位 将带符号的字类型 16位 数据扩展为双字类型 32位 1 CBW ConvertBytetoWord 字节转换为字指令格式 CBW 将 AL 的符号扩展到 AH 中去 0 0 0 AH AL D7 D0 D7 D0 正数 1 1 1 AH AL D7 D0 D7 D0 负数 指令执行后不影响标志位 2 CWD ConvertWordtoDoubleWord 字转换为双字指令格式 CWD 将 AX 的符号扩展到 DX 中去 0 0 0 DX AX D15 D0 D15 D0 正数 1 1 1 DX AX D15 D0 D15 D0 负数 指令执行后不影响标志位 例 使NUMB2字节存储单元的内容除以NUMB1字节存储单元的内容 将商存于ANSQ字节单元中 余数存于ANSR字节单元中 MOVAL NUMB2CBWIDIVNUMB1MOVANSQ AL 商MOVANSR AH 余数 六 十进制调整指令 1 AAA ASCIIadjustforaddition 加法ASCII调整指令2 DAA Decimaladjustforaddition 加法十进制调整指令3 AAS ASCIIadjustforsubtraction 减法ASCII调整指令4 DAS Decimaladjustforsubtraction 减法十进制调整指令 DAA指令格式 DAA 调整 AL 中压缩的二进制BCD码的和 方法是 若AF 1or AL 低4位 9 则 AL 加06H 且自动置AF 1 若CF 1or AL 高4位 9 则 AL 加60H 且自动置CF 1 说明 1 该指令对PSW中的OF标志无定义 会影响所有其他标志位 2 该指令应紧跟在加法指令后使用 调整后的和存入AL中 BCD码运算规则 BCD码是十进制数 运算时应满足逢十进一规则 而运算器对数据运算时 都是按照二进制运算规则进行处理的 BCD码为4位二进制数 是逢十六进一 故将BCD码传给运算器进行运算时 其结果需要修正 例 计算1 8的值0001 10001001 1 8 9正确 例 计算5 7的值0101 01111100 011010010 结果大于9 加6修正 5 7 12正确 1 AND Logicaland 逻辑 与 指令2 TEST Testornon dstructivelogicaland 测试指令3 OR Logicalinclusiveor 逻辑 或 指令4 XOR Logicalexclusiveor 逻辑 异或 指令5 NOT Logicalnot 逻辑 非 指令特点 8086可以对8位 或16位操作数执行逻辑操作 逻辑运算是按位操作的 影响标志位 NOT指令除外 其他指令同 CF OF 0 AF未定义 SFZFPF 根据运算结果设置 3 4 3逻辑运算和移位指令 一 逻辑运算指令 格式 ANDdst src B W dst dst src src 立即数 寄存器 存储器 dst 寄存器 存储器 注意 与 指令中操作数不能同时为存储器 两位中有一位为0 或二位都为0 则结果为0 否则为1 举例 ANDAL 0FH 寄存器 立即数ANDCX DI 寄存器 寄存器ANDSI MEM NAME 寄存器 存储器ANDALPHA DI AX 存储器 寄存器ANDwordptr BX SI 0FFFEH 存储器 立即数 1 AND Logicaland 逻辑 与 指令 与 指令的用途 1 清CF 自己 与 自己 操作数不变 CF 0例 ANDAL AL 结果 操作数不变 CF 0 2 使操作数中若干位保持不变 若干位清 0 保持不变的位与 1 相与 清 0 的位与 0 相与 例 若 AL 43HANDAL 0FH AL 03H AL 0 3不变 AL 4 7 0H 屏蔽高4位 01100001 01000001 11011111 61H 41H DFH 与 指令应用举例例 将英文小写字母ASCII转换成大写 小写英文字母ASCII为 a z 61H 7AH大写英文字母ASCII为 A Z 41H 5AH程序 MOVAL z ANDAL 0DFH AL 5AH 格式 TESTdst src B W dst src src 立即数 寄存器 存储器 dst 寄存器 存储器 执行操作 二个操作数相与的结果不保存 置标志位 操作类型举例 TESTBH 7 寄存器 立即数TESTSI BP 寄存器 寄存器TESTDI TABLE BX 寄存器 存储器TEST SI CH 存储器 寄存器TESTwordptr BX DI 6ACEH 存储器 立即数 2 TEST Testornon dstructivelogicaland 测试指令 用途 是条件转移指令的先行指令 常用于检测一些条件是否满足 但又不希望改变原有的操作数的情况 检测的位与 1 相与 不检测的位与 0 相与 在此指令后边常加一条条件转移指令 例 判断A单元中数据的奇偶性设 AL 0AEH程序 MOVAL A AL 0AEHTESTAL 01HJZEVEN 结果 0为偶数转EVEN 奇数处理 EVEN 偶数处理检测 AL 的最低位是否为0 若为0转EVEN 格式 ORdst src B W dst dst src dst 寄存器 存储器 src 立即数 寄存器 存储器 注意 或 指令中操作数不能同时为存储器 两位操作数中任一位为1 或都为1 则该位 结果 1 否则为0 举例 ORBL 0F6H 寄存器立即数ORAH BL 寄存器寄存器ORCL BETA BX DI 寄存器存储器ORGAMMA SI DX 存储器寄存器ORBYTEPTRMEM BYTE 80H 存储器立即数 3 OR Logicalinclusiveor 逻辑 或 指令 影响标志位 CF 0F 0 AF未定义 SFZFPF 用途 1 清CF 自己与自己 或 操作数不变 CF 0例 ORAL AL AL 不变 CF 0 2 使某个操作数若干位保持不变 若干位置1 保持不变的位与 0 或 位置1的与 1 或 3 将两个操作数信息组合 若 AL 03H用OR指令组合使 AL 33H 3 ORAL 30H AL 33H 格式 XORdst src B W dst dst src dst 寄存器 存储器 src 立即数 寄存器 存储器 执行的操作 对指令的两个操作数进行按位 异或 运算 二位不相同时为1 相同时为0 注意 异或 指令中操作数不能同时为存储器 举例 XORDI 23F6HH 寄存器 立即数XORSI DX 寄存器 寄存器XORCL BUFFER 寄存器 存储器XORMEM BX AX 存储器 寄存器XORbyteptrTABLE BP SI 3DH 存储器 立即数 4 XOR Logicalexclusiveor 逻辑 异或 指令 影响标志位 CF 0F 0 AF未定义 SFZFPF 用途 1 使操作数清0 同时清CF 自己与自己 异或 操作数清0 CF 0例 XORAL AL AL 0 CF 0 2 对某些特定位求反时 这些特定位与 1 让某些位保持不变时 这些位与 0 例 将 AL 中的第1 3 5 7位求反 0 2 4 6位保持不变 MOVAL 0FHXORAL 0AAH 3 异或指令常用于判断两个操作数是否相等 例 测试 AL 中的值是否等于33H XORAL 33HJZMATCH比较三条 AX 清 0 指令 XORAX AX 清AX 清CF 2个字节 3个T SUBAX AX 清AX 清CF 2个字节 3个T MOVAX 0 清AX 不影响标志位 3个字节 4个T XOR清 0 指令在多字节累加程序中十分有用 格式 NOTdst B W指令操作数只有一个 指令对操作数按位求反 执行操作 字节求反 dst 0FFH dst 字求反 dst 0FFFFH dst 源操作数 寄存器 存储器 不能是立即数 影响标志位 对标志位无影响 例 NOTCX 16位寄存器求反NOTBYTEPTR BP 8位存储器求反例 NOTAL执行前 AL 00111100B 执行后 AL 11000011B 5 NOT Logicalnot 逻辑 非 指令 综合举例 1 使某些位置 0 INAL 61H AL B 设备控制寄存器 想使此位为0执行指令 ANDAL 0FDH即可 2 使某些位置 1 INAL 61H AL B执行指令 ORAL 02 想使此位为 1 3 使某些位求反 INAL 61H AL 0 XORAL 02H 00000010 1 1 AND指令用来对指令的指定位清 0 2 OR指令常用来对某些位置1 3 XOR指令用在程序开头 使某个寄存器清 0 还常用来对某些位取反 4 NOT指令对某个数据取反 1成补码 5 TEST指令用来检测指定位为1 还是0 逻辑指令应用小结 8086有8条移位指令 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操作 指令中的dst 寄存器 存储器寻址方式 cnt 表示移位次数cnt 1 1可写在指令中 不能是1以外的常数 cnt 1 用CL存放移位次数 不能是其他寄存器 如 SALAX 1MOVCL 4SALAX CL利用移位指令编制乘除程序 执行时间比直接用乘除指令快 速度可提高5 6倍 标志位设置 算逻移位指令 执行多次移位指令后对CF OF的影响 CF 从目标操作数移出的最后一位 OF不定 执行一次移位指令指令后对CF OF的影响 OF用于判断移位后最高有效位是否发生变化 移位后最高位的值被改变 OF 1 否则 无变化时 OF 0 CF根据各条指令的规定设置 SF ZF PF AF无定义 循环移位指令 SF ZF PF AF不影响 OF CF影响情况在指令中讲 ROL RCL影响标志OF CF情况相同 ROR RCR影响标志OF CF情况相同 4条 SHL SHR SAL SAR 1 SHL SAL Shiftlogicalleft shiftarithmeticleft 逻辑左移 算术左移指令格式 SHLdst cnt 逻辑左移指令 B WSALdst cnt 算术左移指令 B Wdst 寄存器 存储器寻址方式 cnt 表示移位次数cnt 1 1可写在指令中 cnt 1 用CL存放移位次数 1 算逻移位指令 执行操作 相当于无符号数 2功能 SHL SAL指令操作示意图如下图所示 指令格式举例 SHLAH 1SALSI CLSALWORDPTR BX 5 1SHLBYTEPTR CL dst 2 SHR Shiftlogicalright 逻辑右移指令格式 SHRdst cnt 逻辑右移指令 B W执行操作 相当于无符号数 2功能 SHR指令操作示意图如下图所示 dst 寄存器 存储器寻址方式 指令格式举例 SHRBL 1SHRAX CLSHRBYTEPTR DI BP 1SHRWORDPTRBLOCK CL dst 3 SAR Shiftarithmeticright 算术右移指令格式 SARdst cnt 算术右移指令 B W执行操作 相当于带符号数 2功能 对负数向下舍入IDIV指令对负数向上舍入 下页解释 SAR指令操作示意图如下图所示 dst dst 寄存器 存储器寻址方式 指令格式举例 SARAL 1SARDL CLSARWORDPTRTABLE SI 1SARBYTEPTRSTATUS CL 用SAR指令与用IDIV指令做除法的区别 用SAR指令做除法 对负数向下舍入 MOVAX 81H AX 127SARAX 1 AX 64用IDIV指令做除法 IDIV指令对负数向上舍入 MOVAX 81H AX 127MOVCL 2IDIVCL AL 63 AH 1 应用举例 BX 84F0H 1 若 BX 无符号数 求 BX 2SHRBX 1 BX 4278CF 0 OF 1 SF 0 ZF 0 2 若 BX 带符号数 求 BX 4MOVCL 02H或SARBX 1SARBX CLSARBX 1 CF 0 OF无意义 SF 1 ZF 0 4条 ROL ROR RCL RCR 共同点 ROL ROR不含CF循环移位指令 操作数移动8次后还原 RCL RCR含CF循环移位指令 操作数移动9次后还原 影响标志OF CFROL RCL影响标志OF CF情况相同 ROR RCR影响标志OF CF情况相同 SF ZF PF AF不影响 2 循环移位 1 ROL Rotateleft 不含CF循环 小循环 左移指令格式 ROLdst cnt 不含CF循环左移指令 B W执行操作 ROL指令操作示意图如下图所示移动8次后操作数还原 dst 指令格式举例 ROLBH 1ROLDX CLROLWORDPTRTABLE DI 1ROLBYTEPTRALPHA CL 影响标志OF CF情况 左循环移动1次后 移位后 最高有效位 符号位 是否发生变化 如果移位后 最高有效位发生变化则 OF 1 否则 无变化时 OF 0 CF根据各条指令的规定设置 左循环移动多次后 OF值不定 CF 从目标操作数移出的最后一位 SF ZF PF AF不影响 2 ROR Rotateright 不含CF循环 小循环 右移指令格式 RORdst cnt 不含CF循环右移指令 B W执行操作 ROR指令操作示意图如下图所示右移8次后操作数还原 dst 指令格式举例 RORCX 1ROLBH CLROLBYTEPTRBETA 1ROLWORDPTRCOUNT CL 影响标志OF CF情况 右循环移动1次后 如果移位后 最高有效位发生变化则 OF 1 否则 OF 0 CF根据各条指令的规定设置 右循环移动多次后 OF值不定 CF 从目标操作数移出的最后一位 SF ZF PF AF不影响 3 RCL Rotateleftthroughcarry 含CF循环 大循环 左移指令格式 RCRdst cnt 含CF循环左移指令 B W执行操作 RCL指令操作示意图如下图所示 左移9次后操作数还原 dst 指令格式举例 RCLBX 1RCLDL CLRCLBYTEPTRARRAY DI 1RCLWORDPTR SI BP CL影响标志 RCL与ROL影响标志OF CF情况相同 4 RCR Rotaterightthroughcarry 含CF循环 大循环 右移指令格式 RCRdst cnt 含CF循环左移指令 B W执行操作 RCR指令操作示意图如下图所示 右移9次后操作数还原 dst 指令格式举例 RCRDI 1RCRSI CLRCRWORDPTR SI BX 3 1RCLBYTEPTRPORT CL影响标志 RCR与ROR影响标志OF CF情况相同 小结 循环移位指令 Rotate 与移位指令 Shift 不同点 循环移位指令移位后 操作数中原来各数位的信息不会丢失 只是移动了位置 必要时可以恢复 循环移位指令可以对操作数进行测试 例 测试 AL 5 0MOVCL 3ROLAL CLJNCZERO ZERO 利用带进位循环移位指令将两个寄存器或存储器单元组合起来一起移位 例 将DX AX组合起来构成32位寄存器向左移一位 如下图所示 程序 SHLAX 1RCLDX 1 32位寄存器向左移一位 串 就是内存中一段地址相连的字节或字 串操作 对串中各项进行操作 也叫数据块操作 8088有5种基本操作 1 MOVS Movestring 串传送指令2 LODS Loadfromstring 从串取指令3 STOS Storeintostring 存入串指令4 CMPS Comparestring 串比较指令5 SCAS Scanstring 串扫描指令 3 4 4串操作指令 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重复串操作直到 CX 0为止格式 REP串指令串指令可为 MOVS STOS LODS MOVS MoveString 串传送指令LODS LoadfromString 从串取指令STOS StoreintoString 存入串指令 一 与REP相配合工作的MOVS STOS LODS指令 REP重复串操作执行过程 1 当 CX 0 结束REP 执行REP后的下一条指令 2 当 CX 0 CX CX 1 3 执行REP后的串指令 4 重复 1 3 REP执行流程图 串传送有3种格式 1 MOVSdst src ES DI DS SI MOVSB 字节 SI SI 1 DI DI 1MOVSW 字 SI SI 2 DI DI 2当方向标志CLD DF 0时用 STD DF 1时用 该指令不影响标志位 如 MOVSES BYTEPTR DI DS SI MOV单指令不能完成存储单元之间的数据传送 MOVS指令就是为解决存储单元之间数据传送而设置的 1 MOVS Movestring 串传送 将内存的数据段中以AREA1为首地址的100个数据 传送到附加段中的AREA2为首地址的区域 用MOVS串操作指令编程 MOVAX SEGAREA1MOVDS AXMOVAX SEGAREA2MOVES AXMOVSI OFFSETAREA1MOVDI OFFSETAREA2MOVCX 100CLD DF 0 增址传送REPMOVSB orMOVSES BYTEPTR DI DS SI 例 应用MOV指令编程 MOVAX SEGAREA1MOVDS AXMOVAX SEGAREA2MOVES AXMOVSI OFFSETAREA1 将ARE1偏移地址 SIMOVDI OFFSETAREA2MOVCX 100LOOP1 MOVAL SI AL DS SI MOVES DI AL ES DI AL INCSIINCDIDECCXJNELOOP1 归纳 在执行MOVS指令时 应该先做好以下准备工作 1 数据段中源串首地址 或反向传送末地址 存入SI寄存器中 2 附加段中目的串首地址 或反向传送末地址 存入DI寄存器中 3 数据串长度存入CX寄存器 4 建立方向标志建立方向标志介绍两条指令 CLD cleardirectionflag 功能 DF 0 执行串处理指令时可以使地址自动 1或 2 STD setdirectionflag 功能 DF 1 执行串处理指令时可以使地址自动 1或 2 从串取指令有3种格式 LODSsrc 字节 AL DS SI SI SI 1 字 AX DS SI SI SI 2LODSB 字节 AL DS SI SI SI 1LODSW 字 AX DS SI SI SI 2功能 该指令把由 SI 指定的数据段中某单元内容 AL 或 AX 中 DF 0 SI SI 1或 2DF 1 SI SI 1或 2 2 LODS Loadfromstring 从串取指令 LODS应用注意 1 指令允许用段跨越前缀来指定非数据段的存储区 2 该指令不影响标志位 一般说来 它不与REP联用 每重复一次 累加器的内容就改变一次 AL 中只能保持最后一个元素 当缓冲区中的一串字符需要多次取出测试时可用本指令 适用于在一个循环中 用基本串操作指令构成复杂串操作时很有用 将 AL 或 AX ES DI DI 1或 2 DI 存入串指令有3种格式 STOSdst 字节 ES DI AL DI DI 1 字 ES DI AX DI DI 2 2 STOSB 字节 ES DI AL DI DI 1 3 STOSW 字 ES DI AX DI DI 2用途 与REP联用时 CX 缓冲区长度 用来建立一串相同的值 3 STOS Storeintostring 存入串指令 例 在附加段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 DECCXJNZ GOONHLT REPE REPZ当相等 为零时重复串操作格式 REPE 或REPZ 串指令REPZ前缀 当相等重复串指令可为 CMPS SCAS1 CMPS Comparestring 串比较指令2 SCAS Scanstring 串扫描指令 搜索指令 二 与REPE REPZ和REPNE REPNZ联合工作的CMPS和SCAS指令 执行过程 当 CX 0 结束REPZ 执行REPZ下一条指令 2 当 CX 0 将CX的内容减1 执行REPZ后的串指令 3 当ZF 1 返回 1 4 当ZF 1 则结束REPZ执行REPZ下一条指令 注意 C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年C证安全员模拟题集及答案解析
- 2025年中小学英语教师面试英语预测题集
- 2025年美术教育专业能力测评试卷及答案解析
- 2025年旅游规划实务考试试题及答案解析
- 2025年劳动保护知识题库含答案
- 2025年技术经纪人入门面试题库及答案
- 2025年建筑建材工程师资格考试试题及答案解析
- 2025年环境卫生管理师专业资格考试试题及答案解析
- 2025年化学分析师专业资格考试试题及答案解析
- 2025年市场调研分析师职位面试指南及模拟题解答
- 胃恶性肿瘤的护理查房
- 洛阳香江万基铝业有限公司马行沟铝土矿矿产资源开采与生态修复方案
- 南沙海战历史知识PPT南沙海战历史介绍PPT课件(带内容)
- 2023年河北省面向阿里籍高校毕业生招聘笔试参考题库附带答案详解
- LY/T 2692-2016榉树育苗技术规程
- GB/T 33982-2017分布式电源并网继电保护技术规范
- 注册会计师CPA《公司战略与风险管理》课件
- 【2020】高中英语人教版必修一词汇 词性转换
- 部编版小学六年级上册《道德与法治》全册复习课件
- GJB标准化大纲
- 钢筋混凝土排水管二级管配筋设计图册
评论
0/150
提交评论