2011-05-07 65 views
3

嗨,我刚开始学习汇编和这里基本问题就是我不明白...有关堆栈段声明

堆栈段宣言,我们使用类似

 TOS LABEL WORD 

我知道TOS指的是堆栈的顶部,但不明白它后面是什么以及有什么用处。帮助将不胜感激。

回答

3

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

  • 当调用的按压操作,一寄存器或存储器位置 的 内容被复制到堆栈和 的SP递减。

  • 当调用POP,其中 SP指向(在TOS)被复制到任何寄存器或存储器位置的内容,你就造成它和SP 递增。

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

编辑

为什么它在PUSH递减的原因是因为一个堆栈每个新值被压在内存中向下增长。所以如果你想把书放在一个盒子里,盒子底部的位置是100,你可以在内存位置100添加一本书。然后再添加一本书,它位于内存位置99.内存位置99然后变成TOS。

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

所以,你可以有:

label1 LABEL WORD 
. 
.;code 
. 

或其他汇编器(什么我已经习惯了),简单地说:

label1: 
. 
. 
. 

起初,我不知道你用什么情况下这是我使用的资源:http://www.emu8086.com/assembler_tutorial/compatibility.html

+0

so WORD是堆栈指针的名称在这里?另外,如果某些东西被推入堆栈,不应该增加值吗? – dawnoflife 2011-05-07 13:48:31

+0

是的,WORD是标签的名称。该值不会增加,因为它没有给出堆栈的大小。它只是指向内存位置。它递减的原因是随着每个新值被推送,堆栈在内存中向下增长。 – 2011-05-07 13:59:24

+0

我很抱歉用问题轰炸你,但如果LABEL是关键字,TOS是什么。我想我知道这意味着什么,但现在我很困惑 – dawnoflife 2011-05-07 14:05:05