unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
BLoeschen: TButton;
EZahl: TEdit;
EZahlHex: TEdit;
EGeloescht: TEdit;
EGeloeschtHex: TEdit;
LByte: TLabel;
EByte: TEdit;
procedure BLoeschenClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
procedure ByteLoeschen(p: Pointer;
Index: Byte);
procedure ByteLoeschen2(p: Pointer;
Index: Byte);
var
Form1: TForm1;
implementation
procedure ByteLoeschen(p: Pointer;
Index: Byte);
assembler;
asm
mov EDX, 0FFFFFF00h
mov CL, BL
sal Cl, 3
//Linksverschiebung mit Anhängen von Nullen, *2*2*2
STC
//setze Carry-Flag, um kein Bit zu verlieren
rcl EDX, CL
//Rechtsverschuebung mit Anhängen des Carry-Flags, setzt Carry-Flag
and [EAX], EDX
end;
procedure ByteLoeschen2(p: Pointer;
Index: Byte);
assembler;
asm
mov Byte [EAX + EBX], 0
end;
{$R *.dfm}
procedure TForm1.BLoeschenClick(Sender: TObject);
var IntZahl: Integer; ByteNr: Shortint;
begin
try
IntZahl:= StrToInt(EZahl.Text);
ByteNr:= StrToInt(EByte.Text) - 1;
if((IntZahl < 0)
or (ByteNr < 0)
or (ByteNr > 3))
then begin
raise Exception.Create('
Ungültiger Wert!');
end;
EZahlHex.Text:= IntToHex(IntZahl, 1);
ByteLoeschen2(@IntZahl, ByteNr);
EGeloescht.Text:= IntToStr(IntZahl);
EGeloeschtHex.Text:= IntToHex(IntZahl, 1);
except
ShowMessage('
Ungültiger Wert!');
end;
end;
end.