2008年2月20日星期三

学点汇编

有很多高手都建议程序员应该学学汇编。虽然我不是啥程序员,但是有时发现不懂汇编和计算机组成原理实在是有点不够。加上我准备学习一下操作系统原理——主要是为了学习Linux系统编程打基础的。这样算下来,稍稍学点汇编还是很有必要的,因为时间和精力有限,不需要成为高手,浅尝辄止。

今天理解了一下过去一直很混淆的概念。如下是今天的一些收获:

CPU的寻址能力主要和CPU的地址线数量有关。因为8086只有20根地址线,因此只能寻址1MB的内存,即:2^20 bit = 1048576 bit = 1 x 1024 x 1024 B = 1 MB。至于为啥选择采用FFFF:0方式的分段*寻址,主要是因为寄存器位宽的限制——8086的寄存器位宽仅有16位。

其实这个不难理解。一个关键的问题在于我之前一直没有搞清楚内存,寄存器,地址线数量之间的关系。因为寒假看了“编码的奥秘”一书之后,对CPU结构的概念有了一个更加准确的认识。“编码的奥秘”中的很多概念我还是没有看懂——谁叫我没有逻辑电路基础的呢。

后来的80286有24根地址线,因此可以寻址2 ^ 24 bit = 2 ^ 4 x 2 ^20 bit = 16 MB,而80386只有的32位CPU则具有了寻址 2 ^32 bit的能力,即:4GB。不过CPU在运行于实模式下时,32位的地址只用了低20位,因此也只能寻址1MB。

* 事实上分段的方式的选择还有更加复杂的原因,关于这个概念,在我看了保护模式之后就知道了。

没有评论:

发表评论