2007年6月27日 星期三

Assembly Chapter 11 Overview

本章有三個重點,前兩個是32位元視窗環境下,主控台模式及圖形模式應用程式的開發,第三個則是IA-32記憶體管理架構.

從系統程式的角度來看,本章是是往上延伸至視窗程的開發所需的programming技巧,因此會使用到相關的Windows API.在這些函數中,有兩個被使用的字元集合型態:8位元的ANCII/ANSI字元集合以及16位元的wide/Unicode (Windows NT、2000以及XP)字元集合.在Windows API函數中,被使用的標準MS-Windows資料型態必須被轉換成MASM的資料型態,例如:BOOL (Windows 型態)轉換成BYTE (MASM型態)…等.

32位元的主控台模式(32 bits console mode)外觀和行為很類似16位元的MS-DOS程式設計,兩者的程式都要從標準輸入讀取並寫入到標準輸出中,兩者也都支援自訂命令列參數、文字的顏色。然而32位元主控台程式和DOS程式在底層是不同的,前者在保護模式(Protected Mode)下執行,後者卻是在真實模式(Real address mode)下執行,而且他們使用不同的函式庫:Win 32程式呼叫的函式庫跟圖形模式的視窗應用程式所呼叫的是一樣的,DOS程式則使用BIOS和來自IBM-PC的中斷.以下介紹幾個常用的Win32主控台函數:

  • 在主控台視窗中,用來做輸入/輸出的主控台控制碼是32位元的整數.必須透過GetStdHandle函數取得.輸入可呼叫ReadConsole函數,輸出則呼叫WriteConsole函數.當建立或開啟檔案時,則呼叫CreateFile函數;讀取與寫入,則分別呼叫ReadFile及WriteFile函數.除此之外CloseHandle函數可以關閉檔案,若想要移動檔案指標時,可呼叫SetFilePointer函數.
  • 若要操控主控台螢幕緩衝區,則必須呼叫SetConsoleScreenBufferSize;要改變文字顏色,可呼叫SetConsoleTextAttribute.要取得系統時間或設定系統時間,可用GetLocalTime及SetLocalTime,這兩個有關時間的函數都是使用SYSTEMTIME結構.

    圖形模式的視窗應用程式,其程式的主要架構其實是固定不變的,必須宣告一個主視窗類別WNDCLASS,並且填滿其中的資訊,包括:取得目前這個程式的控制碼GetModuleHandle、讀入程式的圖示LoadIcon和滑鼠的游標LoadCursor、登錄程式的主視窗RegisterClass、建立主視窗CreateWindowEx、顯示ShowWindow和更新主視窗UpdateWindow,以及開始一個接受GetMessage和發出訊息DispatchMessage的迴圈.一個應用程式要處理那些訊息則完全由使用自定的副程式(如WinProc)決定,而這個副程式與主視窗類別的鏈結是宣告WINDCLASS第二個參數即設定的.

    最後在記憶體管理的部份主要集中在兩個主要的議題:將邏輯位址轉換成線性位址以及將線性位址轉換成實體位址(分頁paging),課本說明其實不夠詳細,可以在網上查詢一下GDTR和LDTR,會更加清楚.

  • 邏輯位址指向一個區段描述表,負責指向一個在線性位址中的區段.區段描述表包含區段的資訊 (大小和位址型態).描述表有兩種:一個單一的全域描述表(GDT)和一個或多個區域描述表(LDT).
  • 分頁是IA-32處理器一個重要的特徵,它讓電腦可執行比實際記憶體還要大的程式.處理器只會讀一部份程式到記憶體內,其他的部份仍舊留在硬碟內.處理器會使用分頁目錄(page directory)、分頁表(page table)和分頁框架(page frame)來產生實體位址,其中分頁目錄包含了指向分頁表的指標,分頁表則包含指向分頁框架的指標.


    學習目標:

  • 32位元的程式如何處理文字的輸入/輸出、處理顏色、處理時間和日期
  • Console mode Windows application programming
  • Graphical mode Windows application programming
  • IA-32 Memory management
  • 2007年6月25日 星期一

    2007/06/25 PM:18:30~19:30 講解SIC作業

    時間: 2007/06/25 PM:18:30~19:30
    地點: A208

    2007年5月23日 星期三

    System Software Chapter 1

    Beck這本書用來做為系統程式教材已有十多年歷史,本書所談的系統程式或軟體(System Software)包括Assembler, Linker, Loader, Macro Processor等. 相對於系統軟體的另一個名稱是應用程式(Application Software), 所謂系統軟體是由支援電腦作業的許多不同程式組成,與底層作業系統及使用的機器相關是系統軟體和應用軟體最主要的差別之一, 應用軟體是以計算機為工具來解決問題因此大多與底層計算機架構無關, 而系統軟體則著重點在支援計算機本身的運作, 並不是在特殊的應用上因此系統軟體經常和執行的機算機結構有關.

    本書以一個簡化的指令計算機(SIC)來討論上述系統軟體的設計方法. SIC是一部假想的計算機, 它的設計包括大部分實際機器的特色, 並且避開了不常用或無關的複雜性. SIC分為兩種: 標準型和延伸版(XE version), 請參考課本內容.


    • System Software vs Application Software

    • Simplified Instructional Computer (SIC, SIC/XE)
      Memory, Register, Instruction Formats, Addressing Models, Data formats, Instruction Set, Input and Output

    • RISC vs CISC