第一帖,汇编,关于栈
本帖最后由 china_ymex 于 2011-12-17 22:18 编辑能给看看不,在debug 中调 不过去吖。。。。指点一下。。。
assume cs:code, ss:b, ds:a
a segment
dw 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0ah, 0bh, 0ch, 0dh, 0eh, 0fh, 0ffh
a ends
b segment
dw 0, 0,0, 0, 0, 0, 0, 0
b ends
code segment
ymex: mov ax,b
mov ss,ax
mov sp,17
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
lp: push ds:
inc bx
inc bx
loop lp
mov ax,4c00h
int 21h
code ends
end ymex
本帖最后由 api 于 2011-11-6 14:12 编辑
你把sp的值设为16就能过原因我也一知半解,可能是栈溢出
看过了,应该是栈的原因
DW 字 8个字*2=16个字节 栈空间0-F 所以偏移地址应该是16要不就有问题了 我也碰到过类似问题,比如我只需要弹压两个字型数据,所以就把栈sp指针设置为4,debug死活过不去,所以以后栈一般就让sp指向16或10h sp应该为16,8个字为16字节,从0到15,所以sp应为16而不是17 {:5_109:} 加油把我也刚学
这个问题嘛。。不懂
sp是偶数没事 是奇数一定debug不过
记得书上也有一题目让你思考运行结果
不要debug去TT不过的
可以u 看mov ax,4c00h
然后直接g ip
再d查看内存
sp改成14 18 20 都是不报错的,只不过栈顶位置不同 吖谢谢大家 了。 这个你们都做过了吗。。。小甲鱼这个实验好像没 给答案吖。。。 本帖最后由 guanyu 于 2011-11-6 22:20 编辑
我把这个程序 sp改成16 debugt命令运行的时候loop循环到t到bx=000A
下来再用 t运行 应该是 inc bx电脑就直接报错
guanyu 发表于 2011-11-6 22:05 static/image/common/back.gif
我把这个程序 sp改成16 debugt命令运行的时候loop循环到t到bx=000A
下来再用 t运行 应该是 inc...
是实验五的代码吗。我下载不下来。。。。 china_ymex 发表于 2011-11-7 15:07 static/image/common/back.gif
是实验五的代码吗。我下载不下来。。。。
不是代码 是你发的程序 debug 调试过程中抱错的图片 mov sp,16 ;指向栈底 手下SP要指向栈底,所以SP是16,申请8个DW字符的数据,所以栈底指向16.
还有为什么SP要是偶数,因为栈是字型数据,占用2个字节。所以必须是偶数
页:
[1]