(筆記)學習彙編語言1

視頻地址:http://study.163.com/course/courseMain.htm?courseId=1003265009程序員

近來研究操做系統,涉及到彙編語言相關知識點,故有此學習和記錄!

彙編語言基礎:

  1. 課程講解 追求的目標,是從本質上知道程序是如何運行的。 好比if(){}else{}中,如何讓else的那個不執行? 工做幾年的程序員最大的悲哀,是隻會調函數、畫界面,進行重複勞動。作安全、架構,或者管理…… 基礎最重要!安全

  2. 編譯器 編譯器將彙編語言轉爲機器語言 inc eax --> 0100 0000 C語言編譯器 將 A+B --> 0100 0000 本質是編譯器愈來愈牛b,是編譯器幫咱們作了更多事情。 不懂彙編的人,必定不專業。 不懂堆棧的人,必定不瞭解外掛。架構

  3. 進制 如將十進制定義爲:由十個符號組成,分別是0132876945. 那麼,這個新的定義作成加密,會對解密者形成極大的困擾 量子計算機:不止0和1函數

  4. 數據寬度: 存儲超過最大值時,直接丟棄。學習

  5. 無符號數和有符號數 無符號數(正數):10011010直接存儲,表示0x9A,或154(十進制) 有符號數:最高位是0爲正數!!1爲負數。 負數與正數編碼規則不一樣。 原碼:當前數的絕對值(正數的反碼,補碼,原碼相同) 反碼(負數):符號位不變,其他位取反 補碼(負數):反碼加一(負數以補碼形式存儲) 即,-1:原碼,反碼,補碼 1000 0001 1111 1110 1111 1111 //FF:內存中以補碼存儲編碼

  6. 位運算 你能夠說知道2+3=5,可是若是僅僅只作CRUD,太low。 寫代碼就是體力活,理解原理很重要。 int表示32位加密

    1. 與運算: 都是1纔是1,不然爲0 1011 0001 and(&) 1101 1000

    1001 0000
    1. 或運算: 只要有一個爲1就是1 1011 0001 or(|) 1101 1000

    1111 1001
    1. 異或運算: 不同的時候是1 1011 0001 xor(^) 1101 1000

    0110 1001
    1. 非運算: 0就是1,1就是0 not(~) 1101 1000

    0010 0111
    1. 左移: 各二進位所有左移若干位,高位丟棄,低位補0 shl(<<)
      1101 1000 左移2位爲:0110 0000
    2. 右移(略複雜):分兩種狀況 各二進位所有右移若干位,低位丟棄,高位補0或者補符號位 shr 1101 0101 -> 0011 0101 對應C語言(>>) unsigned int a = 10 printf("%d\n",a>>2); ---------------- sar 1101 0101 -> 1111 0101 對應C語言(>>) int a = 10; printf("%d\n",a>>2);
    3. 總結:計算機只會作位運算,沒法直接作加減乘除。
  7. 經過位運算實現加減乘除:操作系統

    1. 加法:先異或,再與(與後作左移)。再將兩個結果異或,直到與運算結果爲0爲止code

    2. 減法,至關於加法 4 - 5 = 4 + (-5)視頻

    3. 乘法:X * Y,乘法的本質是加法(x個y)

    4. 除法:本質是減法,X/Y表示X能減去多少個Y

相關文章
相關標籤/搜索