题目要求
利用栈,将程序中定义的数据逆序存放
数据如下:
0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
数据段DS 076A:0000存放的内容
交换前,栈顶指针ss:sp指向 076B:0020
执行一次循环后
执行两次循环后
执行三次循环后
执行四次循环后
第一个循环执行完毕后
疑问
为什么栈外面存有脏数据?那么下面这段对于栈的16个数据定义,为什么只有11个生效?
测试数据
如下图,初始化栈的时候也是难道不应该把16个ffff放进内存吗?为什么只有11个ffff放进去了?
注意到,link的时候出现warning: no stack segment 这个问题解答见下一篇博客。但是解决这个问题之后,上述问题还是没解决
运行效果
交换前
交换后
代码
;利用栈,将程序中定义的数据逆序存放
assume cs:code,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,0,0,0,0,0,0,0,0,0,0 ;多给了两个
stack ends
code segment
;分配地址
start: mov ax,data
mov ds,ax ;数据段
mov ax,stack
mov ss,ax ;栈段
;循环push
mov cx,8h ;循环8次
mov bx,0h ;偏移地址
s1: push ds:[bx]
inc bx
inc bx
loop s1
;循环pop
mov cx,8h ;循环8次
mov bx,0h ;偏移地址
s2: pop ds:[bx]
inc bx
inc bx
loop s2
mov ax,4c00h
int 21h
code ends
end start