看的是王爽老師的《匯編語言》第三版
基礎知識
一.匯編語言的誕生
上古時期在匯編語言還未出現的時候,那時的程序員還只能用二進制也就是所謂的機器語言寫代碼,將0和1編成的程序代碼打在紙帶或卡片上,再將紙帶卡片輸入計算機,進行運算;代碼相當抽象,查錯就更難了;難以辨別和記憶成為了機器語言的瓶頸;
但是怎么可能會有問題能難住程序員呢,于是匯編語言誕生了!
二.匯編語言VS機器語言
匯編語言的主體是匯編指令,它相比機器指令更容易書寫和記憶;
例如
匯編指令 | 機器指令 | 操作 |
---|---|---|
mov ax,bx | 1000100111011000 | 寄存器BX的內容送到AX |
先不用關心這指令,一眼就看出如果寫代碼只能從匯編語言和機器語言選一個的話我肯定選匯編;
當然匯編語言無法直接讓計算機運行,它需要編譯成機器碼然后在讓計算機運行;
三.匯編語言的組成
- 匯編指令:機器碼的助記符,有對應的機器碼;
- 偽指令 : 沒有對應的機器碼,由編譯器執行,計算機并不執行;
- 其他符號:如加減乘除符號,也是由編譯器識別,沒有對應的機器碼;
匯編指令容易理解,至于偽指令和其他符號他們既然沒有對應的機器碼計算機也不執行為什么要有它們呢?上文寫到匯編語言需要編譯成機器語言后才能被計算機運行,這原因其中之一就是為了協助編譯器編譯匯編源代碼,其二就是為了匯編源代碼更好的可讀性;
四.CPU與儲存器
- cpu可以直接使用的信息在存儲器(內存)中存放;(這里我狠查了一波CPU能否直接從硬盤拿數據,但是發現資料方向慢慢走向了操作系統所以就沒深入下去)
- 在存儲器中指令和數據沒有任何區別都是二進制;(后面的學習會寫到CPU如何區分數據和指令)
- 存儲器的大小跟它存儲單元的多少有關,一個存儲單元可以存儲一個字節,從零開始編號;
- 連接CPU與其他芯片的導線稱為總線,總線從邏輯上又分三類,地址總線,控制總線,數據總線;
地址總線
在計算機中一根導線可以傳送兩種穩定狀態高電平,低電平,用二進制表示就是0和1;如果有十根地址總線,那么它就能表示2的十次方個不同數據,編號從0到1023;這也是CPU能找到的地址范圍;
數據總線
數據總線的寬度決定了CPU與外界數據傳輸的速度;一根數據總線能傳1bit二進制數據,如果傳送數據超過數據總線一次能傳送數據的最大值,那就得分批傳了;例如只有一根數據總線,要傳個3過去,那只能一次傳0010,第二次傳0001,分兩次傳完;
控制總線
CPU對外部器件的控制通過控制總線來進行,例如需要讀取和寫入數據到內存,那么就需要一根讀取控制線,和一根寫入控制線;
其實這些是在為CPU如何對存儲器進行讀寫做鋪墊
年輕的時候送過快遞感覺作為例子很貼切;
企鵝男孩是一名快遞員,他每天的工作就是把貨物送到規定的地址;這里企鵝男孩就是CPU,貨物就是數據信息,貨物的地址就是存儲單元的地址信息,而送快遞這個動作就是傳達的控制信息;送快遞簡直和CPU讀寫存儲器如出一轍;
- 1.CPU需要確定存儲單元的地址;(快遞員確定貨物地址)
- 2.器件選擇,讀取信息還是寫入信息;(快遞也是一樣,你是要給客戶去送快遞還是給客戶發個快遞);
- 3.讀或寫的數據;(送到的快遞,或者收回的快遞)
這些都是我對王爽老師《匯編語言》第一章的總結,有不對的地方還請多指教;書中前言真是寫到心坎了,也是我的瓶頸,學習框架也好語言也好總是沒有深度,這是因為我開始學習編程就沒走一個循序漸進的路線,所以導致知識不成體系不夠扎實,不想做編程界的泥腿子,向成為一名真·程序員前進;