汇编语言 利用栈 将数据逆序存放

题目要求

利用栈,将程序中定义的数据逆序存放

数据如下:

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

猜你喜欢

转载自blog.csdn.net/sinat_42483341/article/details/88661845