То, что вы здесь делаете, это определение метки (указателя стека (SP)), которая содержит адрес вершины стека.Метка всегда будет содержать адрес, куда было передано последнее значение.
Когда вы вызываете операцию PUSH, содержимое регистра или ячейки памяти копируется в стек и SPуменьшается.
Когда вы вызываете POP, содержимое того места, на которое указывает SP (TOS), копируется в любой регистр или ячейку памяти, на которую вы его накладываете, и SP увеличивается на единицу.
Использование обозначения любого адреса для константы или переменной заключается в том, что это проще, чем записать его местоположение в памяти в шестнадцатеричном формате.
EDIT
Причина, по которой он уменьшается на PUSH, заключается в том, что стек увеличивается в памяти при каждом новом значении.Поэтому, если вы думаете о том, чтобы поместить книги в коробку, расположение нижней части ячейки равно 100, вы добавляете книгу в ячейку памяти 100. Затем добавьте еще одну, и она будет в ячейке памяти 99. Затем ячейка памяти 99 становится TOS.
РЕДАКТИРОВАТЬ 2 Некоторые ассемблеры используют LABEL в качестве директивы, а некоторые нет.Так что в этом случае TOS - это «метка», а WORD - тип данных.
Таким образом, вы можете иметь:
label1 LABEL WORD
.
.;code
.
или в других ассемблерах (к чему я привык)Просто:
label1:
.
.
.
Сначала я не знал, в каком контексте вы использовали это. Вот ресурс, который я использовал: http://www.emu8086.com/assembler_tutorial/compatibility.html