(筆記)學習彙編語言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
    2. 或運算:
        只要有一個爲1就是1
            1011 0001
    or(|)   1101 1000
    -----------------
            1111 1001
    3. 異或運算:
        不同的時候是1
            1011 0001
    xor(^)  1101 1000
    -----------------
            0110 1001
    4. 非運算:
        0就是1,1就是0
    not(~)  1101 1000
    -----------------
            0010 0111
    5. 左移:
        各二進位所有左移若干位,高位丟棄,低位補0
    shl(<<)  
        1101 1000 左移2位爲:0110 0000
    6. 右移(略複雜):分兩種狀況
        各二進位所有右移若干位,低位丟棄,高位補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);
    7. 總結:計算機只會作位運算,沒法直接作加減乘除。加密

7. 經過位運算實現加減乘除:
    1. 加法:先異或,再與(與後作左移)。再將兩個結果異或,直到與運算結果爲0爲止操作系統

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

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

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

相關文章
相關標籤/搜索