社区
汇编语言
帖子详情
CPU寻址问题?
xq7997879
2012-10-27 12:17:04
假设CPU的寻址空间为4BG,那内存的每个存储单元,对其进行编号,是不是要32位二进制数才能实现对每个单元的编号呀?
CPU一条指令是16位,这指令包括操作码和地址码,那地址码所占位数还不到16位,那CPU如何保证能够访问到每个地址单元呢?
...全文
247
13
打赏
收藏
CPU寻址问题?
假设CPU的寻址空间为4BG,那内存的每个存储单元,对其进行编号,是不是要32位二进制数才能实现对每个单元的编号呀? CPU一条指令是16位,这指令包括操作码和地址码,那地址码所占位数还不到16位,那CPU如何保证能够访问到每个地址单元呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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?
是变长指令码吗?什么架构的?
这些你都似是而非,后面的推理必定是错误的。
C++第4课:C++协程及高并发网络协程库State-Threads
然后讲解汇编语言的
CPU
寻址
,以及CS:IP控制
CPU
走向的原理。 然后讲解高并发网络协程库State-Threads的案例应用,开发上万个协程,以及TCP服务器案例。 本课程的内容主要包括C/C++语言的setjmp、longjmp和goto,C/...
8086
CPU
的
寻址
方式(重点)
8086
CPU
的
寻址
方式8086
CPU
寻址
方式(重点)一、立即
寻址
二、寄存器
寻址
三、存储器
寻址
1,直接
寻址
2,寄存器间接
寻址
3,基址
寻址
4,变址
寻址
5、基址变址位移
寻址
6,基址变址
寻址
指令就是计算机完成某种操作的命令。 机器指令的格式 每条机器指令都由”0“和”1“组成,包含操作码和地址码。操作码:说明指令的性质和功能;地址码:说明参与运算的操作数或操作数的地址。 8086
CPU
寻址
方式(重点) 程序员决定应该怎么描述操作数,对于
CPU
来说,根据程序员在指令中对操作数的描述,如何找到该操作数,
CPU
寻址
范围(
寻址
空间)一系列
问题
一、什么叫
寻址
空间?
寻址
空间一般指的是
CPU
对于内存
寻址
的能力。通俗地说,就是能最多用到多少内存的一个
问题
。数据在存储器(RAM)中存放是有规律的 ,
CPU
在运算的时候需要把数据提取出来就需要知道数据在那里 ,这时候就需要挨家挨户的找,这就叫做
寻址
,但如果地址太多超出了
CPU
的能力范围,
CPU
就无法找到数据了。
CPU
最大能查找多大范围的地址叫做
寻址
能力 ,
CPU
的
寻址
能力以
CPU
寻址
方式--8086为例
CPU
寻址
方式--8086为例 首先说明
cpu
为啥要段基址+段内偏移地址
寻址
,因为8086地址线20位,所以地址范围=2^20 = 1MB,但是8086寄存器都是16位的,所以用寄存器
寻址
的话,只能寻2^16 < 2^20,也就是有一部分地址寻不到,所以使用段基址<<<4+段内偏移地址,这样结果就是可以
寻址
全部地址。 入正题,
CPU
寻址
方式大致分为3种,分别是 寄存器
寻址
“数”在寄存器中,直接从寄存器中拿数据。 mov ax,0x10 mov dx,0x9 mov a
CPU
寻址
?为什么需要虚拟地址空间?
CPU
寻址
:现代处理器使用的是一种称为虚拟
寻址
的
寻址
方式。使用虚拟
寻址
,
CPU
需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存。实际上完成虚拟地址转换为物理地址转换的硬件是
CPU
中含有一个被称为内存管理单元的硬件。 为什么要有虚拟地址空间:先从没有虚拟地址空间说起吧,没有虚拟地址空间的时候,程序都是直接访问和操作物理内存。但会有一些
问题
: 1. 用户可以访问任意的内存,
寻址
内存的每个字节,这样容易破坏操作系统,造成操作系统崩溃。 2. 想要同时运行多个程序特别困难。 总结来说:如果直接把物
汇编语言
21,458
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章