[日] 矢澤久雄 著,李逢俊 譯,[日] 日經(jīng)Software 校
日文版重印41次!
“計(jì)算機(jī)組成原理”圖解趣味版
蹲馬桶就能看懂的編程基礎(chǔ)知識(shí)
如何向小學(xué)生講解CPU和二進(jìn)制?
如何向中學(xué)生講解內(nèi)存和磁盤?
如何向女高中生講解操作系統(tǒng)的原理?
如何向老奶奶說(shuō)明顯示器和電視的不同?
如果你完全沒(méi)有思路,就應(yīng)該讀一讀這本書(shū)。
以圖配文,深入講解編程基礎(chǔ)知識(shí)
語(yǔ)言通俗,即使是文科生也能看得懂
特設(shè)“如果是你,你會(huì)怎么做?”專欄,生動(dòng)有趣
《圖靈程序設(shè)計(jì)叢書(shū):程序是怎樣跑起來(lái)的》一書(shū)從計(jì)算機(jī)的內(nèi)部結(jié)構(gòu)開(kāi)始講起,以圖配文的形式詳細(xì)講解了二進(jìn)制、內(nèi)存、數(shù)據(jù)壓縮、源文件和可執(zhí)行文件、操作系統(tǒng)和應(yīng)用程序的關(guān)系、匯編語(yǔ)言、硬件控制方法等內(nèi)容,目的是讓讀者了解從用戶雙擊程序圖標(biāo)到程序開(kāi)始運(yùn)行之間到底發(fā)生了什么。同時(shí)專設(shè)了“如果是你,你會(huì)怎樣介紹?”專欄,以小學(xué)生、老奶奶為對(duì)象講解程序的運(yùn)行原理,頗為有趣?!秷D靈程序設(shè)計(jì)叢書(shū):程序是怎樣跑起來(lái)的》圖文并茂,通俗易懂,非常適合計(jì)算機(jī)愛(ài)好者及相關(guān)從業(yè)人員閱讀。
矢澤久雄,YAZAWA股份有限公司董事長(zhǎng)兼總經(jīng)理。GrapeCity信息技術(shù)集團(tuán)顧問(wèn)。電腦作家之友會(huì)會(huì)長(zhǎng)。
曾在某大型電子公司從事過(guò)電腦生產(chǎn),在SoftwareHouse做過(guò)程序員,現(xiàn)主要從事軟件包的開(kāi)發(fā)工作。工作之余筆耕不綴,從電路到編程語(yǔ)言均有涉及。代表作有《計(jì)算機(jī)是怎樣跑起來(lái)的》《使用C語(yǔ)言學(xué)習(xí)程序設(shè)計(jì)的基礎(chǔ)》《征服C++類和繼承》等。自稱軟件藝人。
李逢俊,北京易網(wǎng)聯(lián)信信息技術(shù)有限公司CEO。
哈爾濱工業(yè)大學(xué)碩士畢業(yè)后在日工作8年,曾在日本知名游戲公司擔(dān)任移動(dòng)互聯(lián)網(wǎng)部門負(fù)責(zé)人,擁有豐富的移動(dòng)游戲開(kāi)發(fā)及運(yùn)營(yíng)經(jīng)驗(yàn)。2011年回國(guó)創(chuàng)業(yè),創(chuàng)建易網(wǎng)聯(lián)信團(tuán)隊(duì),致力于精品手機(jī)游戲的開(kāi)發(fā)及運(yùn)營(yíng)。
第1章 對(duì)程序員來(lái)說(shuō)CPU是什么
1.1 CPU的內(nèi)部結(jié)構(gòu)解析
1.2 CPU是寄存器的集合體
1.3 決定程序流程的程序計(jì)數(shù)器
1.4 條件分支和循環(huán)機(jī)制
1.5 函數(shù)的調(diào)用機(jī)制
1.6 通過(guò)地址和索引實(shí)現(xiàn)數(shù)組
1.7 CPU的處理其實(shí)很簡(jiǎn)單
第2章 數(shù)據(jù)是用二進(jìn)制數(shù)表示的
2.1 用二進(jìn)制數(shù)表示計(jì)算機(jī)信息的原因
2.2 什么是二進(jìn)制數(shù)
2.3 移位運(yùn)算和乘除運(yùn)算的關(guān)系
2.4 便于計(jì)算機(jī)處理的“補(bǔ)數(shù)”
2.5 邏輯右移和算術(shù)右移的區(qū)別
2.6 掌握邏輯運(yùn)算的竅門
COLUMN如果是你,你會(huì)怎樣介紹?--向小學(xué)生講解CPU和二進(jìn)制
第3章 計(jì)算機(jī)進(jìn)行小數(shù)運(yùn)算時(shí)出錯(cuò)的原因
3.1 將0.1 累加100次也得不到10
3.2 用二進(jìn)制數(shù)表示小數(shù)
3.3 計(jì)算機(jī)運(yùn)算出錯(cuò)的原因
3.4 什么是浮點(diǎn)數(shù)
3.5 正則表達(dá)式和EXCESS系統(tǒng)
3.6 在實(shí)際的程序中進(jìn)行確認(rèn)
3.7 如何避免計(jì)算機(jī)計(jì)算出錯(cuò)
3.8 二進(jìn)制數(shù)和十六進(jìn)制數(shù)
第4章 熟練使用有棱有角的內(nèi)存
4.1 內(nèi)存的物理機(jī)制很簡(jiǎn)單
4.2 內(nèi)存的邏輯模型是樓房
4.3 簡(jiǎn)單的指針
4.4 數(shù)組是高效使用內(nèi)存的基礎(chǔ)
4.5 棧、隊(duì)列以及環(huán)形緩沖區(qū)
4.6 鏈表使元素的追加和刪除更容易
4.7 二叉查找樹(shù)使數(shù)據(jù)搜索更有效
第5章 內(nèi)存和磁盤的親密關(guān)系
5.1 不讀入內(nèi)存就法運(yùn)行
5.2 磁盤緩存加快了磁盤訪問(wèn)速度
5.3 虛擬內(nèi)存把磁盤作為部分內(nèi)存來(lái)使用
5.4 節(jié)約內(nèi)存的編程方法
5.5 磁盤的物理結(jié)構(gòu)
第6章 親自嘗試壓縮數(shù)據(jù)
6.1 文件以字節(jié)為單位保存
6.2 RLE算法的機(jī)制
6.3 RLE算法的缺點(diǎn)
6.4 通過(guò)莫爾斯編碼來(lái)看哈夫曼算法的基礎(chǔ)
6.5 用二叉樹(shù)實(shí)現(xiàn)哈夫曼編碼
6.6 哈夫曼算法能夠大幅提升壓縮比率
6.7 可逆壓縮和非可逆壓縮
COLUMN如果是你,你會(huì)怎樣介紹?--向沉迷游戲的中學(xué)生講解內(nèi)存和磁盤
第7章 程序是在何種環(huán)境中運(yùn)行的
7.1 運(yùn)行環(huán)境=操作系統(tǒng)+硬件
7.2 Windows克服了CPU以外的硬件差異
7.3 不同操作系統(tǒng)的API不同
7.4 FreeBSDPort幫你輕松使用源代碼
7.5 利用虛擬機(jī)獲得其他操作系統(tǒng)環(huán)境
7.6 提供相同運(yùn)行環(huán)境的Java虛擬機(jī)
7.7 BIOS和引導(dǎo)
第8章 從源文件到可執(zhí)行文件
8.1 計(jì)算機(jī)只能運(yùn)行本地代碼
8.2 本地代碼的內(nèi)容
8.3 編譯器負(fù)責(zé)轉(zhuǎn)換源代碼
8.4 僅靠編譯是法得到可執(zhí)行文件的
8.5 啟動(dòng)及庫(kù)文件
8.6 DLL文件及導(dǎo)入庫(kù)
8.7 可執(zhí)行文件運(yùn)行時(shí)的必要條件
8.8 程序加載時(shí)會(huì)生成棧和堆
8.9 有點(diǎn)難度的Q&A
第9章 操作系統(tǒng)和應(yīng)用的關(guān)系
9.1 操作系統(tǒng)功能的歷史
9.2 要意識(shí)到操作系統(tǒng)的存在
9.3 系統(tǒng)調(diào)用和高級(jí)編程語(yǔ)言的移植性
9.4 操作系統(tǒng)和高級(jí)編程語(yǔ)言使硬件抽象化
9.5 Windows操作系統(tǒng)的特征
COLUMN如果是你,你會(huì)怎樣介紹?--向超喜歡手機(jī)的女高中生講解操作系統(tǒng)的作用
第10章 通過(guò)匯編語(yǔ)言了解程序的實(shí)際構(gòu)成
10.1 匯編語(yǔ)言和本地代碼是一一對(duì)應(yīng)的
10.2 通過(guò)編譯器輸出匯編語(yǔ)言的源代碼
10.3 不會(huì)轉(zhuǎn)換成本地代碼的偽指令
10.4 匯編語(yǔ)言語(yǔ)法是“操作碼+操作數(shù)”
10.5 最常用的mov指令
10.6 對(duì)棧進(jìn)行push和pop
10.7 函數(shù)調(diào)用機(jī)制
10.8 函數(shù)內(nèi)部的處理
10.9 始終確保全局變量用的內(nèi)存空間
10.1 0臨時(shí)確保局部變量用的內(nèi)存空間
10.1 1循環(huán)處理的實(shí)現(xiàn)方法
10.1 2條件分支的實(shí)現(xiàn)方法
10.1 3了解程序運(yùn)行方式的必要性
第11章 硬件控制方法
11.1 應(yīng)用和硬件關(guān)?
11.2 支撐硬件輸入輸出的IN指令和OUT指令
11.3 編寫(xiě)測(cè)試用的輸入輸出程序
11.4 外圍設(shè)備的中斷請(qǐng)求
11.5 用中斷來(lái)實(shí)現(xiàn)實(shí)時(shí)處理
11.6 DMA可以實(shí)現(xiàn)短時(shí)間內(nèi)傳送大量數(shù)據(jù)
11.7 文字及圖片的顯示機(jī)制
COLUMN如果是你,你會(huì)怎樣介紹?--向鄰居老奶奶說(shuō)明顯示器和電視機(jī)的不同
第12章 讓計(jì)算機(jī)“思考”
12.1 作為“工具”的程序和為了“思考”的程序
12.2 用程序來(lái)表示人類的思考方式
12.3 用程序來(lái)表示人類的思考習(xí)慣
12.4 程序生成隨機(jī)數(shù)的方法
12.5 活用記憶功能以達(dá)到更接近人類的判斷
12.6 用程序來(lái)表示人類的思考方式
COLUMN如果是你,你會(huì)怎樣介紹?--向常光臨的酒館老板講解計(jì)算機(jī)的思考機(jī)制
附錄讓我們開(kāi)始C語(yǔ)言之旅
C語(yǔ)言的特點(diǎn)
變量和函數(shù)
數(shù)據(jù)類型
標(biāo)準(zhǔn)函數(shù)庫(kù)
函數(shù)調(diào)用
局部變量和全局變量
數(shù)組和循環(huán)
其他語(yǔ)法結(jié)構(gòu)
大家還記得自己初次接觸計(jì)算機(jī)時(shí)的情形嗎?想必多數(shù)讀者使用的都是Windows系統(tǒng),應(yīng)該也有不少讀者使用VisualStudio和Java等集成開(kāi)發(fā)環(huán)境(IDE,Integrated Development Environment,即集成了編程所需的各種工具的開(kāi)發(fā)軟件)開(kāi)發(fā)過(guò)程序。Windows的圖形化操作界面,大大提高了計(jì)算機(jī)操作的便利性,而利用集成開(kāi)發(fā)環(huán)境開(kāi)發(fā)程序,就像用繪圖軟件畫(huà)圖一樣簡(jiǎn)單。由此可見(jiàn),這是一個(gè)便利的時(shí)代。
然而,現(xiàn)實(shí)卻不容樂(lè)觀,我們?cè)谙硎苓@些方便的同時(shí)也付出了代價(jià)。雖然擁有一定的編程能力,卻無(wú)法進(jìn)一步提高自身技能;知識(shí)應(yīng)用能力的不足導(dǎo)致無(wú)法編寫(xiě)源程序。越來(lái)越多的程序員正為這些問(wèn)題而煩惱。個(gè)中原因在于,大家不了解程序運(yùn)行的根本機(jī)制。
“雙擊程序圖標(biāo),程序開(kāi)始運(yùn)行”,作為一名程序員,對(duì)程序的了解僅僅停留在這一表層是不行的。我們還應(yīng)該了解更深層的機(jī)制:加載到內(nèi)存中的機(jī)器語(yǔ)言程序,由CPU進(jìn)行解析和運(yùn)行,進(jìn)而計(jì)算機(jī)系統(tǒng)整體的控制和數(shù)據(jù)運(yùn)算也開(kāi)始運(yùn)行。了解了程序的運(yùn)行機(jī)制后,就能找到編寫(xiě)源程序的方法。
本書(shū)以通俗易懂的方式來(lái)解析程序的運(yùn)行機(jī)制,適合想要學(xué)習(xí)編程的讀者,迫切希望提升技能的初級(jí)程序員,以及對(duì)計(jì)算機(jī)較為熟悉的中級(jí)用戶閱讀。為了便于說(shuō)明,書(shū)中涉及了不少計(jì)算機(jī)硬件知識(shí),不過(guò)本書(shū)的主題依然是編程,也就是軟件。
《日經(jīng)Software》雜志上連載過(guò)名為“程序是怎樣跑起來(lái)的”的文章,而本書(shū)就是在整合以上內(nèi)容的基礎(chǔ)上創(chuàng)作的。2001年10月,本書(shū)第1版出版后,受到了眾多讀者的歡迎,我們也收到了很多反饋信息。
大部分讀者表示“了解了CPU的寄存器和內(nèi)存的運(yùn)行方式,也知道了自己編寫(xiě)的程序的運(yùn)行機(jī)制”,收獲頗豐。不過(guò)也有編程經(jīng)驗(yàn)較少的讀者表示“內(nèi)容有點(diǎn)難”。
值此第2版出版之際,我再次核對(duì)了全文,大幅增加了寄存器和棧等內(nèi)容的相關(guān)說(shuō)明,并作了詳細(xì)的注釋。實(shí)例程序的代碼也由原來(lái)的VisualBASIC語(yǔ)言,換成了更便于說(shuō)明程序運(yùn)行機(jī)制的C語(yǔ)言,并在書(shū)的末尾添加了一個(gè)輔助章節(jié),對(duì)C語(yǔ)言進(jìn)行了簡(jiǎn)單的介紹。通過(guò)這樣的改動(dòng),相信即便是覺(jué)得第1版有點(diǎn)難的讀者,也會(huì)感到滿意。
無(wú)論任何事情,了解其本質(zhì)非常重要。只有了解了本質(zhì)才能提高利用效率。這樣一來(lái),即使有新技術(shù)出現(xiàn),也能很容易地理解并掌握。接下來(lái),就讓我們一起在本書(shū)中探索程序的奧秘,尋求程序的本質(zhì)吧。
矢沢久雄
更多建議: