POPPUR爱换

标题: 处理器寻址的问题 [打印本页]

作者: 铁血烈鹰    时间: 2006-12-21 16:12
标题: 处理器寻址的问题
我初学ASM,用的8位的处理器(数据总线8位),内存地址为0x0000-0xffff,每一个地址只有一个BYTE。但是后来使用凌阳的CPU(语音处理),一个地址居然有16位。照这么说,A64在64位操作系统下,一个地址是64位(8字节)的?再加上40位的地址总线,寻址不就是(64*2^40)/8 Byte了吗?
作者: hopetoknow    时间: 2006-12-21 16:35
小罗同学, 又出来了? 你要多多学习。两个是不同的

x64的地址是对应于1字节的。

有的DSP或单片机, 地址是对应于2字节或4字节的。
作者: 铁血烈鹰    时间: 2006-12-21 17:11
原帖由 hopetoknow 于 2006-12-21 16:35 发表
小罗同学, 又出来了? 你要多多学习。两个是不同的

x64的地址是对应于1字节的。

有的DSP或单片机, 地址是对应于2字节或4字节的。

谢谢了,凌阳的地址对应2字节。ARM,X86和龙芯都是1字节。
我在TC下面试过
指针   volatile unsigned long  *a=(volatile unsigned long*)0x90f0;
显示 (a+1)的地址为0x90f4;

另外32位系统中,是不是用C语言无法改变段地址(地址的高16位)
作者: hopetoknow    时间: 2006-12-21 17:20
这个情况, x86的段地址应该是代码不能直接指定。

指针的高位地址,你却是可以强行制定的。
作者: 铁血烈鹰    时间: 2006-12-21 17:22
我强制定为0x500490f0,但是显示地址还是在8e090f0
作者: hopetoknow    时间: 2006-12-21 17:28
原帖由 铁血烈鹰 于 2006-12-21 17:22 发表
我强制定为0x500490f0,但是显示地址还是在8e090f0

是TC吗?
作者: 铁血烈鹰    时间: 2006-12-21 17:30
原帖由 hopetoknow 于 2006-12-21 17:28 发表

是TC吗?

就是TC,还有iccavr中根本就没有段地址
作者: hopetoknow    时间: 2006-12-21 17:34
给出源码吧
作者: 铁血烈鹰    时间: 2006-12-21 17:57
main()
{
volatile unsigned int  *b=(volatile unsigned int*)0xfe90f0;
volatile unsigned long  *a=(volatile unsigned long*)0xfe90f0;

*a=0xfeef3423;


printf("%lx %lx",a,(a+0));
getch();

}
作者: hopetoknow    时间: 2006-12-21 17:58
是32位编译吗?
作者: 铁血烈鹰    时间: 2006-12-21 18:00
用的win-TC
作者: hopetoknow    时间: 2006-12-21 18:07
原帖由 铁血烈鹰 于 2006-12-21 18:00 发表
用的win-TC

TC2是16位。




欢迎光临 POPPUR爱换 (https://we.poppur.com/) Powered by Discuz! X3.4