嘿,我刚开始学习组装,这就是我不明白的...
在堆栈段声明中,我们使用类似
TOS LABEL WORD
我知道 TOS 指的是堆栈的顶部,但不明白它后面是什么以及有什么用。帮助将不胜感激。
您在这里所做的是定义一个标签(堆栈指针 (SP)),其中包含堆栈顶部的地址。标签将始终包含最后一个值被推送的地址。
当您调用 PUSH 操作时,寄存器或内存位置的内容会被复制到堆栈中,并且 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