if(a++ > 0)
011a16bc mov eax,dword ptr [a]
011a16bf mov ecx,dword ptr [a]
011a16c2 add ecx,1
011a16c5 mov dword ptr [a],ecx
011a16c8 test eax,eax //此處對eax進行and操作.......只影響flags...只知道影響zf位...但別人說影響of位還真是不知道怎麼影響......當比較的數字不是0而是其他數字的時候會用cmp命令.........置於為什麼只有0才用test指令是因為可以通過zf位直接進行判斷...而其他數字不可以....同時兩個暫存器的比較比與記憶體單元和立即數等進行比較要快.....
011a16ca jle main+48h (11a16d8h) //根據flags進行跳轉....至於為什麼要這麼做....人人理解是因為條件跳轉一般都是用flags進行實現的...當然jmp這些無條件跳轉除外...
之所以要先 test eax, eax 是因為這樣做即可以保證原來的數不變...又可以改變flags位...從而進行跳轉....以前理解a++和++a老是覺得前面是先判斷後加...後面是先加再判斷..
關鍵這一跳......當上面的比較結果是<=0的話...那麼就跳轉...eax是沒有進行加的....所以說是先判斷後進行加(準確點不能這麼說..因為編譯器分開做了)
011a16cc mov dword ptr [ebp-0e8h],1
011a16d6 jmp main+52h (11a16e2h)
011a16d8 mov dword ptr [ebp-0e8h],0
011a16e2 cmp dword ptr [ebp-0e8h],0
011a16e9 je main+64h (11a16f4h)
//以上為什麼要寫成兩個暫存器...當你拿乙個暫存器來寫的時候
//mov eax, mm
//cmp eax, 0 按照約定要先判斷
//je ******x 當你跳轉了以後到了另外乙個域中在進行加很顯然不合適..........所以用兩個暫存器...乙個進行加法操作...乙個進行判斷...邏輯上是先判斷再進行加....其實在進行判斷之前記憶體中的那個數字已經加1了....
b++;
011a16eb mov eax,dword ptr [b]
011a16ee add eax,1
011a16f1 mov dword ptr [b],eax
if(++a > 0)
011a16f4 mov eax,dword ptr [a]
011a16f7 add eax,1
011a16fa mov dword ptr [a],eax
011a16fd cmp dword ptr [a],0 //與零進行比較...結果只改變flags...這裡我不是很明白....為什麼不可以用 test eax, eax ...eax的值沒變...而且暫存器進行and比較不是很快很多麼?
011a1701 jle main+7ch (11a170ch) //這個好理解...直接加了然後判斷.....
b++;
011a1703 mov eax,dword ptr [b]
011a1706 add eax,1
011a1709 mov dword ptr [b],eax
學習筆記 雜湊學習筆記
hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...
學習筆記 CentOS 學習筆記01
簡單的做個課堂筆記 虛擬機器用的是vmware,系統是centos cd etc sysconfig network scripts pwdls 顯示列表 cat ifcfg eth0 檢視檔案內容 vi ifcfg eth0 進入vi編輯器 onboot no 原始設定 x逐字刪除 d刪除整行 a...
筆記 spring cloud 學習筆記
1 spring cloud 是什麼 spring cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具 例如配置管理,服務發現,斷路器,智慧型路由,微 控制匯流排 分布式系統的協調導致了樣板模式,使用spring cloud開發人員可以快速地支援實現這些模式的服務和應用程式。他們將在任...