假定在一个8位字长的计算机中运行如下类C程序段:
unsigned int x = 134;
unsigned int y = 246;
int m = x;
int n = y;
unsigned int z1 = x - y;
unsigned int z2 = x + y;
int k1 = m - n;
int k2 = m + n;
若编译器编译时将8个8位寄存器R1~R8分别分配给变量x、y、m、n、z1、z2、k1、k2。请回答下列问题。(提示:带符号整数用补码表示)
(1)执行上述程序段后,寄存器R1、R5和R6的内容分别是什么?(用十六进制表示)
(2)执行上述程序段后,变量m和k1的值分别是什么?(用十进制表示)
(3)上述程序段涉及带符号整数加/减、无符号整数加/减运算,这四种运算能否利用同一个加法器及辅助电路实现?简述理由。
(4)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16M,主存(物理)地址空间大小为1M,页面大小为4KB;Cache采用直接映射方式,共8行;主存与Cache之间交换的块大小为32B。系统运行到某一时刻时,页表的部分内容和Cache的部分内容分别如题44-a图、题44-b图所示,图中页框号及标记字段的内容为十六进制形式。
虚页号 | 有效位 | 页框号 | … |
| 行号 | 有效位 | 标记 | … |
0 | 1 | 06 | … |
| 0 | 1 | 020 | … |
1 | 1 | 04 | … |
| 1 | 0 | — | … |
2 | 1 | 15 | … |
| 2 | 1 | 01D | … |
3 | 1 | 02 | … |
| 3 | 1 | 105 | … |
4 | 0 | — | … |
| 4 | 1 | 064 | … |
5 | 1 | 2B | … |
| 5 | 1 | 14D | … |
6 | 0 | — | … |
| 6 | 0 | — | … |
7 | 1 | 32 | … |
| 7 | 1 | 27A | … |
题44-a图 页表的部分内容 题44-b图 Cache的部分内容
请回答下列问题。
(1)虚拟地址共有几位?哪几位表示虚页号?物理地址共有几位?哪几位表示页框号(物理页号)?
(2)使用物理地址访问Cache时,物理地址应划分成哪几个字段?要求说明每个字段的位数及在物理地址中的位置。
(3)虚拟地址001C60H所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否Cache命中?要求说明理由。
(4)假定为该机配置一个4路组相联的TLB,该TLB共可存放8个页表项,若其当前内容(十六进制)如题44-c图所示,则此时虚拟地址024BACH所在的页面是否在主存中?要求说明理由。
组号 有效位 标记 页框号 有效位 标记 页框号 有效位 标记 页框号 有效位 标记 页框号 | ||||||||||||
0 | 0 | — | — | 1 | 001 | 15 | 0 | — | — | 1 | 012 | 1F |
1 | 1 | 013 | 2D | 0 | — | — | 1 | 008 | 7E | 0 | — | — |