[英]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
我的問題是:
offset space
意味着什么? mov edx, offset space
是什么意思? offset space
是如何來源的? ecx
移動到寄存器eax
? offset space
是源並將edx
注冊到目的地? 非常感謝您的幫助。
offset
運算符返回內存位置相對於該位置所屬的段的開頭(在MOV
的情況下為DS)的偏移量(參見此處 )。 space
可能是在代碼中較早的某處定義的變量,因此offset space
將相對於段的開頭(通常是DS
數據段)返回到該變量的字節數。
換句話說, mov edx, offset space
將復制一個指向space
變量( DWORD
類型,32位)的指針放在edx
寄存器中。 必須在writedec
和writestring
例程中找到它放在edx
中的writedec
。
至於你要問的循環,這就是ecx
寄存器的用武之地。只要ecx
不為零, loop
指令就會使代碼指針移動到目的地,在檢查之前立即將它減少1。 你的代碼也會在某處使用循環值,這就是為什么它被復制到eax
以便其他代碼不會改變ecx
的值並弄亂你的循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.