2019年计组指令大题

知识回顾

jle指令是条件转移指令——小于等于时转移

call为函数调用指令

返回值是根据二进制串(机器数)的解释

真题

2019年计组指令大题_第1张图片

第一问:程序分析

【解析】10次。执行第16行的call指令会递归调用f1。

第二问:转移指令

第12行的jle指令(条件转移指令——小于等于时转移);

第16行的call指令(函数调用指令);第20行的jmp指令(无条件转移指令);

第30行的ret指令(子程序的返回指令),即后三条一定会跳转。

注意】第12行jle指令指当n≤1时,跳转至地址0040 1035H。

第三问:相对寻址、大小端

【解析】第16行的call指令的虚拟地址为0040 1025H(PC值),从【机器指令】看出指令占5B,

根据 (PC)+"1"+OFFSET=目标地址 ,此处的1为5(指令占5B,按字节编址),

OFFSET=目标地址-(PC+5)=0040 1000H-(0040 1025+5H)=FFFF FFD6H

从第16行的机器指令的后4B是D6 FF FF FF可以推断就是OFFSET--->小端。

第四问:程序分析

【解析】因为f(13)=6227020800,其结果超出了32位int型数据可表示的最大范围(2^31),因此f(13)的返回值是一个发生了溢出的错误结果;可将函数f1的返回值类型改为double(或long long,或long double或float)类型。

第五问:imul指令

【解析】若乘积的高33位为非全0或非全1,则OF=1。编译器应在imul指令后加一条“溢出自陷指令”,使得CPU自动查询溢出标志OF,当OF=1时调出“溢出异常处理程序”。

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