china_ymex 发表于 2011-11-6 13:44:19

第一帖,汇编,关于栈

本帖最后由 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:11:14

本帖最后由 api 于 2011-11-6 14:12 编辑

你把sp的值设为16就能过原因我也一知半解,可能是栈溢出

关键是感觉 发表于 2011-11-6 15:15:14

看过了,应该是栈的原因
DW 字 8个字*2=16个字节   栈空间0-F 所以偏移地址应该是16要不就有问题了

kane080824 发表于 2011-11-6 15:46:09

我也碰到过类似问题,比如我只需要弹压两个字型数据,所以就把栈sp指针设置为4,debug死活过不去,所以以后栈一般就让sp指向16或10h

topcookie 发表于 2011-11-6 15:47:08

sp应该为16,8个字为16字节,从0到15,所以sp应为16而不是17

100531319 发表于 2011-11-6 16:12:16

{:5_109:} 加油把我也刚学

ever.g 发表于 2011-11-6 17:13:04

这个问题嘛。。不懂

sp是偶数没事 是奇数一定debug不过

记得书上也有一题目让你思考运行结果
不要debug去TT不过的

可以u 看mov ax,4c00h
然后直接g ip

再d查看内存

sp改成14 18 20 都是不报错的,只不过栈顶位置不同

china_ymex 发表于 2011-11-6 21:33:03

吖谢谢大家 了。 这个你们都做过了吗。。。小甲鱼这个实验好像没 给答案吖。。。

guanyu 发表于 2011-11-6 22:05:12

本帖最后由 guanyu 于 2011-11-6 22:20 编辑


我把这个程序 sp改成16   debugt命令运行的时候loop循环到t到bx=000A
下来再用 t运行 应该是 inc bx电脑就直接报错

china_ymex 发表于 2011-11-7 15:07:53

guanyu 发表于 2011-11-6 22:05 static/image/common/back.gif
我把这个程序 sp改成16   debugt命令运行的时候loop循环到t到bx=000A
下来再用 t运行 应该是 inc...

是实验五的代码吗。我下载不下来。。。。

guanyu 发表于 2011-11-7 15:40:34

china_ymex 发表于 2011-11-7 15:07 static/image/common/back.gif
是实验五的代码吗。我下载不下来。。。。

不是代码 是你发的程序 debug 调试过程中抱错的图片

c_losed 发表于 2011-11-7 20:20:23

mov sp,16 ;指向栈底

cyht33 发表于 2011-11-8 13:01:59

手下SP要指向栈底,所以SP是16,申请8个DW字符的数据,所以栈底指向16.
还有为什么SP要是偶数,因为栈是字型数据,占用2个字节。所以必须是偶数
页: [1]
查看完整版本: 第一帖,汇编,关于栈