

//使ss:sp初始指向1000:0010即10000h
mount c d:masm
c:
debug
r
mov ax,0123 //ax = 0123h
push ax //把ax的数据压入栈中,大数据01在下面,小数据23在上面,此时ss:sp 指向1000EH
mov bx,2266 //bx = 2266
push bx //把bx的数据压入栈中,大数据22在下面,小数据66在上面,此时ss:sp 指向1000CH
mov cx,1122 //cx = 1122
push cx //同上面两步,此时ss:sp指向1000AH,即push指令时,sp = sp - 2
pop ax //把栈顶的元素弹出并且赋值给ax,此时ax = 1122h,ss:sp指向1000CH
pop bx //同上,此时bx = 2266h,ss:sp指向1000EH
pop cx //此时cx = 0123h,ss:sp指向10010h。即pop指令时,sp = sp + 2
r ss //让ss:sp指向栈顶元素
1000
r sp
0010



mov ax,1000
mov ds,ax //内存单元的段地址要放在ds中
push [0] //将1000:0处的字压入栈中
pop [2] //出栈,出栈的数据送入1000:2处



指令执行时,CPU要知道内存单元的地址,可以在push、pop指令中只给出内存单元的偏移地址,段地址在指令执行时,CPU从ds中取得