【自用】彙編初學筆記 #1

謝璟隆發表於2020-11-10

寫在前面

  • 80x86架構一般是小端儲存模式,又稱作小尾儲存,即低位資料存在地址低位,高位資料存在地址高位
  • intel 架構下,指令的右引數為源資料,左引數為目標資料
  • 1位元組(byte) = 8位(bit)
  • 1字 = 2位元組
  • r代表通用暫存器
  • m代表記憶體
  • imm代表立即數
  • 暫存器當中E代表32位,X代表16位,L代表低八位,H代表高八位

常用暫存器

標誌暫存器(EFL)

D位/DF位

  • 為0時,MOVS執行後"+"
  • 為1時,MOVS執行後"-"

計數暫存器(ECX)

  • 用於指定重複執行次數,需與REP指令搭配使用
  • 需要注意的是,儲存的值是十六進位制,執行的次數也應當由十六進位制換算

堆疊

常用匯編指令

(以左為主,操作結果均存到)

ADD

  • 左加右,存到左

SUB

  • 左減右,存到左

MOVS

  • 將ESI中的值視為記憶體地址,將該記憶體地址當中的值,轉存到另一個記憶體當中(此記憶體的地址為EDI暫存器的值)
  • 只能使用ESI和EDI
  • 執行完成後,ESI和EDI的值均會自動+1/-1||+2/-2||+4/-4
    • 加(0)/減(1)由標誌暫存器D位決定
    • 加減的多少由資料寬度決定
#(destination,source)
movs byte ptr es:[EDI],byte ptr ds:[ESI]   簡寫為MOVSB 
movs word [EDI],[ESI]
movs dword [EDI],[ESI]

MOV

  • 只能從記憶體到暫存器,或暫存器到記憶體,暫存器到暫存器,不能從記憶體到記憶體

STOS

  • 書寫形式
STOS byte ptr es:[EDI]      // 簡寫為 STOSB
  • 作用:將AL/AX/EAX中的值儲存到[EDI]指定的記憶體單元
  • 執行結束後[EDI]加/減 1/2/4

REP

  • 將該指令加在其他指令之前,從而將其他指令重複執行0x[ECX]次

相關文章