2011-10-06 118 views
1

我想了解asm中的寄存器,但是我看到的每个网站都只是假设我知道关于寄存器的一些信息,而我却无法控制它。我知道一本值得C++的书,据我所知mov var1,var2var1 = var2是一样的,对吗?了解关键字eax和mov

但随着eax寄存器,我完全失去了。任何帮助表示赞赏。

回答

0

eax指处理器寄存器(本质上是一个变量)

mov是从一个寄存器的数据复制到另一个的指令。所以基本上你是正确的(从handwavey的意义上说)

你有没有想讨论的示例程序集块?

2

将寄存器视为每个处理器的全局变量。有“eax”,“ebx”和其他一些。此外,只能通过寄存器执行某些操作 - 例如,没有指令从一个存储单元读取并将其写入另一个存储单元(除非某些寄存器指定位置 - 请参阅movsb指令等)。

所以寄存器通常只用于临时存储某些操作所需的值,但它们通常不被用作常规意义上的全局变量。

你说得对,“mov var1,var2”本质上是一个赋值 - 但是你不能使用两个基于内存的变量作为操作数;这不被支持。你可以做:

mov eax, var1 
mov var2, eax 

...它具有相同的效果,使用eax寄存器作为临时。

0

将eax想象成内存中可以存储值的位置,就像在C++中一样,int,long,...和其他类型指定了变量内存中的位置大小。 eax寄存器只是指向内存中的存储位置,在x86计算机上是32位。 eax的e部分意味着延长。该寄存器 - >存储单元由乘法和除法运算符自动使用,通常称为扩展累加器寄存器。