簡體   English   中英

匯編x86 MASM循環分析

[英]Assembly x86 MASM loop analysis

以下是我正在嘗試分析並理解循環如何工作的循環代碼:

;the ecx register is the loop counter

  mov ecx,6
  mov edx, offset space 
myloop:
  mov eax,ecx
  dec eax
  call writedec 
  call writestring 
loop myloop 
  call crlf 

  mov ecx,6
  mov edx, offset space 
myloop2:
  mov eax,6
  sub eax, ecx 
  call writedec
  call writestring 
loop myloop2

我的問題是:

  1. offset space意味着什么?
  2. mov edx, offset space是什么意思?
  3. 我不明白offset space是如何來源的?
  4. 如何將寄存器ecx移動到寄存器eax
  5. 為什么offset space是源並將edx注冊到目的地?

非常感謝您的幫助。

offset運算符返回內存位置相對於該位置所屬的段的開頭(在MOV的情況下為DS)的偏移量(參見此處 )。 space可能是在代碼中較早的某處定義的變量,因此offset space將相對於段的開頭(通常是DS數據段)返回到該變量的字節數。

換句話說, mov edx, offset space將復制一個指向space變量( DWORD類型,32位)的指針放在edx寄存器中。 必須在writedecwritestring例程中找到它放在edx中的writedec

至於你要問的循環,這就是ecx寄存器的用武之地。只要ecx不為零, loop指令就會使代碼指針移動到目的地,在檢查之前立即將它減少1。 你的代碼也會在某處使用循環值,這就是為什么它被復制到eax以便其他代碼不會改變ecx的值並弄亂你的循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM