. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  栈顶超界问题,来看一下,这些指令执行后为什么会报错  [待解决] 回复[ 2次 ]   点击[ 580次 ]  
hualongmian
[帖 主]   [ 发表时间:2008-05-17 20:06 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2008-05-13 20:29
指令如下
debug
-rcs
7000
-rip
0
-a 7000:0
7000:0000 B80050        MOV     AX,5000
7000:0003 8ED0          MOV     SS,AX
7000:0005 BC0400        MOV     SP,0010
7000:0008 50            PUSH    AX
7000:0009 50            PUSH    AX
7000:000A 50            PUSH    AX
7000:000B 50            PUSH    AX
7000:000C EBFA          JMP     0008
有关SP的值我设过10H,8h,6h,4h,可是当SP=4的时候就弹出提示框说什么,无效CPU指令和一系列16进制数。
就是始终都看不到超界,,也看不到SP=0的情况。
还有我看论坛的时候,有提问说当SP=0时,继续压栈会超界,但操作有效。
对于此问,我想请教一下,就是假设当栈空时,SP〈〈FFFF时,SS=2000H,那么当栈满,SP=0时,再继续入栈,此时的数据将被存储到2000:FFFE字单元,此时将出现数据不连续的情况,这种情况也是栈顶超界吗?
younggay
[第1楼]   [ 回复时间:2008-05-20 12:13 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
对于此问,我想请教一下,就是假设当栈空时,SP〈〈FFFF时,SS=2000H,那么当栈满,SP=0时,再继续入栈,此时的数据将被存储到2000:FFFE字单元,此时将出现数据不连续的情况,这种情况也是栈顶超界吗?
=================
这不算超界的啊。因为sp=0是开辟的最大的64K的栈空间。不会有什么数据不连续的。8086下没有栈越界的这个概念的,因为段空间是可以段内训话的,超过了FFFFH就会变成0或其他低地址,低于0就会编程FFFFH或其他高地址。
你看到的那个现象,不光是栈的问题,这还是因为你在debug下运行的时候,T但不跟踪等功能,cpu调用中断例程,中断例程会使用当前的栈空间来存放一组cpu运行现场的数据。在这个存放过程中,如果发生了段内环绕,我们所在的操作系统由于是模拟的一个8086环境,其实还是一个保护模式的系统,那么就会认为此时的这个越界行为有问题,所以,就会提示一个错误的windows窗口。
如果直接运行的话,就不会出现这个现象了。中断例程的处理,在后面的中断章节将有详细的讲解。楼主不妨做个标记,待日后仔细揣摩。
aweer
[第2楼]   [ 回复时间:2008-05-27 23:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2008-05-25 17:40
3.12分析那里看一下。。建议楼Z要认真看书啊
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved