Tất cả phụ thuộc vào định nghĩa của từ; chính xác ý bạn là gì với các từ "trên cùng" và "dưới cùng" trong ngữ cảnh này, và cả về việc triển khai hệ điều hành hoặc kiến trúc máy tính.
Tôi nhớ những điều sau đây từ lâu, khi tôi đang lập trình trên Commodore 64. Bộ nhớ giữa địa chỉ $ 0800 (2048) và $ 9FFF (40959) được dành riêng cho các chương trình BASIC. Mã của chương trình BASIC của bạn được lưu trữ bắt đầu từ địa chỉ thấp hơn ($ 0800, tăng dần từ đó). Ngăn xếp, để lưu trữ các biến và trả về địa chỉ của các chương trình con, bắt đầu ở đầu ($ 9FFF) của phạm vi đó và phát triển theo các địa chỉ thấp hơn. Vì vậy, trong bối cảnh này, thật hợp lý khi thấy ngăn xếp ngày càng đi xuống và khi bạn trở về từ một chương trình con, khung ngăn xếp của chương trình con đã bị loại bỏ bằng cách tăng con trỏ ngăn xếp, để bạn có thể nói rằng bạn đang "di chuyển lên ngăn xếp" khi trở về từ một chương trình con.
Tôi không biết nó hoạt động như thế nào trên các phiên bản hiện đại của bộ xử lý Windows hoặc Intel x86. Có thể ngăn xếp hoạt động theo cách khác, tức là nó phát triển từ địa chỉ thấp hơn đến địa chỉ cao hơn. Nếu đó là trường hợp thì có lẽ bạn sẽ sử dụng các từ "trên cùng", "dưới cùng" và "lên", "xuống" chính xác theo cách khác.