Review Assembly

  • 常用的 general registers: EAX, EBX, ECX, EDX (32 bits, 4 bytes)
  • loop 專用的 register: ECX
  • Registers細分範例 EAX(4 bytes)=>AX(2 bytes)=>AH:AL (1bytes: 1bytes)
  • CPU execution cycle: fetch, decode, fetch operand, execute, write back
  • instruction CALL的步驟: save call的下面一個指令之address到stack, 接著change EIP(instruction pointer, save目前程式所執行到的指令address)到我們要call的procedure之address.
  • RET指令所做的事情, pop return address 給 EIP
  • procedure接收參數的方式, 可以用regisrers(受register數量限制), 或是利用stack(不受數量限制).
  • 程式執行時, 均會配置data, code, stack區塊
  • 常用指令: add, sub, mov, inc, dec, xor, or, and, call, ret, push, pop
  • push, pop 可以對 stack 進行操作
  • PTR用法: byte PTR [addr], word PTR [addr], dword PTR [addr], 即針對我們所要access的記憶體位置取出某個size的大小的區塊.
  • jz(jump if ZF=1), jnz(jump if ZF=0)的用法, 即條件式跳躍, 所參考的flag是 ZF (Zero flag), set = 1, reset = 0.
  • 一條指令執行時, 其目標operand若是設成零則, ZF=1. ( sub eax, eax ; ZF=1)
  • 比較指令: cmp a, b 執行 a-b, 接著若是 a=0, 則 ZF=1.
  • [addr] 的用法: 即去記憶體位置addr處取得資訊(需配合取得的區塊大小, 利用 PTR 指引)
  • 函數呼叫概念: 呼叫一個函數來執行的時候, 我們需先把要目前程式狀態資訊保存起來(利用push), 當函數執行完後, 在pop之前保存的資訊. 而函數執行完後, 會把執行結果放入記憶體, 或是register (即是高階語言return xx 的概念).
  • Interrupt: 中斷呼叫OS service runtime 來替我們做事情, OS掌管與硬體間的溝通, 所有I/O動作都得透過OS所提供的服務來幫我們做, 因此我們可以利用Interrupt來做底層access hardware的task. 每一種Interrupt均提供一些function讓我們來指定使用. 因此在呼叫interrupt前, 要先指定function number.
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s