汇编命令2
19、NEG(求补)写法:NEG reg/mem作用:求补就是求相反数,即:dest=0-dest;20、CMPXCHG(比较交换)写法:CMPXCHG reg/mem, reg;作用:AL/AX/EAX-oprd1,如果等于0,则oprd1=oprd2,否则,AL/AX/EAX=oprd1;即:比较AL/AX/EAX与第一个操作数,如果相等,则置ZF=1,并复制第二个操作数给第一个操作数;否则,置ZF=0,并复制第一个操作数给AL/AX/EAX。说明:CMPXCHG主要为实现原子操作提供支持CMPXCHG8B(8字节比较交换指令)写法:CMPXCHG8B MEM64;功能:将EDX:EAX中的64位数与内存的64位数进行比较,如果相等,则置ZF=1,并存储ECX:EBX到mem64指定的内存地址;否则,置ZF=0,并设置EDX:EAX为mem64的8字节内容21、MUL(无符号乘法)写法:MUL reg/mem;作用:当操作数为8位时,AX=AL*src;当操作数为16位时,DX:AX=AX*src;当操作数为32位时,EDX:EAX=EAX*src;22、IMUL(带符号位乘法)写法:IMUL reg/mem;(作用同上)IMUL reg16,reg16/mem16,imm16;IMUL reg32,reg32/mem32,imm32;IMUL reg16,imm16/reg16/imm16;IMUL reg32,reg32/mem32/imm32;注意:没有两个操作数均为8位的多操作数乘法。对于同一个二进制数,采用MUL和IMUL执行的结果可能不同,设AL=0FF,BL=1,分别执行下面的指令,会得到不同的结果:Mul bl; AX=0FFH(255);Imul bl; AX=0FFFFH(-1)(高一半为低一半的扩展)23、DIV(无符号除法 )/IDIV(带符号数除法)写法:DIV reg/mem;/IDIC reg/mem作用:如果操作数是8位,AX%SRC,结果商在AL、余数在AH中;如果操作数是16位,DX:AX%SRC,结果商在AX,余数在DX中;如果操作数是32位,EDX:EAX%SRC,结果商在EAX,余数在EDX中;注意:不能直接实现8位数除8位数、16位数除16位数、32除32,若需要这样,则必须先把除数符号扩展或零扩展到16、32、64位,然后用除法指令。对于IDIV,余数和被除数符号相同,如:-5 IDIV 2 = 商 -2,余数:-1;在下列情况下,会使CPU产生中断:一:除数为0 ;二:由于商太大,导致EAX\AX或AL不能容纳,从而产生了溢出。-----------------BCD码调整指令(十进制调整指令)待补充------------------------------------------------24、关于BCD码:BCD码就是一种十进制数的二进制编码表示,分为压缩BCD码和非压缩BCD码,压缩BCD码用4个二进制位表示一个十进制位,即用0000B~1001B表示十进制0~9,如0110 0100 0010 1001B表示6429用8位二进制来表示一个十进制叫非压缩BCD码,其中,低四位与压缩BCD码相同,高四位无意义。压缩BCD码调整指令包括DAA(加法的压缩BCD码调整)和DAS(减法的压缩BCD码调整)写法:DAA;作用:调整AL中的和为压缩BCD码。功能:使用DAA指令时,通常先执行ADD/ADC指令,将两个压缩BCD码相加,结果存放在AL中,然后使用该指令将AL调整为压缩BCD码格式。DAA的调整算法:IF(AL低4位>9 或 AF=1)THENAL=AL+6;AF=1;ENDIFIF( AL高4位>9或CF=1)THENAL=AL+60H;CF=1;ENDIF说明:CF反映压缩BCD码相加的进位。DAS;作用:调整AL中的差为压缩BCD码。功能:使用DAS指令时,通常先执行SUB/SBB指令,将两个压缩BCD码相减,结果存放在AL中,然后使用该指令将AL调整为压缩BCD码格式。DAS的调整算法:IF(AL低4位>9 或 AF=1)THENAL=AL-6;AF=1;ENDIFIF( AL高4位>9或CF=1)THENAL=AL-60H;CF=1;ENDIF说明:CF反映压缩BCD码相减的借位。特别注意,如果使用DAA或DAS指令,则参加加法或减法运算的操作数应该是压缩BCD码,如果将任意两个二进制数相加或相减,然后调整,则得不到正确的结果。关键是调整的规则,其中AF标志位就是专门为BCD码调整设计的,当低四位有向高四位进位或借位时,值为1。而CF就是最高位有进位或者借位时,为1.非压缩BCD码调整指令,包括AAA,AAS,AAM,AAD。写法:AAA ;作用:调整AL中的和为非压缩BCD码;调整后,AL高4位等于0,AH=AH+产生的CF功能:使用AAA指令时,通常先执行ADD/ADC指令,以AL为目的操作数,将两个非压缩BCD码(与高位无关)相加,然后使用AAA将AL调整为非压缩BCD码格式,且高4位等于0,同时,将调整产生的进位加到AH中。AAA调整算法:IF(AL低4位>9 或者 AF=1)THENAL=AL+6;AH=AH+1;AF=1;CF=1;ELSEAF=0;CF=0;ENDIFAL=AL AND OFH;;AL高4位清0写法:AAS ;作用:调整AL中的差为非压缩BCD码;调整后,AL高4位等于0,AH=AH-产生的CF功能:使用AAS指令时,通常先执行SUB/SBB指令,以AL为目的操作数,将两个非压缩BCD码(与高位无关)相减,然后使用AAS将AL调整为非压缩BCD码格式,且高4位等于0,同时,将调整产生的借位从AH中减去。
页:
[1]