1.1 資訊就是位+上下文
include int大部分系統都是使用ascii碼表示文字字元,每個字元都是以單位元組的整數值表示,每個字是乙個整數值,如下圖所示為**的第一行。其他的所有檔案都稱為二進位制檔案。#imain()
nclu
dedio.
h>
35105
11099
108117
100101
3260
115116
100105
11146
10462
1.2 程式被其他程式翻譯成不同的格式
hello程式要被計算機執行,需要轉換成低階機器語言指令。低階機器語言指令由二進位制的數構成。
從文字檔案形式的源**轉化到機器能讀懂的二進位制檔案是由編譯器完成。編譯器也是程式。編譯器轉化過程分為四個階段:
hello.c原始檔 -> 預處理器:被修改的原始檔=hello.i(仍是文字)hello.i -> 編譯器 =hello.s匯程式設計序(仍是文字)
hello.s -> 彙編器 =hello.o (二進位制)
hello.o -> 鏈結器 = hello 可執行程式 (二進位制)
一,預處理階段:根據#include 命令 將讀取系統標頭檔案stdio.h的內容,將其插入到hello.c檔案中,得到了hello.i檔案。(stdio.h也是c源**)
二,編譯階段: 將c語言源**翻譯成組合語言源**。組合語言屬於低階的機器語言指令。組合語言跟硬體相關性很強,不同的硬體會有不同的組合語言。組合語言屬於低階語言。不同的高階語言,在相同硬體的機器上通過自身語言的編譯器編譯出的組合語言是相同的。
三,彙編階段:彙編器將hello.s組合語言源**翻譯成機器指令,並把這些指令打包成hello.o(二進位制檔案)。hello.o是二進位制檔案,它的每個位元組的二進位制數字代表的是機器語言指令,並不代表乙個文字字元。所以,用文字編輯器開啟乙個二進位制檔案時,裡面顯示的是亂碼。
四,鏈結階段:hello.c中呼叫了printf函式。這個函式是每個c編譯器都會提供的標準c庫的乙個函式。printf函式存在於名為printf.o的已經編譯好了的目標檔案中。通過連線,就可以將printf.o目標檔案合併到hello.o檔案中,最終得到了hello檔案,這是乙個可執行目標檔案。
1.3 了解編譯系統如何工作是大有益處的
1.4 處理器讀並解釋儲存在儲存器中的指令
unix以及類unix系統中,shell是乙個程式。它是人機互動介面,使用者通過shell給機器發出指令。它接收使用者輸入的指令,如果第乙個字元不是內建的shell命令,那麼shell會認為是乙個可執行檔案的名稱,載入並執行這個檔案。
1.4.1 系統的硬體組成
1.匯流排
匯流排是一組電子管,各個計算機的部件通過它傳送資料資訊。匯流排傳送資料的長度,是乙個定長的位元組快,稱為字。字的位元組數稱為字長,根據系統的不同而不同。32位匯流排的字長是4位元組,64位匯流排的字長就是8位元組。匯流排傳送資料都是乙個字乙個字的傳送,那麼根據系統不同,32位的機器每次能傳送4個位元組,64位的每次能傳送8個位元組。
2.i/o裝置
鍵盤、滑鼠、顯示器、磁碟這些都是i/o裝置。每個i/o裝置都通過乙個控制器或介面卡與匯流排相連。
3.主存
主存由一組動態隨機訪問儲存器晶元組成。從邏輯上講,主存每個儲存單位為1個位元組,每個位元組都有其唯一的位址,位址從0開始。
4.處理器
cpu核心是乙個字長的儲存裝置,稱為程式計數器(pc)。pc在任何時刻,都指向主存中的某條機器語言指令(即儲存的是該指令所在主存的位址)。
第一章 計算機系統漫遊
一開始翻開書,大量的新概念,密集的知識,這不是讓人頭疼的主要原因。這本書於我而言,不僅僅是提公升計算機基礎那麼簡單,更多的是,放下那顆浮躁的心,同時接受自己的平凡,放慢腳步,腳踏實地。一開始連進製轉換都整不明白的我,經過乙個多月的 心靈洗禮 漸漸對書本上的概念有了那麼一點點感覺,更重要的是,沒有那麼...
第一章,計算機系統漫遊
1.1 資訊就是位 上下文 大部分的現在計算機系統都使用 ascii 標準來表示文字字元,hello.c程式是以位元組序列的方式儲存在檔案中的。系統中所有的資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的使用者資料以及網路上傳送的資料,都是由一串位元表示的。區分不同資料物件的唯一方法時我們讀到這些...
第一章 計算機系統漫遊
1.1 資訊就是位 上下文 位的理解 源程式如hello.c,實際上是由值0和1組成的位,8個位組成一組,成為位元組,如00011000。每個位元組表示程式中的某些文字字元,每個位元組都有乙個整數值。如 n 它的整數值為10,即00001010。若檔案由有ascii字元構成,則稱之為文字檔案,所有其...