鱼C论坛

 找回密码
 立即注册
查看: 1697|回复: 6

[已解决]栈的起始点怎么设置?

[复制链接]
发表于 2023-5-20 21:09:08 | 显示全部楼层
在实模式下,SS:SP 寄存器对应栈底地址。为了将栈指针 SP 指向内存地址 2000:0030,你需要将 SS 寄存器设置为 2000,并将 SP 寄存器设置为偏移地址 0030。具体操作步骤如下:

将 SS 寄存器的值设为 2000。
将 SP 寄存器的值设为偏移地址 0030。
确认设置成功。可以通过将数据压入栈中并检查栈指针位置来确认栈指针的位置是否正确。
要设置栈的结束位置为 2000:0040,你可以将栈大小设置为 16 字节 (0x0040 - 0x0030 = 16),这样栈的结束位置就会在偏移地址 0040 处。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 21:27:24 | 显示全部楼层
liuming1978 发表于 2023-5-20 21:25
我可以这样理解吗,先把栈指针指向栈底,然后,规定这个指针可以移动的范围,如果我将指针初始化指向2000 ...

你的理解有一定道理,起始点和结束点之间给定一个可以移动的范围可以定义栈的大小。通常情况下,栈向上生长(push),即栈指针向内存地址较大的方向移动。因此,如果将栈指针初始化为2000:0030,将栈大小设置为16字节,则栈的结束位置为2000:0040,栈指针最多只能移动16次,并且它不能超出栈的范围。这样就可以定义一个从2000:0030到2000:0040的栈。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-22 03:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表