社区
C++ 语言
帖子详情
16位寄存器,20位地址总线,64kb一段的内存 这个关系没搞清呢,求高手指点
ghlhy0505
2011-08-15 10:16:03
寄存器16位,地址线20位,所以要用两个16位寄存器来存贮地址,一个段基址,一个偏移量,
偏移量16bit 2^16=64kb
在实际寻址中这个是怎么运作的呢?请高手指点一下啊····多谢
...全文
978
12
打赏
收藏
16位寄存器,20位地址总线,64kb一段的内存 这个关系没搞清呢,求高手指点
寄存器16位,地址线20位,所以要用两个16位寄存器来存贮地址,一个段基址,一个偏移量, 偏移量16bit 2^16=64kb 在实际寻址中这个是怎么运作的呢?请高手指点一下啊····多谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zsykile
2013-02-04
打赏
举报
回复
楼上 CPU怎么知道现在他所处的是哪一个段,因为CPU在最新的的时候一会跑到那个段一会又跑到另一个段,那他是怎么识别自己处在哪个段的啊?
wyfwx
2011-08-16
打赏
举报
回复
段基址+偏移量 = 物理地址(20bit)
段可以有多个,每个含有16位的偏移量
至善者善之敌
2011-08-16
打赏
举报
回复
帮顶吧,找本微机原理来看看
ghlhy0505
2011-08-16
打赏
举报
回复
[Quote=引用 8 楼 gykgod 的回复:]
一位可以表示两个信息 0 ,1
16位可以表示 2的16次方个信息
2的16次方就是 2^6*2^10 也就是64*2^10 而2^10就是1K
LZ 您说是不是啊~
[/Quote]
亲,您的解答我好喜欢的捏
那这个64kb不是内存的最小单位吧? 内存的最小单位是不是跟机器的位数有关系啊?
数值的关系我是明白,可是我想不出他这个实际是怎么工作的呢?通过这种寻址方式得出一个20位地址,
根据这个地址定位到内存的一个区域,然后每次读回cpu的数据是内存最小单位的倍数吧?这个64kb只是在计算地址时分的一个段,地址得出之后就没他什么事儿了吧?哎呦···
gykgod
2011-08-16
打赏
举报
回复
一位可以表示两个信息 0 ,1
16位可以表示 2的16次方个信息
2的16次方就是 2^6*2^10 也就是64*2^10 而2^10就是1K
LZ 您说是不是啊~
ghlhy0505
2011-08-16
打赏
举报
回复
[Quote=引用 5 楼 gykgod 的回复:]
物理地址=段地址*16+偏移地址
就是一个寄存器里的左移4位 加上 另一个寄存器里的偏移地址
20根地址线,表示 0x00000 - 0xffffff这个范围的地址
而寄存器16位 您想想还有4位怎么办? 刚好错开(左移4位) 相加 组成20位
附:
段地址:8086CPU将1MB的存储器空间分成许多逻辑段,每个段最大限制为64KB, 段地址就是逻辑段在主存中的起始位置。……
[/Quote]
我主要就是没理解偏移地址那块,为什么限定64kb一段,就正好可以用16位的偏移地址呢?16位和64kb是怎样的一个对应关系呢?
ghlhy0505
2011-08-16
打赏
举报
回复
[Quote=引用 4 楼 hiroyukki 的回复:]
段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移4位+基址寄存器用以间接寻址的奇怪东西。
如果你不能理解,也不用非理解它了。
现在都是平坦内存模型了
[/Quote]
那汇编语言里面还是要用到这种寻址方式的吧?
gykgod
2011-08-15
打赏
举报
回复
物理地址=段地址*16+偏移地址
就是一个寄存器里的左移4位 加上 另一个寄存器里的偏移地址
20根地址线,表示 0x00000 - 0xffffff这个范围的地址
而寄存器16位 您想想还有4位怎么办? 刚好错开(左移4位) 相加 组成20位
附:
段地址:8086CPU将1MB的存储器空间分成许多逻辑段,每个段最大限制为64KB, 段地址就是逻辑段在主存中的起始位置。为了能用16位寄存器表示段地址,8086规定段地址必须是模16地址,即为xxxx0H形式,省略低4位0,段地址就可以用16位数据表示,它通常被保存在16位的段 寄存器中。
偏移地址:存单元距离段起始位置的偏移量简称偏移地址,由于限定每段 不超过64KB,所以偏移地址也可以用16位数据表示。
物理地 址:在1M字节的存储器里,每一个存储单元都有一个唯一的20位地址,称为该存储单元的物理地址,把段地址左移4位再加上偏移地址就形成物理地址。
伺候舒服为止~
贪食蛇男
2011-08-15
打赏
举报
回复
段基址寻址,书上说的很详细了。
寄存器16位,于是该寄存器能表示的地址范围是 0 - 2 ^ 16 - 1,没发挥20位的地址总线寻址能力。
一个基址寄存器+一个段寄存器联合起来则可以表示更大的一个地址空间。
于是发明了这种段寄存器左移4位+基址寄存器用以间接寻址的奇怪东西。
如果你不能理解,也不用非理解它了。
现在都是平坦内存模型了
skyworth98
2011-08-15
打赏
举报
回复
[Quote=引用 2 楼 luciferisnotsatan 的回复:]
引用 1 楼 jackyjkchen 的回复:
8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……
++
[/Quote]
++
luciferisnotsatan
2011-08-15
打赏
举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]
8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……
[/Quote]
++
jackyjkchen
2011-08-15
打赏
举报
回复
8086的古老约定,基址加偏移寻址,基本上是本微机原理教材都会讲啊……
Windows内核-X64汇编
X64新增的
寄存器
VS集成64
位
汇编环境64
位
汇编传参问题汇编里面调用外部函数全局变量定
位
IOMMU
在
没
有IOMMU的情况下,设备(指32bit或64bit设备,老的
16
bit的不提)的DMA操作可以访问整个物理地址空间,所以理论上设备可以向操作系统的代码段、数据段等
内存
区域做DMA,从而破坏整个系统。当然,通常来说不会有这样的设备。IOMMU的出现,可以实现地址空间上的隔离,使设备只能访问规定的
内存
区域。下面简要说一下intel的IOMMU怎么做到这点的: 目前PC架构最多有256PCI...
Cu 大彻大悟
内存
管理 mm (update 0410)
66
20
12-4-10 11:23:53 一口气读完,畅快。。原来站在设计者的角度是这样的 来源于cu 讨论 创意 ARM在
内存
管理...
关于从NAND Flash启动的问题
用的是S3C2410.见附件start.s 其中关于nand flash启动的那
一段
一直百思不得其解,按说从NAND FLASH启动时,应该是前4KB映射到NGCS0,其中的代码将NAND中存放的程序拷贝到RAM中,但该文件提供的程序好象是先从NAND拷贝 128K的代码到ResetEntry开始的地方,即地址为0的地方,然后再从ResetEntry处拷到RAM中,但此时NGCS0好象只有4KB的
C++ 语言
64,647
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章