计算机系统结构研究的是软、硬件之间的功能分配以及对传统机器级界面的确定,为机器语言、汇编语言程序设计者或编译程序设计者生成提供使其设计或生成的程序能在机器上正确运行而应看到和遵循的计算机属性。
计算机属性
1.数据类型和格式
格式 例如:754标准浮点数
2.最小可寻址单位
若是字节Byte 假如有两个字节,需要1根地址线,0和1即可找到;
若是位bit 假如还是两个字节,但是每个字节有8位,一共是16位,则需要$ log_2^{16}=4 $根地址线。
问题: (假设最小寻址单位是字节)现有16根地址线,那么寻址空间就是$ 2^{16}B=64KB $,从0000 H~FFFF H(是四位的16进制)。现还有一块1MB的内存,怎样设计才能使内存不浪费?即用16根地址线能找到1MB的地址空间从00000 H~FFFFF H(是五位的16进制)。
$$ 1MB=1024KB=2^{10}KB=2^{10}\times1024B=2^{10}\times2^{10}B=2^{20}B $$
本来是需要20根地址线的。
解决:采用段号+段内偏移地址的方法。
$ 2^{20}/2^{16}=2^4 $,将1MB的内存分成$ 2^4=16 $块(16个64KB就是1MB),即是0块,1块,2块……F块(刚好是16进制)。每一块内,是64KB,用16位地址表示,所以每块的段内地址是从0000 H~FFFF H( 四位十六进制 )。再加上前面的0段、1段、2段……F段,即第一段的地址是0 0000 H~0 FFFF H,第二段是1 0000 H~1FFFF H,第三段是2 0000 H~2 FFFF H,最后一段是F 0000 H~ F FFFF H,( 五位的16进制)但这样,每块的首地址都是以0结尾,所以恰巧段号就可以把最后一位省略。实际寻址时,采用段号+段内偏移地址的方法来寻址。
$ 实际地址=DS\times16+段内地址 $
DS中存的是段号,比如第一段是0000 H,第二段是1000 H,第三段是2000H,最后一段是F000 H;乘以16表示16进制的数左移一位再补零。
比如:有一个地址,段号是3,段内地址是152E H,它的实际内存址就是$ 3000H\times16=30000H $,再加上152E H,为3152E H。(一个五位的十六进制)
3.寻址种类
- ADD AX, 3 寄存器寻址+立即寻址
- ADD AX, [BX] BX中存放数据的地址
- ADD AX, BX+x 基址、变址寻址
- 等等
4.内存的容量和最大可编址空间不同
例如: 现有32位的CPU(32根地址线更为准确?),最大可编址空间就是$ 2^{32}=2^2\times2^{10}\times2^{10}\times2^{10}=4GB $ (最小可寻址单位为字节B。B、K、M、G)。
但现在我只有一块2GB的内存。