Transcript Chapter 1
單元1: 基本概念 章節概要 • • • • 歡迎來到組合語言的世界 虛擬機器的概念 資料表示法 布林運算 歡迎來到組合語言 • 一些很好的問題 • 組合語言的應用 疑問 • • • • • • • 為什麼我們要學習組合語言? 讀者應該俱備什麼樣的背景智識? 什麼是組譯器? 我需要什麼樣的硬體及軟體? 讀者可以開發出什麼樣類型的程式? 讀者可以從這本書獲得什麼樣的資源? 讀者可以學習到什麼? 歡迎來到組合語言的世界 (要旨) • • • • 組合語言和機器語言之間有什麼關聯性? C++和Java跟組合語言之間有什麼關聯性? 組合語言俱有可移值性嗎? 為什麼要學習組合語言? 組合語言的應用 • 一些代表性的應用: • • • • 單一平台的商業應用軟體 硬體裝置驅動程式 多平台的商業應用軟體 嵌入式系統和電腦遊戲 (see next panel) 組合語言與高階語言的比較 下一步是什麼 • • • • 歡迎來到組合語言的世界 虛擬機器的概念 資料表示法 布林運算 虛擬機器的概念 • 虛擬機器 • 特定用途機器 虛擬機器 • Tanenbaum:虛擬機器的概念 • Programming Language analogy: • 電腦通常可以執行以本機機器語言形式所撰寫的程式, 我們稱此種語言為 L0。 • 假如有一個新的語言稱為 L1,此語言是希望程式設計者 能夠易於使用,那麼我們就可以拿 L1 來開發程式。 • 用 L1 來開發程式,要達到此目的有兩種方法: : • 直譯 – :在 L1 所寫的程式執行時,程式的每道指令都會由 另一個用 L0 所寫的程 式加以解碼與執行 • 轉譯 –:整個用 L1 所寫的程式可以被轉換成 L0 的程式, 其作法是,使用另一個為 了此目的而設計的L0程式來負責 此動作, 然後所產生的L0程式便可以直接由電腦硬體執行。 Translating Languages English: Display the sum of A times B plus C. C++: cout << (A * B + C); 組合語言: mov eax,A mul B add eax,C call WriteInt Intel機器語言: A1 00000000 F7 25 00000004 03 05 00000008 E8 00500000 各層級的虛擬機器 (descriptions of individual levels follow . . . ) 高階語言 • Level 5 • 高階語言的應用方向 • C++, Java, Pascal, Visual Basic . . . • Level 5 的程式通常是以編譯器將其轉換成 Level 4 的程式,接著再轉譯 成 Level 4 的 程式碼。 組合語言 • Level 4 • 助憶碼有類似機器語言一對一的功能 • 中斷呼叫這樣的組合語言敘述式,則直接交 由 Level 3 的作業系統加以執行。 • 組合語言是出現在 Level 4,它使用了許多簡 短的助憶碼,例如ADD、 SUB 及 MOV 等 等,這些助憶碼可以很容易地轉譯到 Level 2 的指令集架構。 作業系統 • Level 3 • 可以檢測Level 4的程式。 • 作業系統軟體會經過轉譯成為機器碼,然後 在 Level 2 機器上執行。 指令集架構 • Level 2 • 也了解傳統的機器語言。 • 每一個機器語言的指令會由數個微指令來負 責執行。 微架構 • Level 1 • 翻譯傳統的機器指令 (Level 2) • 藉由數位硬體來執行動作 (Level 0) 數位邏輯 • • • • • Level 0 CPU是由數位邏輯閘建構成的。 系統匯流排。 記憶體。 是由雙極電晶體所構成的。 next: Data Representation 下一章 • • • • 歡迎來到程式語言的世界 虛擬機器的概念 資料表示法 布林運算 資料表示法 • 二進位數值 • 二進位與十進位的轉換 • 二進位加法 • 整數儲存空間的大小 • 十六進位整數 • 十六進位與十進位的轉換 • 十六進位的減法 • 有號整數 • 二進位的減法 • 字元的儲存空間 二進位數值 • 數字不是1就是0 • 1=真 • 0=假 • MSB –最大有效位元 • LSB –最小有效位元 MSB • 位元表: LSB 1011001010011100 15 0 二進位數值 • 每個位元不是1就是0 • 每個位元代表2的次方: 每個二進位的值 是2次方的加總 1 1 1 1 1 1 1 1 27 26 25 24 23 22 21 20 將二進位的轉變為成十進位的 位加權表示法顯示出如何計算十進位中每個二進位的位元 的值: : dec = (Dn-1 2n-1) + (Dn-2 2n-2) + ... + (D1 21) + (D0 20) D =二進位數字 二進位的 00001001 = 十進位的 9: (1 23) + (1 20) = 9 將無號十進位整數轉換為二進位 • 將該十進位整數重複除以 2,並 且將每次除法運算的 每個餘數,儲存起來作為各個二進位數字。 37 = 100101 二進位加法 • 由最低階位元對 ( 最右邊 ) 開 始,並且將每個後續位 元對相加起來。 整數儲存空間的大小 每種儲存空間單位 的位元數目: 可能被儲存在20位元的最大無號整數是多少? 十六進位整數 二進位的值被十六進位取代 將二進位轉換成十六進位 • 十六進位整數中的每個數字,代表 4 個二進位位元,而兩個結 合 起來的十六進位數字則能代表 1 個位元組。 • 例如: 000101101010011110010100 會等同於十 六進位整數 16A794 : 將無號十六進位整數轉換為十進位 • 每個數字位置都代表一個 16 的次方: dec = (D3 163) + (D2 162) + (D1 161) + (D0 160) • 十六進位 1234 = (1 163) + (2 162) + (3 161) + (4 160) 或等於十進位的 4660。 • 十六進位3BA4 = (3 163) + (11 * 162) + (10 161) + (4 160), 或 十進位的15,268. 16的各次方 列舉出從 160 到 167 各個 16 的次方值 將無號十進位整數轉換為十六進位 十進位的422 = 十六進位的1A6 Hexadecimal Addition • Divide the sum of two digits by the number base (16). The quotient becomes the carry value, and the remainder is the sum digit. 36 42 78 28 45 6D 1 1 28 58 80 6A 4B B5 21 / 16 = 1, rem 5 Important skill: Programmers frequently add and subtract the addresses of variables and instructions. Hexadecimal Subtraction • When a borrow is required from the digit to the left, add 16 (decimal) to the current digit's value: 16 + 5 = 21 -1 C6 A2 24 75 47 2E Practice: The address of var1 is 00400020. The address of the next variable after var1 is 0040006A. How many bytes are used by var1? 有號整數 最大有效位元 (MSB) 可以用於標示數值的正負號。此時, 0 表示該整數為正,1 則表示該整數為負。 如果有一個十六進位的最高位元 > 7, 則此值為負號 例如: 8A, C5, A2, 9D 2's補數表示法 • 在表示負數時,可以使用 2‘s 補數表示法 • 在此表示法中,一個整數 的 2's 補數,即為它的加法 逆元素 注意 00000001 + 11111111 = 00000000 二進位的減法 • 當要做A-B的動作時,將B轉換成二的補數 • 即A+(-B) 00001100 – 00000011 練習:1001 - 0101 00001100 11111101 00001001 Learn How To Do the Following: • • • • • 形成十六進位整數二的補數 將有號二進位轉換成十進位 將有號十進位轉換成二進位 將有號十進位轉換成十六進位 將有號十六進位轉換成十進位 最大值與最小值 保留最高位元的符號,限定的範圍是: 練習: 可能儲存空間為20位元的最大整數值是多少 字元的儲存空間 • 字元集 • • • • 標準的美國資訊交換標準碼 (0 – 127) 廣義的美國資訊交換標準碼 (0 – 255) 美國國家標準協會(0 – 255) 萬國碼標準(0 – 65,535) • 空字元終止字串 • 一個由若干字元所組成的字串,而且這些字元 後面緊接著其內容值為零的單一位元組 • 使用ASCII字元表 • 本書封底內頁有一個表格,其內列舉出在 MSDOS 模式下執行時所使 用的 ASCII 碼。 數值資料表示法的術語 • 單純的二進位 • 可以直接計算 • ASCII 二進位 • 數值字串為: "01010101" • ASCII 十進位 • 數值字串為: "65" • ASCII 十六進位l • 數值字串為: "9C" next: Boolean Operations 下一個是什麼? • • • • 歡迎來到程式語言的世界 虛擬機器的概念 資料表示法 布林運算 布林運算 • • • • • 否 (NOT) 運算:其符號為 ¬、~ 或 ' (AND) 運算:其符號為 ∧ 或 • (OR) 運算:其符號為 ∨ 或+ 運算子優先權 真值表 布林代數 • 布林運算式也在軟體程式設計中,用於表示邏 輯運算。 十九世紀中期一位數學家 George Boole 所發明的 • 基本的布林運 算子: • NOT, AND, OR NOT • NOT 運算可以將其運算元的布林值予以反轉 • 真值表使用變數 X 來顯示出 NOT 運算的所有可能結 果: 數位閘圖形表示: NOT AND • 以下真值表 針對變數 X 和 Y 的值,顯示所有可能的結 果 ( 陰影部分 ): 數位閘圖形表示: AND OR • 真值表 針對變數 X 和 Y 的值,顯示所有可能的結果 ( 陰影部分 ): 數位閘圖形表示: OR 運算子優先權 • 例子顯示出順序 真值表 (3-1) • 布林函數會接收布林輸入,然後再產生布林輸出 • 真值表內會顯示所有可能的輸入和輸出。 範例: X Y 真值表 (3-2) • 範例: X Y 真值表 (3-3) • 範例: (Y S) (X S) S X mux Y 二輸入多工器 Z 摘要 • 組合語言幫助你學習如何在最低的標準下建構出軟體 • 組合語言和機器語言之間具有一對一的關係 • 虛擬機器概念是說明計算機架構中的每一層,如何代 表一個抽象機器的有效方法 • 虛擬機器中的各層可以是硬體或軟體建構而成 • 布林運算式對電腦硬體與軟體的設計是非常重要的