我正在尝试理解asm中的寄存器,但我看到的每个网站都假设我对寄存器有所了解,而我无法掌握它。我知道有关c ++的书籍,据我所知mov var1,var2
与var1 = var2
是一样的,对吗?
但是使用eax寄存器我完全迷失了。任何帮助表示赞赏。
答案 0 :(得分:2)
将寄存器视为每处理器全局变量。有“eax”,“ebx”和其他一些人。此外,您只能通过寄存器执行某些操作 - 例如,没有指令从一个存储器位置读取并将其写入另一个存储器位置(除非位置由某些寄存器表示 - 请参阅movsb指令等)。
因此寄存器通常仅用于临时存储某些操作所需的值,但它们通常不用作传统意义上的全局变量。
你是对的,“mov var1,var2”本质上是一个赋值 - 但你不能使用两个基于内存的变量作为操作数;那是不受支持的。你可以这样做:
mov eax, var1
mov var2, eax
...具有相同的效果,使用eax寄存器作为临时寄存器。
答案 1 :(得分:0)
eax
指的是处理器寄存器(本质上是变量)
mov
是将数据从一个寄存器复制到另一个寄存器的指令。所以基本上你是正确的(在手持式的意义上)
您是否有想要讨论的示例装配块?
答案 2 :(得分:0)
将eax视为内存中可以存储值的位置,非常类似于c ++中的int,long,...以及其他类型指定变量内存中位置的大小。 eax寄存器只指向内存中的存储位置,在x86计算机上为32位。 eax的e部分意味着扩展。该寄存器 - >存储单元由乘法和除法运算符自动使用,通常称为扩展累加器寄存器。