學習筆記 2011 07

2021-05-26 10:27:30 字數 1896 閱讀 6542

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開發人員可以快速地支援實現這些模式的服務和應用程式。他們將在任...