Memory “的8位十六进制地址是什么?”;最后一句话;具有32 MB RAM的PC的字节数

Memory “的8位十六进制地址是什么?”;最后一句话;具有32 MB RAM的PC的字节数,memory,assembly,hardware,memory-address,processor,Memory,Assembly,Hardware,Memory Address,Processor,我正在读一本关于组装的书;Jones和Bartlett出版社80x86汇编简介 作者做了练习,但没有答案。显然,在继续之前,我想 确保我完全理解本章的概念 唐克 对于内存为32 MB的PC,“最后一个”字节的8位十六进制地址是多少 这是我的解决方案: 1) 转换为位 32兆字节=268435456位 2) 我减去8位以删除最后一个字节 268435448 3) 转换为十六进制 FFFFFF8 所以我得到了fffffff8 这看起来是个好答案吗?不是。对于汇编编程来说,能够在头脑中进行简单的二次幂

我正在读一本关于组装的书;Jones和Bartlett出版社80x86汇编简介

作者做了练习,但没有答案。显然,在继续之前,我想 确保我完全理解本章的概念

唐克

对于内存为32 MB的PC,“最后一个”字节的8位十六进制地址是多少

这是我的解决方案:

1) 转换为位 32兆字节=268435456位

2) 我减去8位以删除最后一个字节 268435448

3) 转换为十六进制 FFFFFF8

所以我得到了fffffff8


这看起来是个好答案吗?

不是。对于汇编编程来说,能够在头脑中进行简单的二次幂运算非常有用。1K等于2^10。所以1M等于2^20。所以32M等于2^25(因为2^5=32)。所以最后一个字节的地址是2^25-1(因为第一个字节位于0)。这是全部为1的25位(因为2^n-1始终为n1)。在十六进制中,这是六个F(每F 4位)加上一个额外的1,因此预先加上一个0以获得8个十六进制数字,您有
01FFFFFF
否。对于汇编编程来说,能够在您的头脑中进行简单的二次幂运算非常有帮助。1K等于2^10。所以1M等于2^20。所以32M等于2^25(因为2^5=32)。所以最后一个字节的地址是2^25-1(因为第一个字节位于0)。这是全部为1的25位(因为2^n-1始终为n1)。在十六进制中,这是六个F(每F 4位)加上一个额外的1,所以在0之前加上一个零就得到了8个十六进制数字,您有
01FFFFFF

您应该考虑两件事:

对于大多数计算机(所有PC机),地址是以字节而不是位给出的

所以你们必须计算:32Mbyte=33554432字节,减去1字节=01FFFFFF(十六进制),就像“基因”在他的答案中写的那样


在现实中(如果您感兴趣),您还必须考虑一个事实,即在真实PC的地址区域(从000A0000到000FFFFF)中存在一个“间隙”,因此不是所有RAM都可用,就是RAM的最后一个地址来得晚。此区域用于图形卡和BIOS ROM。

有两件事需要考虑:

对于大多数计算机(所有PC机),地址是以字节而不是位给出的

所以你们必须计算:32Mbyte=33554432字节,减去1字节=01FFFFFF(十六进制),就像“基因”在他的答案中写的那样

在现实中(如果您感兴趣),您还必须考虑一个事实,即在真实PC的地址区域(从000A0000到000FFFFF)中存在一个“间隙”,因此不是所有RAM都可用,就是RAM的最后一个地址来得晚。该区域用于图形卡和BIOS ROM。

我认为是:00007FFF 因为:32MB=32*1024=32768 最后一个字节有地址32767(7FFF)

我想是:00007FFF 因为:32MB=32*1024=32768

最后一个字节有地址32767(7FFF)

内存是以字节而不是位寻址的。这意味着:32 MB字节=33554432字节减去1字节33554431将其转换为十六进制1FFFFFFF,这不是编程问题。请尝试@RaymondChen进行汇编编程,它确实是。在这个级别上编程时,这种情况经常出现。内存是以字节而不是位来寻址的。这意味着:32 MB字节=33554432字节减去1字节33554431将其转换为十六进制1FFFFF,这样做更有意义吗?这不是编程问题。请尝试@RaymondChen进行汇编编程,它确实是。在这个级别编程时,经常会出现这种情况。谢谢,当我将计算基于位而不是基于字节时,我犯了这样的错误:不客气。更重要的一点是学习关于二次幂计算的经验法则。第一个字节为0是一个假设。尽管英特尔处理器通常以这种方式使用内存,但它并不是一成不变的。32Mb计算机的末尾假定内存是连续的,通常情况下是这样的,但内存扩展可能位于完全不同的地址。@AlexisWilke当然可以,但书中引用的OP是关于x8086 PC的问题。很明显,除了这个直截了当的案子之外,它没有任何意图。你应该写作者。谢谢你,我犯了这个错误,我的计算是以位为基础的,而不是以字节为基础的:不客气。更重要的一点是学习关于二次幂计算的经验法则。第一个字节为0是一个假设。尽管英特尔处理器通常以这种方式使用内存,但它并不是一成不变的。32Mb计算机的末尾假定内存是连续的,通常情况下是这样的,但内存扩展可能位于完全不同的地址。@AlexisWilke当然可以,但书中引用的OP是关于x8086 PC的问题。很明显,除了这个直截了当的案子之外,它没有任何意图。你应该给作者写信。事实上,我对这本书很感兴趣。你是否有一本好书或文章链接,可以更详细地介绍这一点。我想我现在正在读的这本书将涵盖这一点,但以防万一:)你可能对硬件圣经感兴趣,尽管我看不到显示器和BIOS使用的内存的任何信息。。。这里有一份上一版本的PDF副本:第四章是关于记忆的。我确实对它感兴趣。你是否有一本好书或文章链接,可以更详细地介绍这一点。我想我现在正在读的这本书将涵盖这一点,但以防万一:)你可能对硬件圣经感兴趣,尽管我看不到显示器和BIOS使用的内存的任何信息。。。这里有一份上一版本的PDF副本:第四章是关于内存的。恐怕是0x01FFFFFF。你的答案是32kib,恐怕是0x01FFFFFF。你的答案是32千磅。