关于栈顶超界的问题

suny_v 2016-12-14 11:50:45
注:此问题里所有数字都为16进制
题目:如果将1000-1FFFF这段空间爱你当做栈短,初始状态栈是空的,此时,SS=1000,SP=?
思路:只有一个元素时,SP=FFFE.取出最后一个元素时,SP=FFFE+2=10000.SP只有四位,最高位1被忽略了.所以SP=0.
突发奇想:既然SP范围为0-FFFF,再大就会被忽略.那么又怎么会出现栈顶超界呢?
百思不得其解!
...全文
1072 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhujinqiang 2017-01-26
  • 打赏
  • 举报
回复
容量小于64kb的栈越界会读写非本栈的内存数据;容量为64kb的栈越界会导致栈的数据被覆盖,比如64kb的栈满了,sp指向0处,如果再将一个字入栈,sp=-2使得sp=fffe,从而将以前该位置的数据覆盖
  • 打赏
  • 举报
回复
有一元素栈顶为FFFE,如果为空就是10 栈越界的意思是把本来入栈的数据被你用乱七八糟的废代码挤出了栈,这样你就可以看到栈的内容了,也就是溢出
god_and_foye 2016-12-21
  • 打赏
  • 举报
回复
引用 楼主 suny_v 的回复:
注:此问题里所有数字都为16进制 题目:如果将1000-1FFFF这段空间爱你当做栈短,初始状态栈是空的,此时,SS=1000,SP=? 思路:只有一个元素时,SP=FFFE.取出最后一个元素时,SP=FFFE+2=10000.SP只有四位,最高位1被忽略了.所以SP=0. 突发奇想:既然SP范围为0-FFFF,再大就会被忽略.那么又怎么会出现栈顶超界呢? 百思不得其解!
--------------------------------------------------------------------------------------------------------------------------------------- 以8086来说 1)你应该是从10000--1FFFF这段空间做栈段吧 空栈时:SS=1000的话,sp=0 2)假如你的栈段已经放满数据SS:SP=1000:0000,此时在放数据,sp会变为FFFE,那么就会覆盖之前放在1FFFE-1FFFF的这个字,就是类似循环入栈 也是在学汇编如果不对,还请指出~~
zara 2016-12-14
  • 打赏
  • 举报
回复
因为,不的每个段都是被定义为 64KB 大小的,如果堆栈段只定义了 4KB 甚至更小的 256 字节呢(这对简单的程序一般是够了)?
suny_v 2016-12-14
  • 打赏
  • 举报
回复
也就是说当一个栈小于最大值时才会有栈顶超界的问题发生?如果一个栈刚好是64kb就不会出现栈顶超界?
第1章 基础知识 1.1 机器语言 1.2 汇编语言的产生 1.3 汇编语言的组成 1.4 存储器 1.5 指令和数据 1.6 存储单元 1.7 CPU对存储器的读写 1.8 地址总线 1.9 数据总线 1.10 控制总线 1.11 内存地址空间(概述) 1.12 主板 1.13 接口卡 1.14 各类存储器芯片 1.15 内存地址空间 第2章 寄存器 2.1 通用寄存器 2.2 字在寄存器中的存储 2.3 几条汇编指令 2.4 物理地址 2.5 16位结构的CPU 2.6 8086cPu给出物理地址的方法 2.7 “段地址xl6+偏移地址=物理地址”的本质含义 2.8 段的概念 2.9 段寄存器 2.10 CS和IP 2.11 修改CS、IP的指令 2.12 代码段 实验1 查看CPU和内存,用机器指令和汇编指令编程 第3章 寄存器(内存访问) 3.1 内存中字的存储 3.2 DS 31:1[address] 3.3 字的传送 3.4 ITIOV、add、sub指令 3.5 数据段 3.6 栈 3.7 CPU提供的栈机制 3.8 栈顶超界问题 3.9 puSh、pop指令 3.10 栈段 实验2 用机器指令和汇编指令编程 第4章 第一个程序 4.1 一个源程序从写出到执行的过程 4.2 源程序 4.3 编辑源程序 4.4 编译 4.5 连接 4.6 以简化的方式进行编译和连接 4.7 1.exe的执行 4.8 谁将可执行文件中的程序装载进入内存并使它运行? 4.9 程序执行过程的跟踪 实验3 编程、编译、连接、跟踪 第5章 BX和loop指令 5.1 BX 5.2 Loop指令 5.3 在Debu9中跟踪用loop指令实现酮循环程序 5.4 Debu9和汇编编译器masm对指令的不同处理 5.5 loop和bx的联合应用 …… 第6章 包含多个段的程序 第7章 更灵活的定位内存地址的方法 第8章 数据处理的两个基本问题 第9章 转移指令的原理 第10章 CALL和RET指令 第11章 标志寄存器 第12章 内中断 第13章 int指令 第14章 端口 第15章 外中断 第16章 直接定址表 第17章 使用BIOS进行键盘输入和磁盘读写 综合研究 附注
第1章 基础知识   1.1 机器语言   1.2 汇编语言的产生   1.3 汇编语言的组成   1.4 存储器   1.5 指令和数据   1.6 存储单元   1.7 CPU对存储器的读写   1.8 地址总线   1.9 数据总线   1.10 控制总线   1.11 内存地址空间(概述)   1.12 主板   1.13 接口卡   1.14 各类存储器芯片   1.15 内存地址空间  第2章 寄存器  2.1 通用寄存器         2.2 字在寄存器中的存储     2.3 几条汇编指令        2.4 物理地址          2.5 16位结构的CPU       2.6 8086cPu给出物理地址的方法 2.7 “段地址xl6+偏移地址=物理地址”的本质含义         2.8 段的概念          2.9 段寄存器          2.10 CS和IP          2.11 修改CS、IP的指令     2.12 代码段          实验1 查看CPU和内存,用机器指令和汇编指令编程    第3章 寄存器(内存访问)    3.1 内存中字的存储      3.2 DS 31:1[address]         3.3 字的传送         3.4 ITIOV、add、sub指令    3.5 数据段          3.6 栈                3.7 CPU提供的栈机制     3.8 栈顶超界问题       3.9 puSh、pop指令       3.10 栈段           实验2 用机器指令和汇编指令编程  第4章 第一个程序          4.1 一个源程序从写出到执行的过程  4.2 源程序             4.3 编辑源程序           4.4 编译              4.5 连接              4.6 以简化的方式进行编译和连接   4.7 1.exe的执行           4.8 谁将可执行文件中的程序装载进入内存并使它运行?        4.9 程序执行过程的跟踪       实验3 编程、编译、连接、跟踪   第5章 【BX】和loop指令       5.1 【BX】              5.2 Loop指令            5.3 在Debu9中跟踪用loop指令实现酮循环程序            5.4 Debu9和汇编编译器masm对指令的不同处理         5.5 loop和【bx】的联合应用     …… 第3章 寄存器(内存访问)  第4章 第一个程序  第5章 [BX]和loop指令  第6章 包含多个段的程序  第7章 更灵活的定位内存地址的方法  第8章 数据处理的两个基本问题  第9章 转移指令的原理  第10章 CALL和RET指令  第11章 标志寄存器  第12章 内中断  第13章 int指令  第14章 端口  第15章 外中断  第16章 直接定址表  第17章 使用BIOS进行键盘输入和磁盘读写  综合研究  附注
我的权限不能上传超过25MB的文件,所以分开两次上传 第1章 基础知识   1.1 机器语言   1.2 汇编语言的产生   1.3 汇编语言的组成   1.4 存储器   1.5 指令和数据   1.6 存储单元   1.7 CPU对存储器的读写   1.8 地址总线   1.9 数据总线   1.10 控制总线   1.11 内存地址空间(概述)   1.12 主板   1.13 接口卡   1.14 各类存储器芯片   1.15 内存地址空间  第2章 寄存器  2.1 通用寄存器         2.2 字在寄存器中的存储     2.3 几条汇编指令        2.4 物理地址          2.5 16位结构的CPU       2.6 8086cPu给出物理地址的方法 2.7 “段地址xl6+偏移地址=物理地址”的本质含义         2.8 段的概念          2.9 段寄存器          2.10 CS和IP          2.11 修改CS、IP的指令     2.12 代码段          实验1 查看CPU和内存,用机器指令和汇编指令编程    第3章 寄存器(内存访问)    3.1 内存中字的存储      3.2 DS 31:1[address]         3.3 字的传送         3.4 ITIOV、add、sub指令    3.5 数据段          3.6 栈                3.7 CPU提供的栈机制     3.8 栈顶超界问题       3.9 puSh、pop指令       3.10 栈段           实验2 用机器指令和汇编指令编程  第4章 第一个程序          4.1 一个源程序从写出到执行的过程  4.2 源程序             4.3 编辑源程序           4.4 编译              4.5 连接              4.6 以简化的方式进行编译和连接   4.7 1.exe的执行           4.8 谁将可执行文件中的程序装载进入内存并使它运行?        4.9 程序执行过程的跟踪       实验3 编程、编译、连接、跟踪   第5章 【BX】和loop指令       5.1 【BX】              5.2 Loop指令            5.3 在Debu9中跟踪用loop指令实现酮循环程序            5.4 Debu9和汇编编译器masm对指令的不同处理         5.5 loop和【bx】的联合应用     …… 第3章 寄存器(内存访问)  第4章 第一个程序  第5章 [BX]和loop指令  第6章 包含多个段的程序  第7章 更灵活的定位内存地址的方法  第8章 数据处理的两个基本问题  第9章 转移指令的原理  第10章 CALL和RET指令  第11章 标志寄存器  第12章 内中断  第13章 int指令  第14章 端口  第15章 外中断  第16章 直接定址表  第17章 使用BIOS进行键盘输入和磁盘读写  综合研究  附注
作者简介  王爽,著名计算机科学教育家,哲学家。1 975年出生于黑龙江省齐齐哈尔市。1 997年毕业于宁夏大学计算机及应用专业。2007年开创了可行性哲学理论体系。自1 999年以来,陆续提出并实践了知识屏蔽、线索化、多元环境等一系列对高等专业人才培养具有重要意义的教学与教育思想。多年以来一直积极致力于推动教育发展的各项事业,同时在高等教育、计算机科学与技术、IT产业等诸多领域都有所成就。 目录第1章 基础知识   1.1 机器语言   1.2 汇编语言的产生   1.3 汇编语言的组成   1.4 存储器   1.5 指令和数据   1.6 存储单元   1.7 CPU对存储器的读写   1.8 地址总线   1.9 数据总线   1.10 控制总线   1.11 内存地址空间(概述)   1.12 主板   1.13 接口卡   1.14 各类存储器芯片   1.15 内存地址空间  第2章 寄存器  2.1 通用寄存器         2.2 字在寄存器中的存储     2.3 几条汇编指令        2.4 物理地址          2.5 16位结构的CPU       2.6 8086cPu给出物理地址的方法 2.7 “段地址xl6+偏移地址=物理地址”的本质含义         2.8 段的概念          2.9 段寄存器          2.10 CS和IP          2.11 修改CS、IP的指令     2.12 代码段          实验1 查看CPU和内存,用机器指令和汇编指令编程    第3章 寄存器(内存访问)    3.1 内存中字的存储      3.2 DS 31:1[address]         3.3 字的传送         3.4 ITIOV、add、sub指令    3.5 数据段          3.6 栈                3.7 CPU提供的栈机制     3.8 栈顶超界问题       3.9 puSh、pop指令       3.10 栈段           实验2 用机器指令和汇编指令编程  第4章 第一个程序          4.1 一个源程序从写出到执行的过程  4.2 源程序             4.3 编辑源程序           4.4 编译              4.5 连接              4.6 以简化的方式进行编译和连接   4.7 1.exe的执行           4.8 谁将可执行文件中的程序装载进入内存并使它运行?        4.9 程序执行过程的跟踪       实验3 编程、编译、连接、跟踪   第5章 【BX】和loop指令       5.1 【BX】              5.2 Loop指令            5.3 在Debu9中跟踪用loop指令实现酮循环程序            5.4 Debu9和汇编编译器masm对指令的不同处理         5.5 loop和【bx】的联合应用     …… 第3章 寄存器(内存访问)  第4章 第一个程序  第5章 [BX]和loop指令  第6章 包含多个段的程序  第7章 更灵活的定位内存地址的方法  第8章 数据处理的两个基本问题  第9章 转移指令的原理  第10章 CALL和RET指令  第11章 标志寄存器  第12章 内中断  第13章 int指令  第14章 端口  第15章 外中断  第16章 直接定址表  第17章 使用BIOS进行键盘输入和磁盘读写

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧