系統程式 -- RSS

微軟的組譯器 (ML.exe)

by ccckmitccckmit 26 Mar 2010 00:56

微軟組譯器 MASM 的執行檔在 Visual Studio 2008 當中稱為 ml.exe,您可以啟動 Visual Studio 的命令列工具,然後使用 ml /Fl <asmFile> 的方式進行組譯,並且同時產生出組譯報表檔。以下是我們組譯 sum.asm 的過程,參數中的 /Fl 選項會導致 ml 組譯器將組譯報表輸出到 sum.lst 檔當中,範例 4.19顯示了該組譯報表的內容。報表檔中顯示了各個指令的編碼與位址、變數的位址、區段的長度等等。

進階的組譯器功能

by ccckmitccckmit 26 Mar 2010 00:21

為了更進一步說明組譯器的設計原理,並且更詳細的考量各種組譯器設計的進階功能。在本節當中,我們將介紹有關定址格式、常數、定義、程式區塊、控制區塊等主題後,接著使用一個較為複雜的組合語言範例,說明這些進階功能的用途。

網站地圖

by ccckmitccckmit 26 Mar 2010 00:18

[[table]] [[row]] [[cell]]

嵌入式系統的範例程式

by ccckmitccckmit 24 Mar 2010 23:56

EmbeddedExample.jpg

圖一、嵌入式系統的案例

Windows3.1 的協同式多工系統

by ccckmitccckmit 24 Mar 2010 05:20

1990 年時,微軟為了讓 DOS 上可以執行視窗功能,發展出了早期的 Windows 的系統,為了讓 DOS 的使用者能感覺到視窗系統的好處,微軟將 Windows 3.0 與 Windows 3.1 架構在 DOS 系統上。但由於 DOS 並不支援多工模式,Windows 只好採用一個稱為協同式多工的機制,這其實是一種假的多工機制,要求所有的程式都必須改變寫法,以便在工作進行一小段後就將 CPU 的控制權交還給作業系統,讓作業系統可以將 CPU 切換給其他程式使用,於是,所有的程式就都必須採取類似下列的輪詢式撰寫方法。其中的 while (GetMessage(&msg, NULL, 0, 0)) {} 這一個迴圈就是輪詢迴圈,在利用 GetMessage 函數取得訊息後,隨即利用TranslateMessage 轉換訊息與 DispatchMessage 分派訊息,然後,Windows 系統會在適當時機呼叫 WndProc 函數,以便程式設計師可以處理這些訊息。

微軟的 SmartPhone 手機模擬器

by ccckmitccckmit 24 Mar 2010 05:18

微軟的程式開發工具 Visual Studio 當中包含了 Pocket PC 與智慧型手機 (SmartPhone) 等裝置的模擬器,可以讓使用者在個人電腦上開發手機程式。圖 1 顯示了在 Visual Studio 中開發智慧型手機程式的整合環境。

微軟的 .NET 虛擬機平台

by ccckmitccckmit 24 Mar 2010 05:12

受到昇陽 Java 的 JVM虛擬機之影響,讓微軟也開始投入虛擬機的領域,微軟 .NET 平台所使用的虛擬機,稱為Common Lanugage Runtime (CLR)。.NET平台所採用的中間碼格式,原本稱為MSIL (Microsoft Intermediate Language),現在改稱為CIL (Common Intermediate Language)。

在 Visual Studio 中撰寫組合語言

by ccckmitccckmit 24 Mar 2010 05:05

在微軟的Visual Studio 中,目前所使用的組譯工具是 ML.exe,ML.exe 除了進行組譯之外,還可以用來進行連結動作。但是,在 Visual Studio 整合環境中,我們並不需要使用指令的方式執行 ML.exe,因為我們可以利用功能表的方式,編譯組合語言程式,然後直接在 Visual Studio 中執行,甚至除錯。

MS. Windows系統下的組合語言

by ccckmitccckmit 24 Mar 2010 05:04

您也可以使用組合語言撰寫 MS Windows 的視窗程式,但這並不是一件簡單的事情,也沒有絕對的必要性,因為您可以使用 C/C++ 語言或更高階的 C#, VB 等語言撰寫視窗程式。但是,如果您真的希望學習如何以組合語言撰寫MS Windows 底下的視窗程式,那您可以下載MASM32 這個組譯器並安裝後,就會發現在C:\MASM32資料夾中附有許多進階的組合語言範例,其中包含許多組合語言版的MS Windows視窗程式。範例一就是其中用來顯示對話框的一個範例。其執行畫面如圖一所示。但是,筆者並非 MASM32 的專家,探討這些程式的原理已經超越筆者的能力範圍,在此筆者僅能提供讀者這些基本資訊,詳細的程式設計方式留待有興趣的讀者自行研究。

Dosassembly

by ccckmitccckmit 24 Mar 2010 05:02

不會受到保護模式的限制。

BIOS 與組合語言 (IBM PC)

by ccckmitccckmit 24 Mar 2010 05:02

IBM PC個人電腦 (以下簡PC) 目前使用的是IA32 的處理器,其啟動程式燒錄在 BIOS 當中。當PC啟動時,會進入 BIOS的啟動程式中,BIOS會進行『系統組態的分析』(System Configuration Analysis),以分析CPU型號、記憶體大小、軟、硬碟機的數量與型式、是否安裝浮點運算器等,做為其它動作的重要參考資料。接著進行『開機自我測試』(POST,Power-On Self Test),以測試記憶體、晶片組、CMOS儲存資料、鍵盤和磁碟機等硬體,若有錯則以訊息告知所在。 接著,會載入作業系統,像是 MS.MS DOS, MS.MS Windows, Linux 等。

微軟的組合語言

by ccckmitccckmit 24 Mar 2010 05:01

如果您想學習微軟組合語言程式的開發,最簡單的方法是安裝 Visual Studio 開發環境,然後利用其中的組譯連結器 ML.exe 進行組譯的動作。或者利用 CL.exe 這個編譯器,將 C 語言轉換為組合語言以利觀察。

Visual Studio 的使用簡介

by ccckmitccckmit 24 Mar 2010 04:59

雖然視窗介面不是系統程式的主題之一,但是在視窗介面如此重要的今日,系統程式設計師仍有必要學會視窗介面的開發工具。

系統程式 - 微軟的開發工具

by ccckmitccckmit 24 Mar 2010 04:56

Visual Studio 是微軟公司的主力開發工具,支援 C/C++/C#/VB等程式語言,並且可以用來撰寫 MASM語法的組合語言。

POSIX 標準

by ccckmitccckmit 23 Mar 2010 06:41

雖然 Linux 是由 UNIX 衍生出來的作業系統,具有與 UNIX 相似的特性。但是畢竟 UNIX 所衍生出來的作業系統版本眾多,除了 Linux 之外,還有 FreeBSD、Solaris、Mac OS X 等。因此, IEEE 組織為了讓應用程式能在眾多的 UNIX 系統底下正常的執行,特別制定出了 POSIX 標準,規定了必須支援的函式庫介面。Linux 作業系統符合 POSIX 標準,因此可以支援這些函式庫,但是本書所使用的 Dev C++ 並不支援 POSIX 標準,因此不能使用像 fork() 這樣的函式。

Linuxprocesssystem

by ccckmitccckmit 23 Mar 2010 05:49

Linux 中的行程 (Process) 被稱為 Task,其資料結構是一個稱為 task_struct 的 C 語言結構,該結構所記錄的欄位相當多,在 Linux 2.6.29.4 版當中光是該結構的宣告就占了 306 行的程式碼,範例 10.32範例 10.2顯示了該結構的開頭與結束部分,由此可見要實作一個作業系統是相當不容易的工程。

Flashdisk

by ccckmitccckmit 23 Mar 2010 04:06

作業系統除了可以利用最佳化演算法,提升裝置的效能之外,有時甚至可以防止裝置損壞,延長裝置壽命等,像是近來常見的快閃記憶體就是其中一個範例。

行程中的記憶體配置方法

by ccckmitccckmit 23 Mar 2010 03:49

在行程執行的過程中,經常會需要取得某些記憶空間,以便儲存電腦運算過程中所產生的資料。程式中的資料通常被放在兩個記憶體區塊中,一個稱為堆疊區 (Stack),一個稱為堆積區 (Heap)。

第10章、作業系統 (Operating System)

by ccckmitccckmit 23 Mar 2010 03:47

  • 10.1 簡介
  • 10.2 行程管理
  • 10.3 記憶體管理
  • 10.4 檔案與輸出入
  • 10.5 實務案例:Linux作業系統
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License