2007年4月13日 星期五

Assembly Chapter 6 Overview

本章主要內容為組合程式語言中IF指令和條件處理(Conditional Processing), 首先介紹支援程式設計邏輯運算的二進位制基礎, 然後再說明CPU如何使用CMP指令和狀態旗標(State flag)來比較指令運算元, 最後匯集上述觀念來藉由組合語言, 來完成高階語言邏輯結構.

按位元指令(bitwise instruction), 包括AND, OR, XOR, NOT及TEST等邏輯運算元, 執行時來源參數中的每個位元與目的參數中相同位置的位元做運算.

CMP指令將目的運算元和來源運算元作比較, 換句話說, 由目的參數減來源參數而不保留相減的結果, CMP會依這個隱含的減法指令結果來修改CPU狀態的旗標值(flag value). CMP的後面通常緊接著條件跳耀指令(conditional jump instruction), 來將程式控制權移到某個程式碼標籤處, 常見的跳耀指令類型有:
  • 根據特定指標值(Jumps based on Specific flags), 例如: JC(jump carry), JZ(jump zero)..等.
  • 根據是否相等(Jumps based on Equality), 例如: JE(jump equal), JNE(jump not equal)...等.
  • 根據有號整數比較結果(Jumps based on Signed Comparisons), 例如:JL(jump if less), JG(jump if greater)...等.
  • 根據無號整數比較結果(Jumps based on Signed Comparisons), 例如:JA(jump if above), JB(jump if below)...等.
.IF, .ELSE, ELSEIF以及.ENDIF等組譯器指令, 則是籍由近乎高階語言的寫法, 減化低階組語寫法, 這些指令在組譯後會轉換成相對應的CPU指令. 另外亦可使用.WHILE及.REPEAT指令來建立條件迴圈. 有了這些條件判斷組譯器指令, 寫組合語言相對簡單許多, 但對於資工系的學生而言, 必須要知道組譯器是如何轉換的.

學習目標:
1. Boolean and Comparison Instructions
  • CPU Status Flags
  • AND, OR, XOR, NOT and TEST instructions


2. Conditional jumps

  • Jumps Based on (Specific flags, equality, unsigned comparisons...)

3. Conditional Structures

  • Block-Structured IF statements
  • Compound Expression with AND
  • Compound Expression with OR
  • WHILE Loops
  • TABLE-Driven Selection

沒有留言: