我今天来这里是因为我目前正在一所大学学习汇编语言x86的入门知识。因为我们之前学习了C语言,所以老师要求我们解释这部分代码。
我对它的基本理解是:
我说的对吗?如果不对,有没有人能给予我一个更好的解释我误解的部分?先谢谢你了。
zphenhs41#
与任何汇编程序一样,您几乎需要手边有伊萨手册,因为每个指令都有很多不同的风格,这取决于您传递给它的内容。首先检查What does dword ptr mean?,基本上,这32位访问特定地址的内容。因为y是一个指针,所以y的内容是*y所在的地址,所以首先y地址将被移到eax,然后刚刚上传到eax的地址的内容将被移到ecx。带有两个操作数的imul如下所示:
dword ptr
y
*y
eax
ecx
imul
所以它将ecx与存储在dword ptr[x]中的内容相乘,也就是x的内容,并将结果存储在ecx中。然后地址y再次被上传到寄存器edx(可能是优化缺陷,因为eax已经保存了它),然后存储在exc中的乘法结果被移到该位置。
dword ptr[x]
x
edx
exc
i7uaboj42#
带注解的代码:
mov eax,dword ptr [y] ;eax = y mov ecx,dword ptr [eax] ;ecx = *y imul ecx,dword ptr [x] ;ecx = (*y) * x mov edx,dword ptr [y] ;edx = y mov dword ptr[edx], ecx ;(*y) = (*y) * x
2条答案
按热度按时间zphenhs41#
与任何汇编程序一样,您几乎需要手边有伊萨手册,因为每个指令都有很多不同的风格,这取决于您传递给它的内容。
首先检查What does
dword ptr
mean?,基本上,这32位访问特定地址的内容。因为
y
是一个指针,所以y
的内容是*y
所在的地址,所以首先y
地址将被移到eax
,然后刚刚上传到eax
的地址的内容将被移到ecx
。带有两个操作数的
imul
如下所示:所以它将
ecx
与存储在dword ptr[x]
中的内容相乘,也就是x
的内容,并将结果存储在ecx
中。然后地址
y
再次被上传到寄存器edx
(可能是优化缺陷,因为eax
已经保存了它),然后存储在exc
中的乘法结果被移到该位置。i7uaboj42#
带注解的代码: