系統程式
作者:陳鍾誠 著
書號:F7501
定價:480 元
附件:附1片光碟片
出版:旗標出版社
網站:http://sp1.wikidot.com
ISBN:978-957-442-827-4
F7501.gif 第 1 章 系統軟體
第 2 章 電腦的硬體結構
第 3 章 組合語言
第 4 章 組譯器
第 5 章 連結與載入
第 6 章 巨集處理器
第 7 章 高階語言
第 8 章 編譯器
第 9 章 虛擬機器
第 10 章 作業系統
第 11 章 嵌入式系統
第 12 章 系統軟體實作

簡介

系統程式的教科書已經 20 年沒有改變, 理論與實務已經完全脫節, 如果您需要一本理論清楚、卻又深入實務的教科書, 現在, 您已經找到了:

  • 在理論上, 以簡化後的處理器, 降低組合語言的複雜度, 提升學習成效。
  • 在程式上, 採用 C 語言實作出組譯器、虛擬機與編譯器, 以程式印證理論。
  • 在產業上, 採用 gcc、make、Dev C++ 等工具, 讓學生熟悉系統軟體的操作。

本書網站 http://sp1.wikidot.com 內有豐富的補充教材, 歡迎上網閱讀!

章節目錄

第 1 章 系統軟體
 1.1 何謂系統程式?
 1.2 系統程式與系統軟體
 1.3 本書的章節架構
 1.4 實務案例:Dev C++開發環境
 1.5 實務案例:GNU 開發工具

第 2 章 電腦的硬體結構
 2.1 CPU0 處理器
 2.2 CPU0 的指令集
 2.3 CPU0 的運作原理
 2.4 CPU0 的程式執行
 2.5 實務案例:IA32 處理器

第 3 章 組合語言
 3.1 基本範例
 3.2 陣列存取
 3.3 副程式呼叫
 3.4 進階語法
 3.5 實務案例:IA32的組合語言

第 4 章 組譯器
 4.1 組譯器簡介
 4.2 組譯器的演算法
 4.3 完整的組譯範例
 4.4 實務案例:處理器IA32上的GNU組譯器

第 5 章 連結與載入
 5.1 簡介
 5.2 目的檔
 5.3 連結器
 5.4 載入器
 5.5 動態連結
 5.6 實務案例:GNU連結工具
 5.7 實務案例:目的檔格式 – a.out
 5.8 實務案例:Linux 的動態載入技術

第 6 章 巨集處理器
 6.1 組合語言的巨集
 6.2 巨集處理的演算法
 6.3 實務案例:C語言的巨集

第 7 章 高階語言
 7.1 簡介
 7.2 語法理論
 7.3 語義理論
 7.4 執行環境
 7.5 實務案例:C語言的語法、語義與執行環境

第 8 章 編譯器
 8.1 簡介
 8.2 詞彙掃描
 8.3 語法剖析
 8.4 語義分析
 8.5 中間碼產生
 8.6 組合語言產生
 8.7 最佳化
 8.8 實務案例:gcc編譯器

第 9 章 虛擬機器
 9.1 簡介
 9.2 中間碼
 9.3 CPU0 的虛擬機
 9.4 實務案例:Java的 JVM 虛擬機
 9.5 實務案例:微軟的 Virtual PC 虛擬機

第 10 章 作業系統
 10.1 簡介
 10.2 行程管理
 10.3 記憶體管理
 10.4 檔案與輸出入
 10.5 實務案例:Linux作業系統

第 11 章 嵌入式系統
 11.1 輸出入
 11.2 驅動程式
 11.3 輪詢機制
 11.4 中斷機制
 11.5 啟動程式
 11.6 系統整合
 11.7 實務案例:新華Creator S3C2410 實驗板

第 12 章 系統軟體實作
 12.1 簡介
 12.2 組譯器實作
 12.3 虛擬機實作
 12.4 剖析器實作
 12.5 編譯器實作
 12.6 整合測試
歡迎留言
陳鍾誠 (guest) 04 Jun 2010 00:22

作者竭誠的歡迎任何人留言!

Unfold 歡迎留言 by 陳鍾誠 (guest), 04 Jun 2010 00:22
江建安 (guest) 07 Mar 2011 07:46

陳老師您好, 拜讀您的大作後開始了C的學習, 然而目前遇到2個疑問是關於記憶體位址和所佔用大小, 懇請解惑, 程式如下

#include <stdio.h>;

int main() {
//整數變數, 佔用4byte
int a = 0;
//倍精度浮點數, 佔用8byte
double b = 0;
//輸出大小後, 各顯示4與8, 這部分沒問題
printf("大小:\n int: %d\n double: %d\n", sizeof(a), sizeof(b));

//輸出a與b的位址
//問題1: 在我的機器上測試, a的位址是22FF44, b的位址是22FF38, 為何a顯示的位址數字大於b?(經查證, 是因為x86採用little endian, 所以順序顛倒, 但不知其所以然)
//問題2: 為何b被定址為與a相差12的位址? 我認為宣告int a佔用了4byte, 表示在a定址後經過了4byte才又定址b, 所以b應該被定址為22FF40, 難道是傳說中的隨機存取機制???)
printf("位址:\n a: %X\n b: %X\n", &a, &b);

system("pause");
return 0;
}

Last edited on 07 Mar 2011 07:57 by Anonymous (114.42.201.x) Show more
Unfold by 江建安 (guest), 07 Mar 2011 07:46
Mr.K (guest) 18 Mar 2011 14:07

問題1:
在你的機器上測試 那些區域變數的位址是由OS處理的虛擬位址
a的位址大於b的位址 是因為a和b是區域變數 執行時期是使用到記憶體的stack部份
而stack是由高位址往低位址 在陳老師的系統程式書裡P5-19圖5.14(a)
所以a的位址大於b的位址
至於你說的little endian是指資料放進記憶體的順序 應該和你問的問題無關

問題2:
通常是由OS處理看它想要安排什麼樣的位址
想要連續位址 可以對Compiler做設定對齊位址 或是 使用陣列或結構 等…
但我猜是因為你用64Bits的OS+64Bits的CPU

以上我說的不一定全對
只是就我所知道的給你參考

有錯的話還請給予指正
謝謝

Last edited on 18 Mar 2011 15:43 by Anonymous (119.77.224.x) Show more
Unfold by Mr.K (guest), 18 Mar 2011 14:07
Mr.K (guest) 18 Mar 2011 14:06

麻煩陳老師幫我刪除這篇多打的留言
謝謝

Last edited on 18 Mar 2011 14:30 by Anonymous (119.77.224.x) Show more
Unfold by Mr.K (guest), 18 Mar 2011 14:06
Smithf60 (guest) 03 Jul 2014 06:24

Hi to all, how is everything, I think every one is getting more from this site, and your views dekddkkekdebeegd

Unfold by Smithf60 (guest), 03 Jul 2014 06:24
Pharma229 (guest) 22 May 2015 22:38

Very nice site!

Unfold by Pharma229 (guest), 22 May 2015 22:38
Pharme552 (guest) 24 May 2015 13:44

Very nice site!

Unfold by Pharme552 (guest), 24 May 2015 13:44
Add a New Comment

Post preview:

Close preview
or Sign in as Wikidot user
(will not be published)
- +
Permanent Link Edit Delete


本網頁的作者、授權與引用方式

作者
陳鍾誠,於金門大學資訊工程系,電子郵件:wt.ude.uqn|ccc#wt.ude.uqn|ccc,網站:http://ccckmit.wikidot.com
授權
本文採用創作共用 (Creative Common) 3.0 版的 姓名標示─非商業性─相同方式分享 授權條款,歡迎轉載或修改使用,但若做為商業使用時必須取得授權,引用本文時請參考下列格式。
中文版 (APA格式)
陳鍾誠 (20 May 2010 03:42),(網頁標題) 系統程式,(網站標題) 教科書:系統程式,20 May 2010 03:42,取自 http://sp1.wikidot.com/book ,網頁修改第 13 版。
英文版 (APA格式)
Chung-Chen Chen (20 May 2010 03:42), Retrieved 20 May 2010 03:42 from http://sp1.wikidot.com/book, Page Revision 13.
作者:陳鍾誠

Mobify empowers marketers and developers to create amazing mobile web experiences.

Mobify