天天看點

計算機底層入門 01 概述&&語言&&進制的思想本質1.1 概述1.2 為什麼要學習彙編語言1.3 進制的思想本質

1.1 概述

彙編語言是你的必經之路。

計算機語言 是 二進制代碼。而彙編語言是對其二進制代碼的加工,進而把一些二進制代碼 加工成了 英文單詞 作為它的助記符。

  • 什麼是進制 ?
進制是進位計數制,是人為定義的帶進位的計數方法。比如十進制,是逢十進一,沒有十的代表符号(0 1 2 3 4 5 6 7 8 9)。二進制就是逢二進一,也沒有二的代表符号(0 1)。
  • 目錄大綱
  • 入門部分:
  1. 為什麼要學習彙編語言
  2. 進制如何運算
  3. 二進制
  4. 資料寬度
  5. 有符号數和無符号數
  6. 原碼反碼補碼(所有人最頭疼的基礎部分)
  7. 位運算
  8. 位運算計算(來實作加減乘除)
  9. 彙編(OD反彙編工具)
  10. 寄存器
  11. 記憶體
  • 進階部分:
  1. 彙編指令
  2. 記憶體複制
  3. 堆棧的指令
  4. 彙編如何寫函數
  5. 堆棧傳參
  6. 堆棧如何平衡
  7. 外挂

1.2 為什麼要學習彙編語言

  • 什麼是語言 ?

    答:人與人交流的工具,它還有很多種。比如中文,英語等…你想和外國人交流最基本的英語是必須要會的,否則沒辦法交流。同理,你想和計算機交流,計算機語言你也是必須要會的!是以要去學習計算機的語言(機器語言 二進制代碼 0 1)

我們目前主流的是電子計算機

狀态隻分:0 和 1 兩種

最早的程式員:他們是用穿孔卡帶來寫程式的。

加減乘除 的本質 都是 "加法"

而對于計算機而言,你要進行四則運算的某個運算時,必須輸入一串二進制代碼,也就是 指令。來 告訴計算機。否則它根本不知道你要幹什麼。。

那麼無論是 資料 還是 指令,都是用 二進制代碼表示的。二進制雖然看似簡單。但過多靈活的排列組合方式,會使二進制代碼變得異常複雜和難記。那麼能簡化嗎? ———— 助記符誕生了!

加:ADD、ADC、INC --> 編譯器 (加法二進制代碼)

減:SUB、SBB、DEC --> 編譯器 (減法二進制代碼)

乘:MUL、IMUL --> 編譯器 (乘法二進制代碼)

除:DIB IDIV --> 編譯器 (除法二進制代碼)

這個編譯器,就相當于一個 翻譯器(翻譯官),為我們 輸入的彙編代碼進行翻譯,變成 二進制代碼。翻譯後,計算機就能看懂了。

是以記憶體裡面 隻改變一個 位,其實就會發生翻天覆地的變化!!!因為計算機語言 是 二進制代碼。而一個二進制 代表一位!

現在彙編 一般用于 底層的編寫和單片機。因為 已經出現了更加簡化的 語言 --> 進階語言(C/C++)

計算機底層入門 01 概述&&語言&&進制的思想本質1.1 概述1.2 為什麼要學習彙編語言1.3 進制的思想本質

由于,我們現在 都是 向上學習,而忽略了向下學習。導緻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 就是正确的了!

這就屬于比較 進階的進制加密!進制加密如何破解呢?

答:在資料量非常大的前提下,根據統計學,逐漸分析其規律性。然後提取出公式。就知道 這些 符号原本想表達的意思是什麼了。