Hotspot Internals in Action(6):处理器、指令与栈之1
1、程序是如何执行的
首先,我们编写一个简单的示例程序sum.c,在cygwin上运行:最频繁使用的指令应当非数据传送指令莫属了。最常用的是传送双字节的movl指令。每条movl指令从左到右分别指定了一个源操作数和一个目的操作数。它们都可以是立即数、寄存器值或存储器地址。但IA-32有一个限制,即数据传送指令中源操作数和目的操作数不能同时都指向存储器位置。这样设计是为了避免过慢的指令延长了流水线,不利处理器内部的流水线优化。下面举个例子,是5种不同形式的movl指令:
因为栈和程序代码以及其它形式的程序数据都是放在同样的存储器中,所以程序可以使用标准的存储器寻址方法访问栈内任意位置。
除了数据访问指令,IA-32还定义了算数和逻辑操作指令(如加addl、减incl、或orl、异或xorl等)、控制指令(如跳转指令jmp)等,感兴趣的读者可参阅Intel IA32 datasheet等资料。