首页
社区
课程
招聘
[旧帖] dw,db,dd定义的数据与C定义的有什么不同? 0.00雪花
发表于: 2011-2-11 09:05 11195

[旧帖] dw,db,dd定义的数据与C定义的有什么不同? 0.00雪花

2011-2-11 09:05
11195
1、dw,db,dd定义的数据与C定义的有什么不同?也是直接分配内存单元吗?
2、SS:SP指向栈顶,可CPU如何知道这个栈有多长,在这个栈后面什么位置可以再写入数据?
3、汇编程序为什么样在定义段?这个是必需的吗?一个段要多长?数据段、代码段什么的各有什么作用?
初学汇编,王爽的书上实在找不着答案,请高手给解答一下,万分感谢

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我不大明白以你现在这基础怎么会直接学汇编的,建议你先学学C吧。
1、dw、db、dd与C的定义没有区别,不同语言的写法和规则有些不同而已。都是定义变量分配内存的。
2、BP是指向栈底的,长度自己算吧。在寻址范围内的内存空间都是可以直接写入数据的,但是有些空间是没有分配的,写进去可能导致程序出问题,所以从某种的角度讲,栈的后面就不能写进去东西了。
3、在基于段式管理的系统上的程序是要定义段的,每个段都有不同的属性,比如数据段就是可写可读,代码段就是只读可执行。一个段要多长是程序员的事情,但是有最大值,跟计算机系统有关,比如8086下,寄存器只有16位,寻址64K空间,就把段的最大值定义为64K,80386下就无此限制,但是肯定不能超过4G的,因为32位机器的寻址空间只有4G。
   一般来讲,CPU是不分代码段数据段的,CPU认为,取指周期去取出来的就是指令,取数周期取出来的就是数据。但是,内存是有属性的,没有可执行属性的内存是不能执行的,否则CPU就会抛异常,至于数据段和代码段,只是我们编写程序的标准分段而已,你也可以在数据段里执行代码(前提是没有相关的检查机制和数据段有执行属性)或在代码段里定义变量,当然,由于一般来说代码段是只读的,所以定义的变量也是只读的,不能改。如果你在32位下,你完全可以申请一个可写可读可执行的内存区,可能存变量,也可以执行代码。
2011-2-11 11:11
0
雪    币: 379
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
实模式下的栈最大只有64k,如果一直填充会导致栈的内容循环覆盖,记得王爽的书上有讲。栈的位置由ss指明。
段的相关知识王爽的汇编课本在第二章有讲解,我是手机上的论坛,打字不方便,楼主就自己动手翻翻课本吧……数据段栈段在第三章有解释,多个段的程序在第六章有,你可以看看
dd、db、dw是伪指令,是用来定义双字,字节和字型的数据。跟c语言有些不一样,c的数据有自己的类型,例如整形浮点型字符型等,它并不是像汇编这样,按照占用内存的大小来划分数据类型,虽然也有长整型和短整型之分。数据占的字节多少决定数据的精度。如果是已经初始化过的数据,都会在程序中保存相应的值,没有初始化的数据,则会在程序运行时,根据需要对其赋值。不管数据有没有初始化,都会在内存中为其分配相应的地址
希望可以帮得上你^_^)Y
2011-2-11 11:22
0
雪    币: 379
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
回复完发现沙发的回复更专业,有内涵啊
顺便感慨一下一楼你回帖的时间很是犀利,2011-02-11 11:11:11
2011-2-11 11:26
0
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哈哈,要不是你说了,我还真不知道了,这时间,难得啊。
我都好久没碰过实模式编程了,说的都跟保护模式的混在一起了。
我看LZ真得补补基础再看汇编了。
2011-2-11 11:39
0
游客
登录 | 注册 方可回帖
返回
//