1.1 概述
彙編語言是你的必經之路。
計算機語言 是 二進制代碼。而彙編語言是對其二進制代碼的加工,進而把一些二進制代碼 加工成了 英文單詞 作為它的助記符。
- 什麼是進制 ?
進制是進位計數制,是人為定義的帶進位的計數方法。比如十進制,是逢十進一,沒有十的代表符号(0 1 2 3 4 5 6 7 8 9)。二進制就是逢二進一,也沒有二的代表符号(0 1)。
- 目錄大綱
- 入門部分:
- 為什麼要學習彙編語言
- 進制如何運算
- 二進制
- 資料寬度
- 有符号數和無符号數
- 原碼反碼補碼(所有人最頭疼的基礎部分)
- 位運算
- 位運算計算(來實作加減乘除)
- 彙編(OD反彙編工具)
- 寄存器
- 記憶體
- 進階部分:
- 彙編指令
- 記憶體複制
- 堆棧的指令
- 彙編如何寫函數
- 堆棧傳參
- 堆棧如何平衡
- 外挂
1.2 為什麼要學習彙編語言
-
什麼是語言 ?
答:人與人交流的工具,它還有很多種。比如中文,英語等…你想和外國人交流最基本的英語是必須要會的,否則沒辦法交流。同理,你想和計算機交流,計算機語言你也是必須要會的!是以要去學習計算機的語言(機器語言 二進制代碼 0 1)
狀态隻分:0 和 1 兩種
我們目前主流的是電子計算機
加減乘除 的本質 都是 "加法"
最早的程式員:他們是用穿孔卡帶來寫程式的。
而對于計算機而言,你要進行四則運算的某個運算時,必須輸入一串二進制代碼,也就是 指令。來 告訴計算機。否則它根本不知道你要幹什麼。。
那麼無論是 資料 還是 指令,都是用 二進制代碼表示的。二進制雖然看似簡單。但過多靈活的排列組合方式,會使二進制代碼變得異常複雜和難記。那麼能簡化嗎? ———— 助記符誕生了!
加:ADD、ADC、INC --> 編譯器 (加法二進制代碼)
減:SUB、SBB、DEC --> 編譯器 (減法二進制代碼)
乘:MUL、IMUL --> 編譯器 (乘法二進制代碼)
除:DIB IDIV --> 編譯器 (除法二進制代碼)
這個編譯器,就相當于一個 翻譯器(翻譯官),為我們 輸入的彙編代碼進行翻譯,變成 二進制代碼。翻譯後,計算機就能看懂了。
是以記憶體裡面 隻改變一個 位,其實就會發生翻天覆地的變化!!!因為計算機語言 是 二進制代碼。而一個二進制 代表一位!
現在彙編 一般用于 底層的編寫和單片機。因為 已經出現了更加簡化的 語言 --> 進階語言(C/C++)

由于,我們現在 都是 向上學習,而忽略了向下學習。導緻C/C++ 的程式員 解決問題可能需要 問 彙編的程式員,而Java 的程式員解決問題可能 要去 問 C/C++ 的程式員。這是很無厘頭的…而我們說如果 你想要真正的 學好計算機這門學科,也需要 對 底層有一定的了解!而對底層了解的第一步 就是 學好 進制 和 彙編!
1.3 進制的思想本質
二進制 ? 0 1
學習進制的障礙 ?
學習進制的障礙:就是我們的十進制!
因為人類天生有十隻手指,是以我們才會選擇 10 進制。是以并不是隻有 十進制,也不是 隻有 十進制 最友善!對于計算機來說 二進制 就是最友善的 進制(也是 它自己的 最優政策)。 ———— 因為計算機 最基本的組成機關是 電子元器件,而電子元器件 最本質的狀态 隻有兩種 即 電流通過 為 1,電流斷開 為 0。
- 進制
1 進制:一進一,結繩計數(無限的 往下 進位)。
2 進制:二進一,計算機 0 1 滿 二 則 進 1
8 進制:八個符号組成(0 1 2 3 4 5 6 7) 縫八進一。
10 進制:十個符号組成(0 1 2 3 4 5 6 7 8 9)逢十進一。
16 進制:十個符号組成(0 1 2 3 4 5 6 7 8 9 A B C D E F)逢十六進一。
進制的本質:其實就是 查數和基本映射表。
- 一進制
1
1 1
1 1 1
- 三進制
0 1 2
10 11 12
100 101 102
110 111 200
201 202 210
211 212 220
221 222 1000
- 八進制
0 1 2 3 4 5 6 7
10 11 12 13 14 15 16 17
20 21 22 23 24 25 26 27
30 …
- 十六進制
0 1 2 3 4 5 6 7 8 9 A B C D E F
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
20 …
- 二進制
0 1
10 11
100 101
110 111
1000 1001
1010 1011
1100 1101
1110 1111
==1111 --> F(16)==其實 二進制 數到 第 15個數不也就相當于 十六進制 的 F 嗎 ?
是以進制的轉換,實際上 來源于 查數!隻是我們後期研究出了友善進制轉換的技巧和公式而已。
進制如果學好了,其實可以解決 1 + 1 = 3 的問題!
解析:符号不是固定的!!是以我們可以寫出自己的 十進制符号。
我的十進制符号:0 1 3 2 4 5 6 7 8 9
那麼 1 + 1 = 3 就是正确的了!
這就屬于比較 進階的進制加密!進制加密如何破解呢?
答:在資料量非常大的前提下,根據統計學,逐漸分析其規律性。然後提取出公式。就知道 這些 符号原本想表達的意思是什麼了。