斜树的空间

集中精力,放弃一切的去做一件事情,只要尽力了,即使失败了,你也不会后悔!

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  47 随笔 :: 0 文章 :: 12 评论 :: 0 Trackbacks
assume cs:codeseg
codeseg segment
        mov ax,2000H
        mov ss,ax
        mov sp,0
        add sp,4
        pop ax
        pop bx
        push ax
        push bx
        pop ax
        pop bx
        mov ax,4c00H
        int 21h
codeseg ends
end

按理来说是DOS中没有栈保护的啊?怎么会就溢出了呢?

经过大量的调试测试:

我试过了,只有ADD SP,N

N <= 10H

并且 N = 奇数 的时候就会崩溃


偶数不崩溃?

N >= 10H  的时候,奇偶都可以
N=7,9,B就直接崩溃
偶数在<=4就触发 DEBUG 的断点中断 INT 3中断

可能关乎 16位机的取数原则:16位机取每次取2个字节,并且最好取偶数地址,取奇数地址则要读取内存2次。意思是栈中的内存SP地址(包括DI,SI等)最好是2的倍数(16位机),这样访存时间最快。32则是4的倍数。

但是为什么会崩溃我还是不明白??
posted on 2010-06-29 16:19 张贵川 阅读(221) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理