鱼C论坛

 找回密码
 立即注册
查看: 2539|回复: 3

发现一个问题,请各位解答(视频中的代码有错误?).

[复制链接]
发表于 2011-11-29 22:27:43 | 显示全部楼层 |阅读模式

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

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

x
先上代码(取自小鱼老师的30课)
按照视频上的代码建立16个字节的stack,程序执行到第二个循环s0的loop s0之前就直接退出了。
但是按照书上建立32个字节的stack就正常结束。 个人感觉建立16个字节的stack够用了,请各位解惑。
assume cs:code,ds:data,ss:stack
data segment
dw 1111h,2222h,3333h,4444h,5555h,6666h,7777h,8888h
data ends

stack segment
dw 0,0,0,0,0,0,0,0
stack ends



code segment
    start:
              mov ax,data
                      mov ds,ax
                      mov ax,stack
                  mov ss,ax
                  mov sp,16
                  mov bx,0
                  mov cx,8
            s:push [bx]
                  add bx,2
                  loop s
                  
                  mov bx,0
                  mov cx,8
           s0:pop [bx]
                  add bx,2
          loop s0

          mov ax,4c00h
          int 21h
code ends
end start                  
         
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 10:56:08 | 显示全部楼层
按照我们Mr.C大神的说法就是:
理论上转移多少数据,开僻多大的栈空间。
实际上,执行程序时,栈顶位置总是被系统存放一些CS,IP等数据。这些数据跟程序无关,但不留空间还不行。
好像说最少得留X+3个内存单元。所以课本里留的是X*2的栈空间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-30 22:18:07 | 显示全部楼层
留点余地吧,不然会报错,一般凑个16的倍数,比如要用10个单元,就设置16,用19个就设置32个单元,别怕浪费,不就几个字节空间吗,大内存时代了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-1 20:58:20 | 显示全部楼层
谢谢两位了:)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 19:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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