汇编中的堆栈是什么?命令 .stack 是如何工作的?

What is a stack in assembly and how does the command .stack work?

我要直接跳进去: 我正在学习汇编并且正在使用涡轮汇编器。我真的刚刚开始学习,所以我试图让自己熟悉一些预定义的语言服务,并且正在阅读寄存器,以便我可以更好地理解为什么正在发生的事情正在发生。但是,在这种情况下,我似乎无法理解堆栈的实际含义。

我对栈的理解是,指令和数据的处理方式遵循后进先出法。那么命令.stack 100h 有什么作用呢?

我是否对可以加载到堆栈中的事物数量设置了限制?

那么这条线到底做了什么?:

.stack 100h

如果接受其他基数,.stack 100h 和.stack 256d 一样吗?会有任何技术或内部差异吗?

.stack.exe 中设置元数据,影响 program-loader 为堆栈段分配的内存量。

实现此功能的一种方法是,在进入程序时,SS 基地址是最低可用堆栈地址,SP = 您给 .stack 的大小。如果 SP 更高,您可能会不小心使用超过 .stack 个字节而没有 SP 回绕,从而用其他东西创建 stack-clash。 (IDK 如果有一个标准需要 EXE program-loader 来为 SP 选择特定的偏移量。)

它不会在您的程序中创建任何额外的指令。它的参数只是一个数字常量;您可以根据您的汇编程序以您喜欢的任何数字为基础指定它。


.stack.com 程序也没有影响:那些以 cs=ds=es=ssSP=0fffeH 开头的程序(如果可用的连续内存少于 64kiB,则更低)。

(在.com中,SP指向0的return地址(在PSP中),其中有一个int 20h指令会退出系统调用。所以在推送 0 之前,SP 开始于 0000h)


这个答案是评论的总结,感谢@Jester、@rcgldr 和@MichaelPetch 确认它看起来很简单,并指出了 .exe 和 .com 程序之间的区别。