模拟卷 操作系统 地址翻译 解答题
第 46 题

(8 分)在某段式存储管理系统中,逻辑地址为 32 位,其中高 16 位为段号,低 16 位为段内偏移量,以下是段表(其中的地址均为 16 进制):

以下是代码段的内容(代码前的数字表示存放代码的十六进制逻辑地址):

试问:

(1)x 的逻辑地址为 10108H,它的物理地址是多少?要求给出具体的计算过程。 (2)若栈指针 SP 的当前值为 70FF0H,push x 指令的执行过程:先将 SP 减 4,然后存储 x 的值。试问存储 x 的物理地址是多少? (3)call sin 指令的执行过程:先将当前 PC 值入栈,然后在 PC 内装入目标 PC 值。请问:哪个值被压入栈了?新的 SP 指针的值是多少?新的 PC 值是多少? (4)“mov r2,4+(SP)”的功能是什么?(假设指令集与 x86 系列 CPU 相同)

地址翻译

[tag_link]

**【解析】** 本题考查逻辑地址和物理地址的转换等。

(1) 高 16 位为段号,低 16 位为段内偏移,则 1 为段号(对应基地址为 11900H),0108H 为段内偏移量,则逻辑地址 10108H 对应的物理地址为 11900H + 0108H = 11A08H。

(2) SP 的当前值为 70FF0H 中,先减 4H 后得 70FECH,7 为段号,0FECH 为段内偏移量,则对应的物理地址为 13000H + 0FECH = 13FECH,故存储 x 的物理地址为 13FECH。

(3) 在调用 call sin 指令后,PC 自增为 248,所以逻辑地址 248 被压入栈。由 (2) 可知每次入栈时 SP 指针先减 4,因此当前 PC 值入栈后,SP 指针的值为 70FF0H - 4H - 4H = 70FE8H,故新的 SP 指针值为 70FE8H,新的 PC 值为转移指令的目的地址 360H。

注意:有同学会问为什么入栈的不是物理地址?

首先段式存储器(页式、段页式也一样)中 PC 的值一定是逻辑地址,然后取指令时系统才按照逻辑地址根据一定的规则转换为物理地址再去访问内存。所以入栈的是 PC 的内容,当然就是逻辑地址。

(4) 70FE8(sp) + 4 = 70FECH,即 x 在栈中的逻辑地址(call sin 之前刚被 push 进去的),故其功能是把 x 的值送入寄存器 2,作为 sin 函数的参数。