鱼C论坛

 找回密码
 立即注册
查看: 4418|回复: 7

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

[复制链接]
发表于 2011-4-13 17:22:50 | 显示全部楼层 |阅读模式

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

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

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

  5. b segment
  6.         dw 0,0,0,0,0,0,0,0
  7. b ends

  8. code segment
  9. start:          mov ax,b
  10.                 mov ss,ax
  11.                 mov sp,10h       
  12.                 mov ax,a
  13.                 mov ds,ax
  14.                 mov bx,0
  15.                 mov cx,8
  16. s:               push [bx]
  17.                 add bx,2
  18.                 loop s
  19.                
  20.                 mov ax,4c00h
  21.                 int 21h
  22. code ends
  23. end start
复制代码
我认为SP是30h的根据是,我查看了定义在内存中a段的数据存放如下
C:\Masm>debug 15.exe
-r
AX=0000  BX=0000  CX=004F  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=13CC  ES=13CC  SS=13DC  CS=13DF  IP=0000   NV UP EI PL NZ NA PO NC
13DF:0000 B8DE13        MOV     AX,13DE
-d 13dc:0
13DC:0000  01 00 02 00 03 00 04 00-05 00 06 00 07 00 08 00   ................
13DC:0010  09 00 0A 00 0B 00 0C 00-0D 00 0E 00 0F 00 FF 00   ................

13DC:0020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13DC:0030  B8 DE 13 8E D0 BC 10 00-B8 DC 13 8E D8 BB 00 00   ................
13DC:0040  B9 08 00 FF 37 83 C3 02-E2 F9 B8 00 4C CD 21 CC   ....7.......L.!.
13DC:0050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13DC:0060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
13DC:0070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-

请大家帮忙解答疑惑,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-13 23:26:21 | 显示全部楼层
因为你整个栈段是定义了8个字型数据,16个字节,这里sp设置为10h == 16指向栈顶,如果你设到30h明显的越界了,跑到外边去了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-14 08:24:56 | 显示全部楼层
本帖最后由 shangyl00 于 2011-4-14 08:27 编辑



    可我对栈段理解有误,我是从CS开头a段就开始算起。如果是10h,应该是从栈,也就是b段开始算起。
那么这SP是如何算的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-14 10:48:19 | 显示全部楼层
谁能解答我的疑惑?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-16 19:48:32 | 显示全部楼层
本帖最后由 loop 于 2011-4-16 19:53 编辑

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

评分

参与人数 1荣誉 +2 收起 理由
loop + 2 乐于助人

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-18 10:51:05 | 显示全部楼层
你改成30的话,我估计是你把栈顶指针的位置搞反了吧!!!还有你的16段有32个字节,可是你的堆载只有16个字 ...
790496690 发表于 2011-4-16 19:48



    这个问题我已经搞清楚了,谢谢你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-18 17:35:51 | 显示全部楼层
我也遇到同样的问题,后来想了一下明白了,我把栈段地址看成13DC:0000,应该是13DC:0020,定议了16个字节,栈底应该是16,我说的对不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-4-19 17:02:38 | 显示全部楼层
我也遇到同样的问题,后来想了一下明白了,我把栈段地址看成13DC:0000,应该是13DC:0020,定议了16个字节, ...
伊晃 发表于 2011-4-18 17:35



    对!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-29 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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