510 likes | 605 Views
單元 1: 基本概念. 章節概要. 歡迎來到組合語言的世界 虛擬機器的概念 資料表示法 布林運算. 歡迎來到組合語言. 一些很好的問題 組合語言的應用. 疑問. 為什麼我們要學習組合語言 ? 讀者應該俱備什麼樣的背景智識 ? 什麼是組譯器 ? 我需要什麼樣的硬體及軟體 ? 讀者可以開發出什麼樣類型的程式 ? 讀者可以從這本書獲得什麼樣的資源 ? 讀者可以學習到什麼 ?. 歡迎來到組合語言的世界 ( 要旨 ). 組合語言和機器語言之間有什麼關聯性 ? C++ 和 Java 跟組合語言之間有什麼關聯性 ? 組合語言俱有可移值性嗎 ?
E N D
章節概要 • 歡迎來到組合語言的世界 • 虛擬機器的概念 • 資料表示法 • 布林運算
歡迎來到組合語言 • 一些很好的問題 • 組合語言的應用
疑問 • 為什麼我們要學習組合語言? • 讀者應該俱備什麼樣的背景智識? • 什麼是組譯器? • 我需要什麼樣的硬體及軟體? • 讀者可以開發出什麼樣類型的程式? • 讀者可以從這本書獲得什麼樣的資源? • 讀者可以學習到什麼?
歡迎來到組合語言的世界 (要旨) • 組合語言和機器語言之間有什麼關聯性? • 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 –最小有效位元 • 位元表:
二進位數值 • 每個位元不是1就是0 • 每個位元代表2的次方: 每個二進位的值是2次方的加總
將二進位的轉變為成十進位的 位加權表示法顯示出如何計算十進位中每個二進位的位元的值:: dec = (Dn-12n-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. 1 1 36 28 28 6A 42 45 58 4B 78 6D 80 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 75 A2 47 24 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) 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 – 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 0 0 1 練習:1001 - 0101
Learn How To Do the Following: • 形成十六進位整數二的補數 • 將有號二進位轉換成十進位 • 將有號十進位轉換成二進位 • 將有號十進位轉換成十六進位 • 將有號十六進位轉換成十進位
最大值與最小值 保留最高位元的符號,限定的範圍是: 練習: 可能儲存空間為20位元的最大整數值是多少
字元的儲存空間 • 字元集 • 標準的美國資訊交換標準碼 (0 – 127) • 廣義的美國資訊交換標準碼 (0 – 255) • 美國國家標準協會(0 – 255) • 萬國碼標準(0 – 65,535) • 空字元終止字串 • 一個由若干字元所組成的字串,而且這些字元後面緊接著其內容值為零的單一位元組 • 使用ASCII字元表 • 本書封底內頁有一個表格,其內列舉出在 MS-DOS 模式下執行時所使 用的 ASCII 碼。
數值資料表示法的術語 • 單純的二進位 • 可以直接計算 • ASCII 二進位 • 數值字串為: "01010101" • ASCII 十進位 • 數值字串為: "65" • ASCII 十六進位l • 數值字串為: "9C" next: Boolean Operations
下一個是什麼? • 歡迎來到程式語言的世界 • 虛擬機器的概念 • 資料表示法 • 布林運算
布林運算 • 否 (NOT) 運算:其符號為 ¬、~ 或 ' • (AND) 運算:其符號為 ∧ 或 • • (OR) 運算:其符號為 ∨ 或+ • 運算子優先權 • 真值表
布林代數 • 布林運算式也在軟體程式設計中,用於表示邏 輯運算。十九世紀中期一位數學家 George Boole 所發明的 • 基本的布林運 算子: • NOT, AND, OR
數位閘圖形表示: NOT • NOT 運算可以將其運算元的布林值予以反轉 • 真值表使用變數 X 來顯示出 NOT 運算的所有可能結果:
數位閘圖形表示: AND • 以下真值表 針對變數 X 和 Y 的值,顯示所有可能的結果 ( 陰影部分 ):
數位閘圖形表示: OR • 真值表 針對變數 X 和 Y 的值,顯示所有可能的結果 ( 陰影部分 ):
運算子優先權 • 例子顯示出順序
真值表 (3-1) • 布林函數會接收布林輸入,然後再產生布林輸出 • 真值表內會顯示所有可能的輸入和輸出。 範例: X Y
真值表 (3-2) • 範例: X Y
二輸入多工器 真值表 (3-3) • 範例: (Y S) (X S)