6.1章节第一个试题,关于栈,为什么会溢出? --------求问
代码如下:assume cs:codesg
codesg segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
dw 0,0,0,0,0,0,0,0
start: mov ax, cs
mov ss, ax
mov sp, 32
mov bx, 0
mov cx, 8
s: push cs:
add bx, 2
loop s
mov bx, 0
mov cx, 8
s0: pop cs:
add bx, 2
loop s0
mov ax,4c00H
int 21H
codesg ends
end start
上传不了更多图片了...最后我手打上来吧
0BA6:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F A6 0B 00 00 栈太小了
assume cs:codesg
codesg segment
dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H
db 10h dup (?)
dw 0,0,0,0,0,0,0,0
sp_top:
start:
mov ax, cs
mov ss, ax
mov sp, sp_top
mov bx, 0
mov cx, 8
s:
push cs:
add bx, 2
loop s
mov bx, 0
mov cx, 8
s0:
pop cs:
add bx, 2
loop s0
mov ax, 4c00H
int 21H
codesg ends
end start
人造人 发表于 2017-5-22 13:01
栈太小了
谢谢版主回复~原来是这样,要不然还真不知道是什么原因,看来栈里面还有不可告人的秘密。 ranbo_q 发表于 2017-5-22 13:09
谢谢版主回复~原来是这样,要不然还真不知道是什么原因,看来栈里面还有不可告人的秘密。
^_^ 本帖最后由 zlj19931010 于 2017-5-22 17:12 编辑
你圈出来的那部分,到底是被什么数据覆写了,求解{:10_249:}
如果是系统自己覆写的,对代码执行没有影响吧 zlj19931010 发表于 2017-5-22 17:08
你圈出来的那部分,到底是被什么数据覆写了,求解
如果是系统自己覆写的,对代码执行没有影响 ...
图片里的数据是刚要执行push cs:0000=0123
原本0BA6:0010 为自己定义的栈空间,可是执行到push 程序就多出这些数据,
大概循环4次,栈顶溢出,把那些部分溢出到代码段,0BA6:000~F处,
把原来DS内容给覆盖了,
0BA6:0000 23 01 56 04 89 07 BC 0A-EF 0D ED 0F A6 0B 00 00
页:
[1]