问答题
在一个段式存储管理系统中,逻辑地址为32位,其中高16位为段号,低16位为段内偏移,以下是段表(其中的数据均为16进制见表3-19):
表3-19 段表 段 | 拱地址 | 氏度 | 保护 | 0 | 10000 | 18C0 | 只读 | 1 | 11900 | 3FF | 只读 | 2 | 11D00 | 1FF | 读/写 | 3 | 0 | 0 | 禁止访问 | 4 | 11F00 | 1000 | 读/写 | 5 | 0 | 0 | 禁止访问 | 6 | 0 | 0 | 禁止访问 | 7 | 13000 | FFF | 读/写 | |
以下是代码段的内容:
问答题
x的逻辑地址为10108H,它的物理地址是什么?
【正确答案】高16位为段号,低16位为段内偏移,则1为段号(对应基址11900),0108为段内偏移,则逻辑地址11A08H对应的物理地址为基址加段内偏移,即11900H+0108H=11A08H。
【答案解析】
问答题
栈指针的当前地址是70FFOH,物理地址是多少?
【正确答案】同1问,7为段号,3FFOH为段内偏移,13000H+0FFOH=13FFOH。
【答案解析】
问答题
第一条指令的逻辑地址和物理地址各为多少?
【正确答案】逻辑地址240,物理地址为基址加段内偏移,即10000H240H=10240H。
【答案解析】
问答题
“push x”指令的执行过程:将SP(堆栈寄存器)减4,然后存储x的值。试问:x被存储在什么地方(物理地址)?
【正确答案】在2中,知道SP对应物理地址为13FFOH,减4之后为,13FECH,即x存储地址为13FECH。
【答案解析】
问答题
“call sin”指令的执行过程:先将当前PC值入栈,然后在PC内装入目标PC值。请问:哪个值被压入栈了?新的栈指针的值是多少?新的PC值是多少?
【正确答案】PC在调用“call sin”命令之后,自增为248。所以逻辑地址248被压入栈。由第4)问我们知道,每次入栈栈指针是减少4,那么将当前PC值入栈后,则栈指针的值为70FF0-4-4=70EE8H。即新的栈指针值为70FE8,新的PC值为360。
【答案解析】
问答题
“mov 4+(sp),r2”的功能是什么?
【正确答案】70FE8(sp)+4=70FEC,即x的逻辑地址,所以功能是访问x的值,即sin函数的输入参数。
本题易错点:本题需要注意题目所问的地址是逻辑地址和物理地址,PC值和栈指针值指的都是逻辑地址,不是其物理地址,这也可以从第2问得知。
【答案解析】