shangyl00 发表于 2011-4-13 17:22:50

做了第6章实验5(6)的题目,有疑惑不解,请甲鱼老师解答

各位TX,各位LS。请看最终代码
我的疑惑是为什么SP是10h,我自己写的时候认为是30h,结果运行不出最终结果,后边Show的代码都不是我写的了,在网上找了下答案,把SP改为10h就可以了。assume cs:code
a segment
        dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends

b segment
        dw 0,0,0,0,0,0,0,0
b ends

code segment
start:          mov ax,b
                mov ss,ax
                mov sp,10h       
                mov ax,a
                mov ds,ax
                mov bx,0
                mov cx,8
s:             push
                add bx,2
                loop s
               
                mov ax,4c00h
                int 21h
code ends
end start我认为SP是30h的根据是,我查看了定义在内存中a段的数据存放如下
C:\Masm>debug 15.exe
-r
AX=0000BX=0000CX=004FDX=0000SP=0000BP=0000SI=0000DI=0000
DS=13CCES=13CCSS=13DCCS=13DFIP=0000   NV UP EI PL NZ NA PO NC
13DF:0000 B8DE13      MOV   AX,13DE
-d 13dc:0
13DC:000001 00 02 00 03 00 04 00-05 00 06 00 07 00 08 00   ................
13DC:001009 00 0A 00 0B 00 0C 00-0D 00 0E 00 0F 00 FF 00   ................
13DC:002000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13DC:0030B8 DE 13 8E D0 BC 10 00-B8 DC 13 8E D8 BB 00 00   ................
13DC:0040B9 08 00 FF 37 83 C3 02-E2 F9 B8 00 4C CD 21 CC   ....7.......L.!.
13DC:005000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13DC:006000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13DC:007000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-

请大家帮忙解答疑惑,谢谢!

小甲鱼 发表于 2011-4-13 23:26:21

因为你整个栈段是定义了8个字型数据,16个字节,这里sp设置为10h == 16指向栈顶,如果你设到30h明显的越界了,跑到外边去了~

shangyl00 发表于 2011-4-14 08:24:56

本帖最后由 shangyl00 于 2011-4-14 08:27 编辑

因为你整个栈段是定义了8个字型数据,16个字节,这里sp设置为10h == 16指向栈顶,如果你设到30h明显的越界了 ...
小甲鱼 发表于 2011-4-13 23:26 http://fishc.com/dz/images/common/back.gif


    可我对栈段理解有误,我是从CS开头a段就开始算起。如果是10h,应该是从栈,也就是b段开始算起。
那么这SP是如何算的呢?

shangyl00 发表于 2011-4-14 10:48:19

谁能解答我的疑惑?

790496690 发表于 2011-4-16 19:48:32

本帖最后由 loop 于 2011-4-16 19:53 编辑

你改成30的话,我估计是你把栈顶指针的位置搞反了吧!!!还有你的16段有32个字节,可是你的堆载只有16个字节,这是明显的越界啊!!!其实你把那数据段的DW改为DB也可以储存那些数据啊,在你的截图中,可以看到,一个字节就可以储存一个数据啊!说的很纠结啊!!!算了,不多说了。

shangyl00 发表于 2011-4-18 10:51:05

你改成30的话,我估计是你把栈顶指针的位置搞反了吧!!!还有你的16段有32个字节,可是你的堆载只有16个字 ...
790496690 发表于 2011-4-16 19:48 http://fishc.com/dz/images/common/back.gif


    这个问题我已经搞清楚了,谢谢你!

伊晃 发表于 2011-4-18 17:35:51

我也遇到同样的问题,后来想了一下明白了,我把栈段地址看成13DC:0000,应该是13DC:0020,定议了16个字节,栈底应该是16,我说的对不?

shangyl00 发表于 2011-4-19 17:02:38

我也遇到同样的问题,后来想了一下明白了,我把栈段地址看成13DC:0000,应该是13DC:0020,定议了16个字节, ...
伊晃 发表于 2011-4-18 17:35 http://fishc.com/dz/images/common/back.gif


    对!
页: [1]
查看完整版本: 做了第6章实验5(6)的题目,有疑惑不解,请甲鱼老师解答