问答题

已知 f(n)=n!=n×(n-l)×(n-2)×…×2×1,计算 f(n)的 C 语言函数 fl 的源程序(阴影部分)及其在 32 位计算机 M 上的部分机器级代码如下:

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令,计算机 M 按字节编址,int 型数据占 32 位。请回答下列问题:

第 19 行 imul eax,ecx 表示有符号数乘法,乘数为 R[eax]和 R[ecx],当乘法器输出的高、低 32 位乘积 之间满足什么条件时,溢出标志 OF=1?要使 CPU 在发生溢出时转异常处理,编译器应在 imul 指令 后加一条什么指令?

【参考答案】

若乘积的高 33 位为非全 0 或非全 1,则 OF = 1。编译器应在 imul 指令后加一条“溢出自陷指......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)