今天在啃《深入理解计算机系统》的时候遇到了下面这段代码:
movl 12(%ebp), %eax
imull 8(%ebp)
movl %eax, (%esp)
movl %edx, 4(%esp)
代码的作用就是将两个数的乘积存回栈顶。代码没有问题,让我疑惑的是书上这两句话:
存储两个寄存器的位置对小端机器来说是对的——寄存器 %edx 中的高位存在相对于 %eax 的低位偏移量为 4 的地方。 栈是向低地址方向增长的,也就是说低位在栈顶。
在考虑这两句话的时候,突然发现自己对 mov 的操作并不是特别的清楚,就去查了查,大致搞明白了一些。
mov指令¶
我们知道 mov 在 IA32 中有基础的三类操作,即 b,w,l。 而 mov 在使用时大致如下:
movb ...