procedure TMainFrm.Button1Click(Sender: TObject);
var dw1:Cardinal;
    c:char;
begin
  dw1:= Cardinal(-1);
//  dw1:=9;
  asm
    add dw1,8
    push ebx
    seta bl
    mov c,bl
    pop ebx
  end;
  Memo1.Lines.Add(inttostr(dw1));
  Memo1.Lines.Add('');
  Memo1.Lines.Add(inttostr(ord(c)));
end;
我用如上代码判断 ,
  当 ord(c)为 0 时 ,是有溢出了;
  当 ord(c)为 1 时 ,是没有溢出。这个方式是否正确??
还有别的方式判断么??
请指教啊 ,十分感谢 。

解决方案 »

  1.   

    使用汇编的方法:
    var
      dw1:cardinal;
      yc:boolean;
    begin
      dw1:=cardinal(-1);
      yc:=false;
      asm
        add dw1,8
        jnc @noyc
        inc yc
        @noyc:
      end;
      if yc then showmessage('溢出了!');
    end;
      

  2.   

    不使用汇编的方法:var
      dw1,dw2:cardinal;
    begin
      dw1:=cardinal(-1);
      dw2:=dw1+8;
      if (dw2<8) or (dw2<dw1) then showmessage('溢出了!');
    end;
      

  3.   

    try
      .....
    except
      on E: Exception do
        application.showexception(e);
    end;