visual C 如何读绝对地址?
在一本书中看到:
在32位系统中没有段地址说法,D000段对应的绝对地址是: 0x000d0000,因此只要初始化你需要的类型的指针,使它指向的指针地址为:0x0d0000就可以了
比如你要读取D000:0100的地址,其代码如下:(数据类型为: float)
……
float *p=(float*)(0x000d100);
float data=*p;
……
问题:
1. 16位系统中段地址和偏移地址?
2.上面的话一头雾水,有无印错的数字?帮我解释一下各个数字吧,必送分!
3.若读(传递)一批数据,该如何做?
………………
解决疑问者必给分!
另外,希望CSDN上别排斥弱者啊!,好不好
问题点数:50、回复次数:6Top
1 楼willwzq(will)回复于 2001-07-26 10:51:14 得分 0
关注!Top
2 楼runbuff(玩水的人)回复于 2001-07-26 11:02:30 得分 20
1、16位系统中的段地址与偏移地址说来就话长了,在32位Windows下也没多大用处。
简单地说,段地址与偏移地址都为16位,把段地址左移4位,与偏移地址合成一个20位的真实地址。(16位系统中地址寄存器为20位)
2、在VC中传递一批数据可用函数memcpy()。
Top
3 楼chenlee()回复于 2001-07-26 11:07:51 得分 20
在16位系统中,内存地址由段地址和段内偏移地址两部分组成,
格式是: 段地址:偏移地址。换算程线性的内存地址就是:段地址×16+偏移地址
比如上面的 D000:0100实际指向的就是:0xD000 * 0x10 + 0x100 = 0xD0100。
上面程序中的数字写错了,应该是 float *p=(float*)0x000D0100
如果是地址连续的数据,直接用memcpy()就可以了。Top
4 楼syx(你好)回复于 2001-07-26 11:21:35 得分 0
关注是什么意思?Top
5 楼willwzq(will)回复于 2001-07-26 15:41:28 得分 0
upTop
6 楼haoliangli(bob999)回复于 2001-08-13 22:14:29 得分 10
同意chenlee() Top




