汇编语言FPU寄存器栈(register stack)
FPU 不使用通用寄存器 (EAX、EBX 等等)。反之,它有自己的一组寄存器,称为寄存器栈 (register stack)。数值从内存加载到寄存器栈,然后执行计算,再将堆栈数值保存到内存。
FPU 指令用后缀 (postfix) 形式计算算术表达式,这和惠普计算器的方法大致相同。比如,现有一个中缀表达式 (infix expression):(5*6)+4,其后缀表达式为:
5 6 * 4 +
中缀表达式 (A+B)*C 要用括号来覆盖默认的优先级规则(乘法在加法之前)。与之等效的后缀表达式则不需要括号:
A B + C *
表达式堆栈
在计算后缀表达式的过程中,用堆栈来保存中间结果。下图展示了计算后缀表达式 56*4- 所需的步骤。堆栈条目被标记为 ST(0) 和 ST(1),其中 ST(0) 表示堆栈指针通常所指位置。