2017年计组指令+OS二表大题

【知识回顾】

 

【真题】

在按字节编址的计算机上,f1的部分源程序如下。将f1中的int都改成float,可以得到f2.

int f1(unsigned n){
int sum=1,power;
for(unsigned i=0;i

对应的机器级代码(包括指令的虚拟地址如下):

2017年计组指令+OS二表大题_第1张图片

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令。

(1)计算机是RISC还是CISC,why

【解析】CISC(因为每条指令长度不同)

(2)f1的机器指令代码共占多少字节,计算过程

【解析】0040 107F - 0040 1020F+1=0000 005F+1=0000 0060F=6*16B=96B

注意】复习https://blog.csdn.net/qq_35812205/article/details/104351765第24点笔记

(3)第20条指令cmp通过i减n-1实现对i和n-1的比较。执行f1(0)中,当i=1时,cmp指令执行后,进位/借位CF的内容是啥,计算过程

【解析】执行f1(0)——cmp这条指令即i减n-1,i=0,n=0,n-1=0-1=FFFF FFFFH。

在补码加减法运算器中执行“0减FFFF FFFFH”,即0000 0000H + 0000 0000H +1=0000 0001H,

由于进位输出C=0,所以减法运算时的借位标志CF=C 异或 1=1

注意】虽然i和n均unsigned型,但这里是cmp指令的计算机内部比较功能,即用到补码加减法运算器。

总之,无符号数的减法是用补码的【x-y】补=【x】补+【-y】补运算的

2017年计组指令+OS二表大题_第2张图片

(4)第23条指令shl通过左移实现power*2运算,在f2中能否用shl指令实现power*2

【解析】不能,因为shl把一个无符号整数所有有效数位左移,而f2中的变量power是float型,其机器数中不包含最高有效数位,包含了阶码部分。

注意补码也能通过左移实现倍增(不溢出就行)

另外,直接说float型数据是由数符号、阶码和尾数组成也行,多写几句。。

第二题:OS部分

2017年计组指令+OS二表大题_第3张图片

根据2017年计组大题的机器指令代码,

第一问:二级页表表项

(1)函数f1的机器指令代码占多少页?

第二问:二级页表表项

(2)取第一条指令(push ebp)时,若在进行地址变化过程中需要访问内存中的页目录和页表,则会分别访问它们各自的第几个表项(编号从0开始)?

第三问:进程状态

(3)M的I/O采用中断控制方式,若进程P在调用f1前通过scanf()获取n的值,则在执行scanf()过程中,进程P的状态会如何变化,CPU是否会进入内核态?

注意】在用户程序中,凡是与资源有关的操作(如存储分配、I/O传输和文件管理),都必须通过【系统调用】向OS提出服务请求,由操作系统代为完成。(上题就是I/O传输相关。)

 

你可能感兴趣的:(计算机组成原理)