POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 2121|回复: 11
打印 上一主题 下一主题

处理器寻址的问题

[复制链接]
跳转到指定楼层
1#
发表于 2006-12-21 16:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我初学ASM,用的8位的处理器(数据总线8位),内存地址为0x0000-0xffff,每一个地址只有一个BYTE。但是后来使用凌阳的CPU(语音处理),一个地址居然有16位。照这么说,A64在64位操作系统下,一个地址是64位(8字节)的?再加上40位的地址总线,寻址不就是(64*2^40)/8 Byte了吗?
2#
发表于 2006-12-21 16:35 | 只看该作者
小罗同学, 又出来了? 你要多多学习。两个是不同的

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

有的DSP或单片机, 地址是对应于2字节或4字节的。
回复 支持 反对

使用道具 举报

3#
 楼主| 发表于 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位)
回复 支持 反对

使用道具 举报

4#
发表于 2006-12-21 17:20 | 只看该作者
这个情况, x86的段地址应该是代码不能直接指定。

指针的高位地址,你却是可以强行制定的。
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2006-12-21 17:22 | 只看该作者
我强制定为0x500490f0,但是显示地址还是在8e090f0
回复 支持 反对

使用道具 举报

6#
发表于 2006-12-21 17:28 | 只看该作者
原帖由 铁血烈鹰 于 2006-12-21 17:22 发表
我强制定为0x500490f0,但是显示地址还是在8e090f0

是TC吗?
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2006-12-21 17:30 | 只看该作者
原帖由 hopetoknow 于 2006-12-21 17:28 发表

是TC吗?

就是TC,还有iccavr中根本就没有段地址
回复 支持 反对

使用道具 举报

8#
发表于 2006-12-21 17:34 | 只看该作者
给出源码吧
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 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();

}
回复 支持 反对

使用道具 举报

10#
发表于 2006-12-21 17:58 | 只看该作者
是32位编译吗?
回复 支持 反对

使用道具 举报

11#
 楼主| 发表于 2006-12-21 18:00 | 只看该作者
用的win-TC
回复 支持 反对

使用道具 举报

12#
发表于 2006-12-21 18:07 | 只看该作者
原帖由 铁血烈鹰 于 2006-12-21 18:00 发表
用的win-TC

TC2是16位。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-1-27 12:07

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

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