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
摘要
• 組合語言幫助你學習如何在最低的標準下建構出軟體
• 組合語言和機器語言之間具有一對一的關係
• 虛擬機器概念是說明計算機架構中的每一層,如何代
表一個抽象機器的有效方法
• 虛擬機器中的各層可以是硬體或軟體建構而成
• 布林運算式對電腦硬體與軟體的設計是非常重要的