由王爽《汇编语言》中引出的问题!

时间:2022-01-01 12:22:41
最近在看王爽的《汇编语言》这本书,写得不错,但是有个问题我一直很困扰!
在第2章中,作者提出了一个问题:一个16位寄存器所能存储的数据的最大值为多少?
本人的理解应该是2^16次方-1=65535,我在网上搜索了一下,很多人说答案是64KB。
于是我就试着换算一下,按照王爽书上的介绍,1字节(Byte)=8位(bit),1KB=1024B.
于是我就用65536/8=8192字节(B)然后用8192字节(B)/1024=8KB。
与网上说的不同,我不知道为什么会这样?请高手们指教!

22 个解决方案

#1


2*0=1 
2*1=2 
2*2=4 
... 
2*16=65536约等于64KB

#2


怎么来的啊?65536是位吗?位不是得先变成Byte吗?再由Byte变成KB吗?换算过来应该是8KB啊?
KB是千比特的意思啊,B是比特啊!你怎么转换的?

#3


65536/1042=64

#4


65536/1024=64

#5


确实  。。。我也没弄懂。。

#6


晕倒,这个都有人问,居然还在看汇编语言!

#7


比我都菜  嘿嘿   满足下虚荣感

#8


65536 不就是 64K 么......

#9


按照"一个16位寄存器所能存储的数据的最大值为多少",那么应该是8K
猜想LZ是想说"一个16位的数据总线的寻址范围是多少?",应为2^16个内存单元
由王爽《汇编语言》中引出的问题!

---王爽<<汇编语言>> 1.6

PS:被LZ给弄昏了.我也没看仔细 - -

#10


迷于Byte和bit,或许再详细看看信息存储的方式,搞清楚存储方式这个迷惑也就解开了。。。

#11


9楼是啥意思啊?如果是问“一个16位寄存器所能存储的数据的最大值为多少",那么应该是8K 这是对的吗?
王爽《汇编语言》2.1节提出的问题。

#12


我知道65536/1024=64 我会算,问题是为什么?
65535到底是什么?它除以1024为什么等于KB?

#13


引用楼主 hacker_viking 的帖子:
1字节(Byte)=8位(bit),1KB=1024B. 
于是我就用65536/8=8192字节(B)然后用8192字节(B)/1024=8KB。 

1kb=1024bit而不是1kb=1024byte
你算成8kb是因为你算的时候视1kb=1024byte算的,这样出来就是8kb而不是64kb了

#14


本来这段时间有事,没什么时间来论坛泡,不过看了LZ的帖几天了还挂在最高,就忍不住来说几句了。
以下为个人粗浅理解,不正之处即请指正,以免误导他人。且只仅供参考。
一个16位寄存器所能存储的数据的最大值为多少?
这是LZ问的,也是王爽书上问的。
一个16位寄存器所能存储的数据的最大值为多少?
正如LZ所说: 本人的理解应该是2^16次方-1=65535,
这里略微纠正一下。存储的数据的最大值不能理解成存储的最大数据,如果是存储的最大数据自然是FFFFH,即1111111111111111B,即65535D,而存储的数据的最大值个人认为应理解成能储存多少个(不同)数据,即0D-65535D,也就是65536个,(这里旁带说个题外话,在说寄存器时,如说到7位时,很多人把7位和第7位[实际是6位]混淆。因为有个0位(第1位),那么1位实指第2位,依此类推。这是题外话,就不多说了。)
存储的数据的最大值我们基本确定是65536.
再看楼主后面的一句: 很多人说答案是64KB。
这里我再纠正一点,(我不知这个答案是出自那里)应该是64K,不能有B,这里如果说B是Byte,16位的寄存器就能存储2个字节啊,就2B了啊。这里如果说B是bit,就更容易解决了啊,16位寄存器就16bit啊,即16B啊,16位寄存器放65536bit或者65536Byte,那是存心找CPU的碴,存不了的啊。(我不相信谁能把超过2Byte或者16bit的信息能完整放进16位寄存器里去)。
现在我们再来看题,答案应该很明确了,就是65536,即64K。再说一次,没B。(65536=64K楼主是懂的了。)
答案没有B,我只说一次。。。嘿嘿!
真正理解BIT和Byte,你还为这问题困绕吗?

#15


有这本书的标准答案么?第二版的!

#16


引用 15 楼 windows1989 的回复:
有这本书的标准答案么?第二版的!

答案是有,不过这题不是不列入有答案范围,如果要想学好这本书,不建议看答案,建议自己多看书,多思考,多实践,实在没办法,上网上问,(很多论坛都有很多人在读这本书的),在问与答当中会更有利于你掌握知识。
直接看了答案,你知道了怎么做,但你不一定就知道了为什么这么做。。。况且,论坛上人多,回答会是各个方向的,有时你能学到那本书上没有的知识。。。

#17


引用 13 楼 pceveryday 的回复:
引用楼主 hacker_viking 的帖子:
1字节(Byte)=8位(bit),1KB=1024B. 
于是我就用65536/8=8192字节(B)然后用8192字节(B)/1024=8KB。 
 
1kb=1024bit而不是1kb=1024byte 
你算成8kb是因为你算的时候视1kb=1024byte算的,这样出来就是8kb而不是64kb了

但是你看王爽书上写得是1KB=1024Byte啊!怎么会是1KB=1024bit呢?

#18


14楼说得比较清楚,但是我还没懂!首我的疑问是
这里我再纠正一点,(我不知这个答案是出自那里)应该是64K,不能有B。
64K不就是64KB的缩写吗?你这里指的K是什么意思?不是千比特吗?
还有,65536的确是能储存多少个(不同)数据,也就是65536种可能性!
但是把这65536种可能性除以1024是为什么呢?这1024是什么意思?单位是什么?为什么65536种可能性会变成64k呢?

#19


我这样理解有错吗?
一个16位寄存器所能存储的数据的最大值为多少?
存储的数据的最大值不能理解成存储的最大数据,如果是存储的最大数据自然是FFFFH,即1111111111111111B,即65535D,而存储的数据的最大值个人认为应理解成能储存多少个(不同)数据,即0D-65535D,也就是65536个。
这里的65536个的由来我认为是一共有16个位,每一个位有0和1两种状态,所以16个位也就是有2的16次方种状态。

#20


引用 19 楼 hacker_viking 的回复:
我这样理解有错吗?
一个16位寄存器所能存储的数据的最大值为多少?
存储的数据的最大值不能理解成存储的最大数据,如果是存储的最大数据自然是FFFFH,即1111111111111111B,即65535D,而存储的数据的最大值个人认为应理解成能储存多少个(不同)数据,即0D-65535D,也就是65536个。
这里的65536个的由来我认为是一共有16个位,每一个位有0和1两种状态,所以16个位也就是有2的16次方种状态。

这个认识是对的。
至于你说的‘ 64K不就是64KB的缩写吗?你这里指的K是什么意思?不是千比特吗?
K不定就是KB,K只代表一个计量级位,他可以和B组成KB,还可以和M组合成KM。K不还有KM吗,以后随着存储器的增大还会有KG的。。。
K的概念和我们在十进制当中的K类私似,也就是千的简写,如20K米,5K克。但计算机内部是2进制,所以取了10次方,即1024这个最接近于10进制1000的数来简写为K,这样便于计算。。。这应该是在计算机工作者的应用过程中慢慢积累感觉比较科学而约定俗成的。。。
现在再来看你问的问题:
65536=?  =64*1024(1024简写为K)不就是64K了吗?应该可以理解了吧。
看你说的你才看到第二章,就不多说了,说多了反而会使你有更多的不解,鼓励你在接下来的学习中要细看,尤其对一些关键的概念,书中提到的指令,以及书中有时看似漫不经心的提示都要仔细理解。如果你确实想看好这本书,建议你凡这本书上所说的操作(包含例子,实验和课后题等)都实践一次。再细思考,多复习。这是一本很好很基础的书,多掌握会受益的。。。

#21


闲着没事就再引导你下这个问题。也不牵涉复杂内容。
寄存器实际也就是存储器,只不过存在于CPU内部,这也就决定着他不能占有很多单元,如8086中,一个我们在汇编常见的寄存器只占16位,也就是2字节(Byte),所以在上面我一直说“是64K不能有B”,64KB是什么概念,是一个段(8086)的最大寻址空间,这个64KB空间是在内存中的,CPU根本放不下的,能放下也不会搞后面寻址什么的,都直接在CPU内部操作就基本差不多。(这在后面你会学到)。
这里这么说下的目的是想告诉你,一个16寄存器实际就相当于内存2个字节的存储空间。他的作用是在程序执行过程中,把CPU会即将要用的信息暂时寄存在这里,以提高CPU效率。(书后面会有介绍和说明)
这里只针对你的问题,可能你对寄存器还不是很理解,才先引导一点。帮你过下认识关!嘿。。。
你自己慢慢仔细学习吧,就不费话了。。。

#22


好的,我已经理解你说的意思了!非常感谢你这么有耐心的回答我的问题!真的很感谢!
对于刚刚接触汇编的人,能受到这么大的帮助我感到非常的荣幸!

#1


2*0=1 
2*1=2 
2*2=4 
... 
2*16=65536约等于64KB

#2


怎么来的啊?65536是位吗?位不是得先变成Byte吗?再由Byte变成KB吗?换算过来应该是8KB啊?
KB是千比特的意思啊,B是比特啊!你怎么转换的?

#3


65536/1042=64

#4


65536/1024=64

#5


确实  。。。我也没弄懂。。

#6


晕倒,这个都有人问,居然还在看汇编语言!

#7


比我都菜  嘿嘿   满足下虚荣感

#8


65536 不就是 64K 么......

#9


按照"一个16位寄存器所能存储的数据的最大值为多少",那么应该是8K
猜想LZ是想说"一个16位的数据总线的寻址范围是多少?",应为2^16个内存单元
由王爽《汇编语言》中引出的问题!

---王爽<<汇编语言>> 1.6

PS:被LZ给弄昏了.我也没看仔细 - -

#10


迷于Byte和bit,或许再详细看看信息存储的方式,搞清楚存储方式这个迷惑也就解开了。。。

#11


9楼是啥意思啊?如果是问“一个16位寄存器所能存储的数据的最大值为多少",那么应该是8K 这是对的吗?
王爽《汇编语言》2.1节提出的问题。

#12


我知道65536/1024=64 我会算,问题是为什么?
65535到底是什么?它除以1024为什么等于KB?

#13


引用楼主 hacker_viking 的帖子:
1字节(Byte)=8位(bit),1KB=1024B. 
于是我就用65536/8=8192字节(B)然后用8192字节(B)/1024=8KB。 

1kb=1024bit而不是1kb=1024byte
你算成8kb是因为你算的时候视1kb=1024byte算的,这样出来就是8kb而不是64kb了

#14


本来这段时间有事,没什么时间来论坛泡,不过看了LZ的帖几天了还挂在最高,就忍不住来说几句了。
以下为个人粗浅理解,不正之处即请指正,以免误导他人。且只仅供参考。
一个16位寄存器所能存储的数据的最大值为多少?
这是LZ问的,也是王爽书上问的。
一个16位寄存器所能存储的数据的最大值为多少?
正如LZ所说: 本人的理解应该是2^16次方-1=65535,
这里略微纠正一下。存储的数据的最大值不能理解成存储的最大数据,如果是存储的最大数据自然是FFFFH,即1111111111111111B,即65535D,而存储的数据的最大值个人认为应理解成能储存多少个(不同)数据,即0D-65535D,也就是65536个,(这里旁带说个题外话,在说寄存器时,如说到7位时,很多人把7位和第7位[实际是6位]混淆。因为有个0位(第1位),那么1位实指第2位,依此类推。这是题外话,就不多说了。)
存储的数据的最大值我们基本确定是65536.
再看楼主后面的一句: 很多人说答案是64KB。
这里我再纠正一点,(我不知这个答案是出自那里)应该是64K,不能有B,这里如果说B是Byte,16位的寄存器就能存储2个字节啊,就2B了啊。这里如果说B是bit,就更容易解决了啊,16位寄存器就16bit啊,即16B啊,16位寄存器放65536bit或者65536Byte,那是存心找CPU的碴,存不了的啊。(我不相信谁能把超过2Byte或者16bit的信息能完整放进16位寄存器里去)。
现在我们再来看题,答案应该很明确了,就是65536,即64K。再说一次,没B。(65536=64K楼主是懂的了。)
答案没有B,我只说一次。。。嘿嘿!
真正理解BIT和Byte,你还为这问题困绕吗?

#15


有这本书的标准答案么?第二版的!

#16


引用 15 楼 windows1989 的回复:
有这本书的标准答案么?第二版的!

答案是有,不过这题不是不列入有答案范围,如果要想学好这本书,不建议看答案,建议自己多看书,多思考,多实践,实在没办法,上网上问,(很多论坛都有很多人在读这本书的),在问与答当中会更有利于你掌握知识。
直接看了答案,你知道了怎么做,但你不一定就知道了为什么这么做。。。况且,论坛上人多,回答会是各个方向的,有时你能学到那本书上没有的知识。。。

#17


引用 13 楼 pceveryday 的回复:
引用楼主 hacker_viking 的帖子:
1字节(Byte)=8位(bit),1KB=1024B. 
于是我就用65536/8=8192字节(B)然后用8192字节(B)/1024=8KB。 
 
1kb=1024bit而不是1kb=1024byte 
你算成8kb是因为你算的时候视1kb=1024byte算的,这样出来就是8kb而不是64kb了

但是你看王爽书上写得是1KB=1024Byte啊!怎么会是1KB=1024bit呢?

#18


14楼说得比较清楚,但是我还没懂!首我的疑问是
这里我再纠正一点,(我不知这个答案是出自那里)应该是64K,不能有B。
64K不就是64KB的缩写吗?你这里指的K是什么意思?不是千比特吗?
还有,65536的确是能储存多少个(不同)数据,也就是65536种可能性!
但是把这65536种可能性除以1024是为什么呢?这1024是什么意思?单位是什么?为什么65536种可能性会变成64k呢?

#19


我这样理解有错吗?
一个16位寄存器所能存储的数据的最大值为多少?
存储的数据的最大值不能理解成存储的最大数据,如果是存储的最大数据自然是FFFFH,即1111111111111111B,即65535D,而存储的数据的最大值个人认为应理解成能储存多少个(不同)数据,即0D-65535D,也就是65536个。
这里的65536个的由来我认为是一共有16个位,每一个位有0和1两种状态,所以16个位也就是有2的16次方种状态。

#20


引用 19 楼 hacker_viking 的回复:
我这样理解有错吗?
一个16位寄存器所能存储的数据的最大值为多少?
存储的数据的最大值不能理解成存储的最大数据,如果是存储的最大数据自然是FFFFH,即1111111111111111B,即65535D,而存储的数据的最大值个人认为应理解成能储存多少个(不同)数据,即0D-65535D,也就是65536个。
这里的65536个的由来我认为是一共有16个位,每一个位有0和1两种状态,所以16个位也就是有2的16次方种状态。

这个认识是对的。
至于你说的‘ 64K不就是64KB的缩写吗?你这里指的K是什么意思?不是千比特吗?
K不定就是KB,K只代表一个计量级位,他可以和B组成KB,还可以和M组合成KM。K不还有KM吗,以后随着存储器的增大还会有KG的。。。
K的概念和我们在十进制当中的K类私似,也就是千的简写,如20K米,5K克。但计算机内部是2进制,所以取了10次方,即1024这个最接近于10进制1000的数来简写为K,这样便于计算。。。这应该是在计算机工作者的应用过程中慢慢积累感觉比较科学而约定俗成的。。。
现在再来看你问的问题:
65536=?  =64*1024(1024简写为K)不就是64K了吗?应该可以理解了吧。
看你说的你才看到第二章,就不多说了,说多了反而会使你有更多的不解,鼓励你在接下来的学习中要细看,尤其对一些关键的概念,书中提到的指令,以及书中有时看似漫不经心的提示都要仔细理解。如果你确实想看好这本书,建议你凡这本书上所说的操作(包含例子,实验和课后题等)都实践一次。再细思考,多复习。这是一本很好很基础的书,多掌握会受益的。。。

#21


闲着没事就再引导你下这个问题。也不牵涉复杂内容。
寄存器实际也就是存储器,只不过存在于CPU内部,这也就决定着他不能占有很多单元,如8086中,一个我们在汇编常见的寄存器只占16位,也就是2字节(Byte),所以在上面我一直说“是64K不能有B”,64KB是什么概念,是一个段(8086)的最大寻址空间,这个64KB空间是在内存中的,CPU根本放不下的,能放下也不会搞后面寻址什么的,都直接在CPU内部操作就基本差不多。(这在后面你会学到)。
这里这么说下的目的是想告诉你,一个16寄存器实际就相当于内存2个字节的存储空间。他的作用是在程序执行过程中,把CPU会即将要用的信息暂时寄存在这里,以提高CPU效率。(书后面会有介绍和说明)
这里只针对你的问题,可能你对寄存器还不是很理解,才先引导一点。帮你过下认识关!嘿。。。
你自己慢慢仔细学习吧,就不费话了。。。

#22


好的,我已经理解你说的意思了!非常感谢你这么有耐心的回答我的问题!真的很感谢!
对于刚刚接触汇编的人,能受到这么大的帮助我感到非常的荣幸!