汇编代码问题新手不懂求指教

​assume cs:codesg,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends

stack segment
dw 0,0,0,0,0,0,0,0
stack ends

code segment
start:
mov ax,stack

mov ss,ax
mov sp,16 (mov sp,16 这条代码不应该是栈吗?16指针不是就指向了ds吗?不应该是32?)

mov ax,data

mov ds,ax

push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]

mov ax,4c00h
int 21h

code ends
end start

你是高手,者年头很是见到写汇编的工程师了

sp是偏移地址寄存器,mov sp,16,是说以ss为原点向后偏移16,也就是以stack段为原点,向后偏移16,。刚好指向栈底。