参考下面的函数:

        FACT PROC      NEAR

              CMP       AL,0

              JNZ       FI

              MOV       AL,1

              RET

         FI: PUSH      AX

              DEC       AL       –> 在这里只取AL当中的数据进入下一轮乘法

              CALL      FACT

              POP       CX

              CALL      MULT   –>在这里对AL和DL进行乘法运算,结果放在AX当中

              RET

        FACT ENDP

        MULT PROC      NEAR

              MOV       DL,CL

              MUL       DL

              RET

        MULT ENDP

当要计算的数字超过6的时候,AX里面的就是0x02D0,那么在只取AL进行下一轮计算的时候,就会漏掉0x2D0当中的高位0x02,导致计算错误——或者说,是计算溢出。

[原文在百度空间已经关闭]