汇编语言基础知识总结(四)

385 阅读3分钟

「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战」。

数据单位

  • 位 :一个二进制位
  • 字节 :8个二进制位表示一个字节

由于八个二进制位转换成十六进制后是两位十六进制数, 所以两个十六进制数占用一个字节:

0x20   ;占用一个字节
或者 
20H    ;占用一个字节

在计算机中最小的数据单位是位,但在内存中,最小的数据单位是字节,一个内存单元占用一个字节, 内存单元就是一个存放数据的容器,可以比喻为一栋公寓里面的小单间, 每个单间住着一对夫妻

内存单元和地址

内存单元相当于一栋公寓里的小单间, 每个单间里面住着一个字节(一对夫妻) , 一对夫妻是两个人, 形容两个十六进制数

地址就相当于这个房间的门牌号, 通常使用十六进制表示(也叫物理地址)

cpu想要读写内存中的数据, 需要通过地址来需要对应的内存单元,也叫寻址

那么问题来了, 一栋公寓里一共有多少个单间呢, 或者说单间的数量跟什么有关呢?

  • 内存条容量: 既然每个内存单元占的空间是固定的, 那么内存容量越大,房间自然就越多

给房间贴门牌号

0x1
0x2
0x3
...
0x10
0x20
...
0x100
0x200   
...
0x1000
0x2000
...
    
0xFFFF 65535
    0xFFFFA

现实中门牌编号最大值和什么有关?

  • 装修师傅的计算能力

  • 门牌金属板的宽度(字体大小不变的前提)

在计算机的世界中

  • 装修师傅的计算能力----->cpu运算能力

  • 门牌金属板的宽度------->地址总线宽度(地址总线数量)

如果对应的cpu是16位的, 同时地址总线也是16位,那么最大只能运算表示16位数也就是0xFFFF ,

如果对应的cpu是32位的, 同时地址总线也是32位,那么最大只能表示32位数也就是0xFFFFFFFF

如果对应的cpu是64位的, 同时地址总线也是64位,那么最大只能表示64位数也就是0xFFFFFFFFFFFFFFFF

在8086cpu中 cpu是16位 但是地址总线却是20位, 本来最大只能表示16位地址值, cpu设计者为了让其能表示20位地址,使用了段地址*16+偏移地址的形式来表示20位地址

物理地址=段地址*16+偏移地址

如果要表示一个20位物理地址0xFFFFA,可以有一下四种写法:

0xFFFFA=0xFFFF*16+0x000A //FFFF0   10*10=100   

0xFFFFA=0xFFF0*16+0x00FA

0xFFFFA=0xFF00*16+0x0FFA

0xFFFFA=0xF000*16+0xFFFA

因此计算机的寻址能力不单单和cpu有关还和地址总线有关, 32位操作系统对应32位地址总线, 这也就是为什么即便你用的是64位cpu,如果只装了32位操作系统,无法完全发挥cpu和内存的性能