Регистровый стек модуля обработки операций с плавающей точкой показан на Рисунке 15-1. Каждый из восьми числовых регистров в стеке имеет размер 80 битов и разбит на поля соответственно расширенному вещественному типу данных процессора i486.
Числовые команды адресуют регистры данных относительно регистра на вершине стека. В любой момент времени этот регистр на вершине стека указан полем TOP (вершина стека) в слове состояния модуля обработки операций с плавающей точкой. Операции загрузки или занесения в стек уменьшают TOP на единицу и загружают значение в новый верхний регистр. Операция сохранения и восстановления из стека сохраняет значение из текущего TOP-регистра, а затем увеличивает TOP на единицу. Подобно стеку в памяти, регистровый стек модуля обработки операций с плавающей точкой растет вниз по направлению к регистрам с низшим адресом.
Многие числовые команды имеют различные режимы адресации, которые позволяют программисту неявно обращаться к вершине стека или явно оперировать определенными регистрами относительно вершины стека TOP. Ассемблер ASM386/486 поддерживает эти режимы адресации регистров, используя выражение ST(0) или просто ST для того, чтобы обращаться к текущей вершине стека, и ST(i) для того, чтобы определять i-тый регистр от вершины стека TOP (0 <= i <= 7). Например, если TOP содержит число 011B (регистр 3 - вершина стека), то следующий оператор добавляет содержимое двух регистров в стек (регистры 3 и 5):
Организация стека и адресация относительно вершины числовых регистров значительно упрощает процедурное программирование, так как позволяет процедурам передавать параметры через регистровый стек. За счет использования стека для передачи параметров, а не специально "посвященных" этому регистров, вызываемые процедуры получают большую гибкость в использовании стека. Пока стек не полон, каждая программа просто загружает параметры в стек перед тем, как вызвать какую-либо подпрограмму для обработки численных расчетов. Затем подпрограмма адресует эти параметры как ST, ST(1) и так далее. При этом TOP, например, может даже ссылаться на физический регистр 3 в одном вызове и на физический регистр 5 в другом.