检测点2.2
由于编程习惯,习惯性用0x开头表示16进制。(1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为0x0010到0x1000F。
解题过程:
物理地址=段地址*0x10+偏移地址
偏移地址范围为0x0~0xFFFF
所以该段地址寻址范围为
(段地址*0x10 + 0x0) ~ (段地址*0x10 + 0xFFFF)
即 0x1 * 0x10 ~ 0x1 * 0x10 + 0xFFFF
=0x00010 ~ 0x1000F
答:CPU的寻址范围为 0x10 到 0x1000F
(2)有一数据存放内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为_______,最大为______。
提示,反过来思考一下,当段地址给定为多少,CPU无论怎么变化偏移地址都无法寻找到20000H单元?
解题过程:
已知物理地址0x20000,变量段地址SA。
我们知道偏移地址范围(0x0~0xFFFF),
使用公式:物理地址 = 段地址*0x10 + 偏移地址
段地址 = (物理地址 - 偏移地址) / 0x10
最小值:
SA=(0x20000 - 0xFFFF) / 0x10
= 10001 / 0x10
= 0x1001(向上取整)
最大值:
SA=(0x20000 - 0x0) / 0x10
=0x20000 / 0x10
=0x2000
答:最小为0x1001,最大为0x2000
反向思考:
由于段地址都是为0x10的倍数,由上题可知最小为0x1001,最大为0x2000。
答:SA<0x1001 或 SA > 0x2000,CPU无论怎么变化偏移地址都无法寻找到0x20000单元。 本帖最后由 XinSong 于 2019-8-15 08:08 编辑
嗝,谢谢,稍微看懂了,自己在仔细研究了一下,才发现,/16是向左位移,而不是用数学的思想去搞他。。
页:
[1]