问答题
在一个段式存储管理系统中,逻辑地址为32位,其中高16位为段号,低16位为段内偏移,以下是段表(其中的数据均为十六进制,见下表)。
{{B}}段表{{/B}}
|
| 段 |
基地址 |
长度 |
保护 |
| 0 |
10000 |
18C0 |
只读 |
| 1 |
11900 |
3FF |
只读 |
| 2 |
11D00 |
1FF |
读-写 |
| 3 |
0 |
0 |
禁止访问 |
| 4 |
11F00 |
1000 |
读-写 |
| 5 |
0 |
0 |
禁止访问 |
| 6 |
0 |
0 |
禁止访问 |
| 7 |
13000 |
FFF |
读-写 |
以下是代码段的内容:
| main |
sin |
| 240 |
push×[10108] |
360 |
mov 4+(sp),r2 |
| 244 |
call sin |
364 |
push r2 |
| 248 |
… |
366 |
… |
| |
|
488 |
ret |
试问:
问答题
x的逻辑地址为10108,它的物理地址是多少?
【正确答案】高16位为段号,低16位为段内偏移,则1为段号(对应基址11900),0108为段内偏移,则逻辑地址11A08对应的物理地址为基址加段内偏移,即11900+0108=11A08。
【答案解析】
问答题
栈指针的当前地址是70FF0,它的物理地址是多少?
【正确答案】7为段号,0FF0为段内偏移,13000+0FF0=13FF0。
【答案解析】
问答题
第一条指令的逻辑地址和物理地址各为多少?
【正确答案】逻辑地址240,物理地址为基址加段内偏移,即10000+240=10240。
【答案解析】
问答题
push x指令的执行过程:将sP(堆栈寄存器)减4,然后存储x的值。试问x被存储在什么地方(物理地址)?
【正确答案】知道SP对应物理地址为13FF0,减4之后为13FEC,即x存储地址为13FEC。
【答案解析】
问答题
call sin指令的执行过程:先将当前PC值入栈,然后在PC内装入目标PC值。试问哪个值被压入栈了?新的栈指针的值是多少?新的Pc值是多少?
【正确答案】PC在调用call sin命令之后,自增为248,所以逻辑地址248被压入栈。由第(4)问我们知道,每次入栈栈指针是减少4,那么将当前PC值入栈后,则栈指针的值为70FF0-4-4=70EE8。即新的栈指针值为70FE8,新的:PC值为360。
【答案解析】
问答题
语句“mov r2,4+(sp)”的功能是什么?
【正确答案】70FE8(sp)+4=70FEC,即x的逻辑地址,所以功能是访问x的值,即sin函数的输入参数。
【答案解析】