鱼C论坛

 找回密码
 立即注册
查看: 5695|回复: 4

一个关于data段中的数据问题(db、dd、dw)

[复制链接]
发表于 2012-8-26 20:56:53 | 显示全部楼层 |阅读模式

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

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

x
   如:db '1111','2222'
   小甲鱼说上面那样一个数就占一个字节,那就占8个字节。那:db 1,1,1,1,2,2,2,2  中一个数还是占一个字节的吧?也是占8个字节啊,那这个和上面那个又有什么区别嘛。最开始我还以为'1111'这个就是占一个字节的。
   如果安小甲鱼说的那样,dw 0123h,0456h里面的任何一个数字是不是也是占一个字的空间啦?好像不是吧,好像是0123h才是占一个字的空间吧。我现在好纠结这个问题,希望各位懂的大哥大姐能给小弟说一下是怎么回事,谢谢了。
  对了,还有一个问题,用dd定义数据。如:dd 100000在内存中应该是以16位的数据显示的吧?那像dd '1111','2222'也应该在内存中是以16位的数据显示的啊,那一人数还怎么占一个字节啊。
  谢谢大家了。真心的感谢,那怕能得到大家一句“我也不懂”,我也很感激。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-26 21:44:05 | 显示全部楼层
本帖最后由 向往 于 2012-8-26 22:00 编辑

db '1111','2222'
这里要注意一下, 这个是有 ' ' 引号的, 所以这个就是 字符串
也就是说, 这里的每一个数字, 它在内存中存储的, 并不是数字本身, 而是数字对应的ASCII码
'1' 就是 31H  (16进制)
'2' 就是 32H
所以 db '1111','2222' 实际上在内存中是 31 31 31 31 32 32 32 32 所以是8个字节
而   db 1,1,1,1,2,2,2,2  在内存中存储的, 就是数的本身, 也就是 01 01 01 01 02 02 02 02

另外, db '1111','2222' 跟 db '1', '1', '1', '1', '2', '2', '2', '2' 是一样的,  还有, 也可以使用 "" 双引号

dw 0123h, 0456h   你说的没错, 这里就是定义了2个字型数据 0123H 为1个字, 主要是你应该还没分清楚普通数据和字符串的区别吧, 看了我上面的解释, 应该就没有问题了

至于 dd 的问题, 我看说到底还是跟上面一样的问题吧, 认真看看就好了, 呵呵
如果还有不懂的, 可以继续提问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-27 07:28:59 | 显示全部楼层

首先非常感谢你的回答,谢谢。不过我还有点不是很懂。其实我最开始的疑惑是来自一个小程序的。程序在下面  assume ds:data,cs:code
data segment
  dd 100001
  dw 100
  dw 0
data ends

code segment
  start:
         mov ax,data
                 mov ds,ax
                 mov ax,ds:[0]   ;我就没搞懂,这一步。你也说了,一个普通的数据储存,在内存中储存就是数字不是对应的
ASCII码。但是,我觉得上面的dd 100001定义的数据应该在内存中是以ASII码储存的吧,要不怎么能取高位和低位了?

                 mov dx,ds:[2]
                 div word ptr ds:[4]
                 
                 mov ds:[6],ax
                 mov ax,4c00h
                 int 21h
code ends
end start

真的非常感谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-27 18:57:31 | 显示全部楼层
不是ASCII码呢
首先, 用MASM编译器编译的源程序, 写代码时, 默认是10进制的, 16进制要+h, 2进制+b, 8进制+o
dd 100001 是在内存中, 用了双字 (4字节) 的空间存储了一个 100001(十进制),
100001 就是 186A1 (16进制, 也可以看作 0001 86A1),
所以, 高位 是 1 ,  低位 是 86A1

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-27 22:59:12 | 显示全部楼层
向往 发表于 2012-8-27 18:57
不是ASCII码呢
首先, 用MASM编译器编译的源程序, 写代码时, 默认是10进制的, 16进制要+h, 2进制+b, 8进制+ ...

有点懂了,谢谢{:7_155:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-27 23:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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