关于堆栈段声明的基本问题

时间:2011-05-07 11:41:08

标签: assembly x86-16

嘿,我刚刚开始学习装配,这是我不理解的......

在Stack Segment Declaration中,我们使用类似

的内容
     TOS LABEL WORD

我知道TOS指的是堆栈的顶部,但不了解它后面的内容以及它的用途。将不胜感激。

1 个答案:

答案 0 :(得分:3)

你在这里做的是定义一个标签(堆栈指针(SP)),它包含堆栈顶部的地址。标签将始终包含推送最后一个值的地址。

  • 当您拨打PUSH操作时, 寄存器或存储器的内容 location被复制到堆栈中 SP递减。

  • 当您调用POP时,其中的内容 SP指向(TOS)被复制到您对其造成的任何寄存器或存储位置以及SP 递增。

使用标记常量或变量的任何地址是因为它比以十六进制在内存中写入它的位置更容易。

修改

它在PUSH上递减的原因是因为每个新值被推送时堆栈在内存中向下增长。因此,如果你想把书放在一个盒子里,盒子底部的位置是100,你在内存位置100添加一本书。然后添加另一本书,它在内存位置99.内存位置99然后成为TOS。 / p>

编辑2 有些汇编程序使用LABEL作为指令,有些则不然。所以在这种情况下,TOS是'标签',WORD是数据类型。

所以你可以:

label1 LABEL WORD
.
.;code
.

或其他汇编程序(我习惯),简单地说:

label1:
.
.
.

起初我不知道你在使用它的上下文。这是我使用的资源:http://www.emu8086.com/assembler_tutorial/compatibility.html