汇编 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
我的问题是:
offset space
是什么意思?
mov edx, offset space
是什么意思?
- 我不明白
offset space
是怎么来的?
- 如何将寄存器
ecx
移动到寄存器 eax
?
- 为什么
offset space
是源而寄存器 edx
是目的地?
非常感谢您的帮助。
offset
运算符 returns 内存位置相对于该位置所属的段(在 MOV
的情况下为 DS)开头的偏移量(请参阅here)。 space
可能是代码中较早位置定义的变量,因此 offset space
将 return 相对于段开头的字节数(通常是 DS
数据段)到该变量。
换句话说,mov edx, offset space
将复制指向space
变量(类型DWORD
,32位)的指针,放置在edx
寄存器中.它被放置在 edx
中的原因必须在 writedec
和 writestring
例程中找到。
至于你问的循环,这就是 ecx
寄存器的用武之地。只要 [=22] 指令 loop
指令就会使代码指针移动到它的目的地=] 不为零,在检查之前立即将其减 1。循环值也被您的代码在某处使用,这就是将其复制到 eax
的原因,这样其他代码就不会更改 ecx
的值并弄乱您的循环。
下面是一段循环代码,我正在尝试分析和理解循环是如何工作的:
;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
运算符 returns 内存位置相对于该位置所属的段(在 MOV
的情况下为 DS)开头的偏移量(请参阅here)。 space
可能是代码中较早位置定义的变量,因此 offset space
将 return 相对于段开头的字节数(通常是 DS
数据段)到该变量。
换句话说,mov edx, offset space
将复制指向space
变量(类型DWORD
,32位)的指针,放置在edx
寄存器中.它被放置在 edx
中的原因必须在 writedec
和 writestring
例程中找到。
至于你问的循环,这就是 ecx
寄存器的用武之地。只要 [=22] 指令 loop
指令就会使代码指针移动到它的目的地=] 不为零,在检查之前立即将其减 1。循环值也被您的代码在某处使用,这就是将其复制到 eax
的原因,这样其他代码就不会更改 ecx
的值并弄乱您的循环。