16位系统中的程序如何访问大于65535的整数,但不能访问地址

问题描述 投票:0回答:1

我在前几天知道,一个16位系统只能访问最大64 KB的RAM。内存地址的概念是16位系统可以访问2 ^ 16的数字,因此以无符号整数形式只能访问2 ^ 16 = 65536 INTEGERS(0到65535)。因此,16位系统只能使用不超过64 KB的地址(在完成小型计算后)。现在主要问题。那是不是当我们将整数定义为“ long int”,而不是它如何访问大于65535的整数?

c++ c memory operating-system programming-languages
1个回答
0
投票

前几天我知道一个16位系统只能访问最大64 KB的RAM

这实际上是错误的,8086的外部地址总线为20位,因此可以访问1,048,576字节(〜1MB)。您可以在此处阅读有关8086体系结构的更多信息:https://en.wikipedia.org/wiki/Intel_8086

是我们将整数定义为'long int'而不是它如何访问大于65535的整数?

您是否在询问寄存器的大小?在这种情况下,答案很简单:并非如此。它可以访问前16位,然后可以访问其他16位,并且应用程序使用这2个16位值进行的操作都取决于它(以及所使用的框架,例如C运行时)。

关于如何仅用16位整数访问20位的完整地址空间,答案是地址分段。您有第二个寄存器(8086上的CS,DS,SS和ES)存储地址的高位部分,然后CPU将它们“拼接”在一起以发送到内存控制器。

© www.soinside.com 2019 - 2024. All rights reserved.