白痴问题求大神点拨。。db ? 和db 0有什么区别?

number_lock 2012-02-14 05:54:27
如果db ?在内存单元存入的是00h,那么和db 0有什么区别?
...全文
187 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tishion 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 number_lock 的回复:]
引用 4 楼 otishiono 的回复:
跟编译器有关的。
你用的编译器编译后存储的是0
换到别的系统,别的编译器就不一定是0了。
比如VS2008 为初始化的变量的值是 0xcccccccc


我用的编译器编译后存储是0

那么,如果所有用到db ?的地方都用db 0代替,会出现什么问题?
[/Quote]

这个没有什么问题啊。如果你用db 0来定义就是你把这些内存都用0填充了。

在高级语言里面比如C语言里面,定义变量之后安全起见都最好初始化为你自己指定的值,以防发生不可预料的错误。也就是不建议声明变量后不进行初始化操作。

而汇编语言里面
db ? 的作用就相当于声明变量(内存空间)却不对其赋你指定的初始值,这样的话就是编译器负责填充(赋值)。
db 0 就是声明变量(内存空间)并且用0填充(赋值)
ckc 2012-02-15
  • 打赏
  • 举报
回复
不同的编译器处理不完全相同
写程序时最好采用谨慎原则,就是说不要依赖一些隐含的,编译器相关的特性
比如db ?
你如果认为它的初始值就是0,那就错了
也许某编译器或者某操作系统下这样做确实可以,但是,你不应该依赖这个
把db ?全部写成db 0
从处理结果上来说没有问题,然而,如果是不必要初始化的数据区,就多了初始化的工作,
从效率上来说是有损失的。另外,db ?和db 0有可能会严重影响编译后的代码的大小,
db 0的话有可能会放入数据区,也就是说可执行文件会因此变大,而db ?应该就不会有这个问题,
当然,这个细节也是具体环境相关的。
其实这种问题不要想太多,水到渠成的理解是最好的。
db 0和db ?这两个你就记住:如果需要初始值为0就用db 0,否则就用db ?
火雲邪神 2012-02-15
  • 打赏
  • 举报
回复
db 0 ;初始化是零
db ?;未初始化,也许是零,也许不是零,不确定。
sulsansan 2012-02-15
  • 打赏
  • 举报
回复
这个好像C里面的++i和i++相加一样吧,不同的编译器有不同的处理
1az98你好 2012-02-14
  • 打赏
  • 举报
回复
? 告诉编译器:你不必为我初始化这块内存。所以它的值为其他操作留下的0或1的bit串
0 告诉编译器:生成源程序时你要生成一些代码来将这块内在初始化为 0
number_lock 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 otishiono 的回复:]
跟编译器有关的。
你用的编译器编译后存储的是0
换到别的系统,别的编译器就不一定是0了。
比如VS2008 为初始化的变量的值是 0xcccccccc
[/Quote]

我用的编译器编译后存储是0

那么,如果所有用到db ?的地方都用db 0代替,会出现什么问题?
masmaster 2012-02-14
  • 打赏
  • 举报
回复
db 0 ;初始化是零
db ?;未初始化,也许是零,也许不是零,不确定。
Tishion 2012-02-14
  • 打赏
  • 举报
回复
跟编译器有关的。
你用的编译器编译后存储的是0
换到别的系统,别的编译器就不一定是0了。
比如VS2008 为初始化的变量的值是 0xcccccccc
leetow2003 2012-02-14
  • 打赏
  • 举报
回复
默认情况下都是0
number_lock 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gsy999 的回复:]
引用楼主 number_lock 的回复:
如果db ?在内存单元存入的是00h,那么和db 0有什么区别?

书上能没讲到吗?
db ? ;声明一个一字节的变量,但不对这个变量进行初始化.(即里面的初值是什么是不确定的)
db 0 ;声明一个一字节的变量,并初始化为0
[/Quote]

我编译出来,?那个单元里的值就是0
gsy999 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 number_lock 的回复:]
如果db ?在内存单元存入的是00h,那么和db 0有什么区别?
[/Quote]
书上能没讲到吗?
db ? ;声明一个一字节的变量,但不对这个变量进行初始化.(即里面的初值是什么是不确定的)
db 0 ;声明一个一字节的变量,并初始化为0

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧