CPU寻址问题?

xq7997879 2012-10-27 12:17:04
假设CPU的寻址空间为4BG,那内存的每个存储单元,对其进行编号,是不是要32位二进制数才能实现对每个单元的编号呀?
CPU一条指令是16位,这指令包括操作码和地址码,那地址码所占位数还不到16位,那CPU如何保证能够访问到每个地址单元呢?
...全文
247 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
子善旬 2012-11-06
  • 打赏
  • 举报
回复
那如果该机器CPU寻址是32位,那16位的指令是不是就实现不了对内存的寻址呢? 答案是可以的,参考arm的LTOG伪指令的作用 arm的thumb指令是16bit,数据和地址是32bit的,32bit的地址不能转化成16bit的机器码,它就使用LTOG伪指令来转换。 即使32bit指令,32位的数据和地址,也会碰到不能转化成机器码的情况。
大熊猫侯佩 2012-10-28
  • 打赏
  • 举报
回复
不同模式表示不同含义,比如intel未开分页表示物理地址,若开了分页则表示虚拟地址。
weiguozhe 2012-10-28
  • 打赏
  • 举报
回复
建议楼主多看看基础书籍。
xq7997879 2012-10-27
  • 打赏
  • 举报
回复
是表示物理地址范围还是虚拟地址范围呢?
xq7997879 2012-10-27
  • 打赏
  • 举报
回复
系统是64位的诶。
那CPU指令里面的offset[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:
这个有启发!
我这CPU最大支持内存是32GB,那这个offset就得34位了咯?


你的CPU支持的是物理内存大小吧?如果32位系统,你的虚拟空间也只有32位,所以offset还是

32位。你要明白CPU指令里面的offset表示的物理地址范围还是虚拟地址范围哦。
[/Quote]
大熊猫侯佩 2012-10-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
这个有启发!
我这CPU最大支持内存是32GB,那这个offset就得34位了咯?
[/Quote]

你的CPU支持的是物理内存大小吧?如果32位系统,你的虚拟空间也只有32位,所以offset还是

32位。你要明白CPU指令里面的offset表示的物理地址范围还是虚拟地址范围哦。
xq7997879 2012-10-27
  • 打赏
  • 举报
回复
这个有启发!
我这CPU最大支持内存是32GB,那这个offset就得34位了咯?
[Quote=引用 6 楼 的回复:]
我简单说一下intel指令编码的方案吧。

通用IA-32机器指令最多可以有6部分组成,分别是:

1 指令前缀(1byte)
2 操作码(1-3byte)
3 Mod R/M(1byte)
4 SIB(1byte)
5 offset(1-4byte)
6 立即数(1-4byte)

可以看出,其一条指令最多可达14个字节,即112位。你看一下他的地址偏移最多用掉

4b……
[/Quote]
大熊猫侯佩 2012-10-27
  • 打赏
  • 举报
回复
我简单说一下intel指令编码的方案吧。

通用IA-32机器指令最多可以有6部分组成,分别是:

1 指令前缀(1byte)
2 操作码(1-3byte)
3 Mod R/M(1byte)
4 SIB(1byte)
5 offset(1-4byte)
6 立即数(1-4byte)

可以看出,其一条指令最多可达14个字节,即112位。你看一下他的地址偏移最多用掉

4byte正好为32位,可以寻址4GB空间,对你有启发吗?
xq7997879 2012-10-27
  • 打赏
  • 举报
回复
这时候的指令又最少需要多少位呢?
xq7997879 2012-10-27
  • 打赏
  • 举报
回复
那如果该机器CPU寻址是32位,那16位的指令是不是就实现不了对内存的寻址呢?[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:
“设某机的指令字长为16位,其中操作码占6位,地址码占10位。操作码表示机器所执行的各种操作,地址码表示参加运算的数在存储器的位置,机器指令的操作码和地址码都采用0,1代码的组合来表示!”
原文见书《计算机组成原理》唐塑飞
第二版 第11页,最后一段!


书上说的很清楚啊,他是“设”某机指令字长位16位,那书有没有说该机器CPU寻址是32位?是4GB?
[/Quote]
大熊猫侯佩 2012-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
“设某机的指令字长为16位,其中操作码占6位,地址码占10位。操作码表示机器所执行的各种操作,地址码表示参加运算的数在存储器的位置,机器指令的操作码和地址码都采用0,1代码的组合来表示!”
原文见书《计算机组成原理》唐塑飞
第二版 第11页,最后一段!
[/Quote]

书上说的很清楚啊,他是“设”某机指令字长位16位,那书有没有说该机器CPU寻址是32位?是4GB?
xq7997879 2012-10-27
  • 打赏
  • 举报
回复
如果我什么都懂了?还需要来问啊??
这是书上写着的!
“设某机的指令字长为16位,其中操作码占6位,地址码占10位。操作码表示机器所执行的各种操作,地址码表示参加运算的数在存储器的位置,机器指令的操作码和地址码都采用0,1代码的组合来表示!”
原文见书《计算机组成原理》唐塑飞
第二版 第11页,最后一段!
大熊猫侯佩 2012-10-27
  • 打赏
  • 举报
回复
你在讲什么?谁和你说CPU一条指令是16位了?是16位指令吗?还是32位code?

是变长指令码吗?什么架构的?

这些你都似是而非,后面的推理必定是错误的。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧