匯編 (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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM