gpt4 book ai didi

assembly - 如果我们在内存地址末尾请求多字节数据会发生什么?

转载 作者:行者123 更新时间:2023-12-02 02:07:20 27 4
gpt4 key购买 nike

我正在学习汇编语言,对此有疑问。我有一个实模式下的引导加载程序,我们可以访问最多 1 mb 的内存。如果我们在 1 MB 空间的末尾位置请求 2 字节数据,会发生什么情况,它会只返回一个字节还是引发一些异常?当我们处于保护模式(启用和禁用分页)时,我也有类似的问题。另一个问题是,当程序尝试访问比裸机非分页环境中物理安装的内存更多的地址时,会发生什么? (假设在2gb机器上访问地址0x00FFFFFF,这里的地址就超过2gb了)我已经阅读了英特尔手册的一些部分,但它们很庞大,而且很难找到这些信息。

最佳答案

效果取决于很多因素,包括您的 CPU、其他硬件以及您尝试访问最后一个字节的方式。

在原始 8086 上,访问最后一个字节将绕回内存的开头。

在支持超过 1MB 内存的更高版本的 CPU(如 80286)上,对最后一个字节的访问可能会触发错误(如果尝试将实模式地址 0xF000:FFFF 作为16 位字),或(取决于系统的 A20 地址线是否启用)回绕以访问物理地址 0 或读取物理地址 0x100000 中存储的字节(1MB)。例如,这可以通过尝试将地址 0xFFFF:000F 作为一个单词来读取来完成。

随着 80386 大大扩展的保护模式,还可能存在其他考虑因素(例如寻址的段是否足够大以容纳地址),但最终归结为要么让您读取单词,要么您将得到异常.

总之,您要么读取两个字节,要么得到异常。您不会获得部分阅读。

至于尝试读取不存在的物理内存地址会得到什么值,这取决于硬件。如果您尝试使用 32 位地址读取值,但硬件只有 24 个地址位,那么其中一些较大的逻辑地址将“环绕”并从较低地址的物理内存中读取(因为较高的地址位实际上是由于没有地址线来容纳它们而被掩盖)。或者,您可以返回 0、0xFF,或者可能返回某个恰好 float 在数据线上的不确定值。

关于assembly - 如果我们在内存地址末尾请求多字节数据会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68236942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com