汇编 (NOT)按位取反指令

知识点:

 (NOT)按位取反指令
 逻辑取反(!)
 按位取反(~)
 SETZ(SETE)  取ZF位值保存
 SETNZ(SETNE)将ZF位值取反后保存


一、逻辑取反(!)
  !111 =0;
  !0=1;
  SETZ(SETE) //取ZF标志位值 放到寄存器里
  SETNZ(SETNE) 

 二、按位取反NOT指令
   VC中提供运算符为(~)
    11111111111111111111111111011110 //取反运算后
    00000000000000000000000000100001

// asm_NOT.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
	int i,j;
	i=0x8877;
	j=!i; //0;

	__asm mov edx,edx
	j=~i;//00000000000000001000100001110111
	     //11111111111111110111011110001000
	     //FFFF7788
       
	  // 11011
	  // 00100
//00401000  /$  55            PUSH EBP
//00401001  |.  8BEC          MOV EBP,ESP
//00401003  |.  83EC 08       SUB ESP,8
//00401006  |.  C745 FC 77880>MOV DWORD PTR SS:[EBP-4],8877
//0040100D  |.  33C0          XOR EAX,EAX                              ;  eax=0;
//0040100F  |.  837D FC 00    CMP DWORD PTR SS:[EBP-4],0               ;  i>0
//00401013  |.  0F94C0        SETE AL                                  ;  AL=ZF
//00401016  |.  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX
//00401019  |.  8BD2          MOV EDX,EDX                              ;  __asm mov edx,edx
//0040101B  |.  8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
//0040101E  |.  F7D1          NOT ECX                                  ;  ecx=~i; 按位与
//00401020  |.  894D F8       MOV DWORD PTR SS:[EBP-8],ECX
//00401023  |.  33C0          XOR EAX,EAX
//00401025  |.  8BE5          MOV ESP,EBP
//00401027  |.  5D            POP EBP
//00401028  \.  C3            RETN


	return 0;
}


小结:
NOT: 取反运算,0变成1,1变成0
,  如二进制   NOT 1011=0100
AND: 按位与运算,有0为0,全1为1,如二进制  1011  AND 1101 = 1001


OR  : 按位或运算, 有1为1,全0为0,如二进制  101100  OR  110101 =111101

 

posted @ 2017-02-07 09:29  whzym111  阅读(18704)  评论(0编辑  收藏  举报