Tutto dipende dalla definizione delle parole; cosa intendi esattamente con le parole "top" e "bottom" in questo contesto, e anche sull'implementazione del sistema operativo o dell'architettura del computer.
Ricordo quanto segue da molto tempo fa, quando stavo programmando sul Commodore 64. La memoria tra l'indirizzo $ 0800 (2048) e $ 9FFF (40959) era riservata ai programmi BASIC. Il codice del tuo programma BASIC è stato memorizzato a partire dall'indirizzo più basso ($ 0800, crescendo verso l'alto da lì). Lo stack, per la memorizzazione di variabili e gli indirizzi di ritorno delle subroutine, è iniziato nella parte superiore ($ 9FFF) di tale intervallo e è cresciuto verso indirizzi più bassi. Quindi in questo contesto era logico vedere lo stack come crescente verso il basso e quando si ritorna da una subroutine il frame dello stack della subroutine è stato scartato incrementando il puntatore dello stack, in modo da poter dire che si stava "spostando verso l'alto lo stack" quando di ritorno da una subroutine.
Non so come funzioni sulle versioni moderne di processori Windows o Intel x86. Forse lo stack funziona in senso inverso, cioè cresce da indirizzi inferiori a superiori. Se così fosse, probabilmente useresti le parole "top", "bottom" e "up", "down" esattamente al contrario.