汇编语言8---栈

本文介绍了栈的基本概念,如FIFO原则和栈顶操作,详细阐述了8086中栈的使用,包括入栈(push)和出栈(pop)操作。栈在内存中的生长方向与堆相反,栈顶指针SP在入栈时递减,出栈时递增。栈通常用于临时保存数据和函数调用时的寄存器保护。栈的大小由起始地址和设定的字节数决定,栈越界可能导致数据破坏。栈在计算机科学中扮演着重要角色,用于数据交换和函数调用等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直观理解

仓库,弹夹,书箱…等等,太多了。总之,FIFO

从内存上理解入栈出栈操作

操作栈最重要的就是操作栈顶的位置:
入栈时把栈顶往上提,再把数据放到栈顶指向的位置上
出站时把数据拿走,再把栈顶往下压一格

8086中,用SS于SP所组成的栈顶内存地址作为栈顶指向,并且确定了出入栈的数据只能是16位数据(字型数据)

Tips:生长方向:对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,他的生长方向是向下的,是向着内存地址减小的方向增长。
所以入栈时SP减小

push ax           ;修改SP指针 SP=SP-2---->ax寄存器内的数据放到栈顶

pop bx			  ;将栈顶数据搬移到bx寄存器内--->修改SP指针 SP=SP+2

如何决定栈顶标记在哪里 决定栈的大小

我们可以决定 栈开在哪儿(栈顶标记在哪里),栈的大小:
起始地址 + 你所设定的栈的大小字节数
0000 + 16(10H) = 10 H ss:sp所组合出来的栈顶标记

;更换栈的地址
	mov ax,2000
	mov ss,ax 		;把栈底设置到SS 2000;设置栈的大小
	mov sp,10

栈的大小建议设置成16的倍数

栈的越界问题

栈空间以外的地方可能存放了数据或者指令,栈越界可能会造成破坏

栈的作用:

1.临时性保存数据(函数跳转时保存一些寄存器的值,返回时要把寄存器从栈中恢 复)
2.用栈进行数据交换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值