本章主要在介紹組合語言中基本的指令(mov, add/sub)及其參數使用的基本限制.另外也介紹組譯器提供的處理陣列變數的directives.最後一部分則是介紹在組合語言下如何用JMP,LOOP來實踐C語言中的for,while迴圈以及條件選擇.
一般而言,CPU指令的參數可以是直接的值(immediate), 或來自暫存器, 或來自記憶體.immediate值即是直接編在cpu instruction內,通常依照destination的type(即大小)編成適當的大小,每個暫存器則有相對應的代號,最複雜的則是記憶體位址,有多個表逹記憶體位址的方法,我們稱為定址方法(addressing).這章內我們可以看到direct addressing, direct-offset addressing, indirect addressing, indexed addressing等四種.
了解參數型態之後,我們就可以解釋搬移指令MOV以及加法減法等指令在參數使用上有四個基本限制,原則上兩個參數大小要相同,最多只能有一個memory參數,immediate值不可直接搬移到segment register,以及CS, EIP不可以做為destination等限制.
關於陣列變數的使用上,組譯器同時也提供OFFSET, TYPE, SIZEOF, LENGTHOF等指令來提領陣列中的屬性值.比較特別的是PTR,相當於高階語言的強制型別轉換,用來告訴組譯器該如何取用(1, 2, or 4 byte)指定的記憶位址.
本章另一個重點則是carry及overflow 兩個旗標在加法及減法的運算邏輯,用來做為unsigned及signed整數運算結果是否溢位的判斷.
學習目標
1.Constraints on the use of operands for MOV instruction.
2.Three Types of Operands (Immediate, Register, Memory)
3. Memory Addressing (Direct, Direct-offset, Indirect, Indexed)
4. Assembly Directives for array variables:
OFFSET, TYPE, SIZEOF, LENGTHOF, etc.
5. How ADD & SUB modifies OF and CF?
6. JMP and LOOP Instructions
沒有留言:
張貼留言