ASM 03

    技术2022-11-07  27

    算术运算指令,逻辑运算指令,移位指令 一.  算数运算指令 1加减法运算指令:ADD,ADC,INC,SUB,SBB,DEC,NEG,CMP 1-1.ADD(add)加法 受影响的标志位:AF、CF、OF、PF、SF和ZF 1-2.ADC(add with carry)带进位加法 将该指令执行前的CF值加至目的操作数,受影响的标志位:AF、CF、OF、PF、SF和ZF 举例:01 ADC eax,ecx  

     

    1-3.INC(increment)加1 受影响的标志位:AF、OF、PF、SF和ZF,不影响CF,指令的功能是把操作数的值加1。 1-4.SUB(subtract)减法 受影响的标志位:AF、CF、OF、PF、SF和ZF 1-5.SBB(subtract withborrow)带借位减法 减去该指令执行前CF值,受影响的标志位:AF、CF、OF、PF、SF和ZF 举例:01 SBB eax,ecx Eax=20 Ecx=10  

     

     

     

     

    1-6.DEC(Decrement)减1 受影响的标志位:AF、OF、PF、SF和ZF,不影响CF,指令的功能是把操作数的值减去1。 1-7.NEG(Negate)求补 受影响的标志位:AF、CF、OF、PF、SF和ZF,指令的功能:操作数=0-操作数,即改变操作数的正负号 1-8.CMP(Compare)比较 2 乘除法运算指令:MUL,IMUL,DIV,IDIV 2-1.MUL(Unsigned Multiple)无符号数乘法 和 8086 功能用法一样,即指令中只给出一个操作,被乘 数已默认,如果指令给出的操作数是 32 位的话,被乘数默认为 EAX,那么乘积将存放在 EDX:EAX 中,其中 EDX 存放高 32 位,EAX 存放低 32 位,如果此时 EDX=0,即高 32 位为 0 的话,那么 OF=0,CF=0,否则被置 1。如果指令给出的操数作是16 位的话,被乘数默认为 AX 那么乘积将放在 DX:AX 中,其中 DX 中将存放高 16 位,AX 中存放低 16 位。如果指令给出的操作数是8 位的话,被乘数默认为 AL,那么乘积将放在 AX,AH 中存 放高 8 位,AL中存放低 8 位。 举例:01 mul ebx  

     

    2-2.IMUL(Signed Multiple)带符号数乘法 举例:01.IMUL EAX,EBX  

     

    02.IMUL EAX,EBX,3  

     

    2-3.DIV(Unsigned divide)无符号数除法 和 8086 一样,指令给出一个操作数,被除数已默认。如果指令中给出的操作数为 32, 那么被除数将是EDX: EAX,最终的商将存放在EAX,余数将存放在 EDX 中。如果指令给出操作数为 16 位,那么被除数为 EAX,最终得到的商放在 AX,余数放在EAX 的高16位。如果指令中给出的操作数为8 位,那么被除数是16 位,最终得到的商将放在 AL中,余数放在 AH 中。 举例:01. DIV ebx  

     

     

    2-4.IDIV(Signed divide)带符号数除法 3 符号扩展指令:CBW,CWD 3-1.CBW(Convert byte to word)字节转换为字 3-2.CWD(Convert word to doubule word)字转换双字 3-3.CWDE 将AX中16位有符号的符号位扩展到EAX的高16位中,即把AX的16位有符号数扩展到32位后,送EAX 举例:01.CWDE  

     

    3-4.CDQ 将Eax中32位有符号数扩展到EDX;EAX寄存器对中,使之成为64位有符号数,即将EAX中的符号位扩展到EDX 举例:01.CDQ  

     

    二.        逻辑运算指令 AND,OR,NOT,XOR,TEST 1.ADD(and)逻辑与 2.OR(or)  逻辑或 3.NOT(not)逻辑非 4.XOR(exclusive or)异或 5.TEST(test)测试 三.        移位指令 SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR 1.SHL(shift logical left)逻辑左移 2.SHR(shift logical right)逻辑右移 3.SAL(shift arithmetic left)算数左移 4.SAR(shift arithmetic right)算数右移 说明:SAL, SHL相当于乘法;SAR,SHR 相当于除法 (2的关系) 5.ROL(Rotate left)循环左移 6.ROR(Rotate right)循环右移 7.RCL(Rotate left through cazzy)带进位算数左移 8.RCR(Rotate right thourgh cazzy)带进位循环右移

    最新回复(0)