本帖最后由 jackz007 于 2020-3-26 23:45 编辑
ff 是什么的缩写?
十六进制的16个数: 1 2 3 4 5 6 7 8 9 a b c d e f
是的,没错,f 是个十六进制数,对应的十进制数值是 15
8086 CPU 的地址总线为 20 位,可寻址地址空间是 2 ^ 20 = 1048576 也就是 1 MB,但是,8086 CPU 的数据总线是 16 位的,也就是说,CPU 的字长是 16 位,所有的寄存器也都是 16 位的,通过寄存器可寻址的范围是 0 ~ 2 ^16 - 1 = 65535,也就是 64 KB,那么,问题就来了,CPU 的内存可寻址空间是 1 MB,而通过寄存器寻址只能达到 64 KB,1 MB 是 16 个 64 KB。怎么做才能对 1 MB 内存空间进行寻址呢,于是,就引入了 段:偏移的寻址方式,就是说,用两个 16 位数来联合表达一个 20 位的内存地址,段:偏移 表达方式到 20 位内存地址的计算关系是 20 位内存地址 = 段地址 x 10H + 偏移
在本例中,内存地址 fff0:0000 所对应的 20 位内存地址是 fff00,内存地址 fff0:0070 对应的 20 位内存地址是 fff70,于是,我们会发现,不同的 段:偏移 可以表达相同的内存地址。 fff0:0000 - fff00
ff00:0f00 - fff00
f000:ff00 - fff00
上面的三种形式表达的都是同一个内存地址 fff00,当然,这个地址的表达方式绝不仅仅这三种,还可以写出很多。
内存地址 fff00 已经很接近内存顶端了,这段地址属于 ROM BIOS 区域,是不可更改的,从 fff00 ~ fffff 还剩 256 个字节空间,在 debug 中,为了看到这 256 个字节的内容,可以使用命令: |