鱼C论坛

 找回密码
 立即注册
查看: 3309|回复: 8

[汇编作业] 忽然发现汇编的实验三的一个问题……

[复制链接]
发表于 2017-7-10 19:29:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
汇编实验三中,指令如下
assume cs:codesg

codesg 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

codesg ends
end
但是……为什么会先pop(出栈)后再push(入栈)?这样不是会溢出吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-10 19:30:43 | 显示全部楼层
???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-10 20:04:47 | 显示全部楼层
那个啥、不是已经先给sp加4了咩?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-10 20:27:52 | 显示全部楼层
怪不得,我还一直纳闷,为什么加4呢…没注意到…(<--小白)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-10 20:29:59 | 显示全部楼层
云野 发表于 2017-7-10 20:04
那个啥、不是已经先给sp加4了咩?

不过还是会溢出……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-11 00:57:52 | 显示全部楼层
再次看了一下、这个程序是感觉怪怪的、但是不能叫做溢出
通常来讲堆栈是由高地址向低地址生长的、而开始sp置0后加4、加4的过程就相当于pop出两个数据
楼主的问题应该是在开始就已经pop了跨越出栈的范围了是不是?所以你觉得这是溢出
但关于溢出的定义是这样的:堆栈溢出就是不顾堆栈中分配的局部数据块大小、向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据。而弹出只是sp不指向它了数据还在、所以我说叫溢出不准确
另外、在理解这个问题上又引申出一个问题:当sp=0时、到底是栈空还是栈满?
楼主先想想、再来讨论呀、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-11 10:59:10 | 显示全部楼层
云野 发表于 2017-7-11 00:57
再次看了一下、这个程序是感觉怪怪的、但是不能叫做溢出
通常来讲堆栈是由高地址向低地址生长的、而开始sp ...

有道理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-11 11:16:49 | 显示全部楼层
回答一下昨晚延伸的问题、 1.png 2.png
所以可以说明当sp为0的时候既可以是栈空也可以是栈满、
关键还是要看下一步怎么操作、
这样问题的关键已经出来、你可以把题中看作是栈满时、所以pop出数据也就不足为奇了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-12 10:07:22 | 显示全部楼层
点赞,学到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-20 02:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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