Przygotowałem te procedury lata temu jeszcze pod Delphi2 działają ale zapewne można je
jeszcze optymizować czasowo jeśli ktoś ma lepszy odpowiednik proszę o gotowca...
przy bardzo wielokrotnym wywołaniu liczy się każdy cykl
////////////////////////////////////////////////////////////////////////////////
//Procedura odwraca stan okreslonego bitu w operandzie (Dana) numer bitu
//podajemy w operandzie (Bit) bity numerowane sa od 0 tz. zero = najmlodszy bit!
function NotBit(Dana: byte; Bit: integer):byte;
asm
MOV AL,1
MOV ECX,Bit
ROL AL,CL
MOV CL,Dana
XOR CL,AL
MOV Result,CL
end;
function NotBit(Dana: word; Bit: integer):word;
asm
MOV AX,1
MOV ECX,Bit
ROL AX,CL
MOV CX,Dana
XOR CX,AX
MOV Result,CX
end;
function NotBit(Dana: dword; Bit: integer):dword;
asm
MOV EAX,1
MOV ECX,Bit
ROL EAX,CL
MOV ECX,Dana
XOR ECX,EAX
MOV Result,ECX
end;
////////////////////////////////////////////////////////////////////////////////
//Procedura odczytuje stan okreslonego bitu w operandzie (Dana) numer bitu
//podajemy w operandzie (Bit) bity numerowane sa od 0 tz. zero = najmlodszy bit!
function GetBit(Dana: byte; Bit: integer):boolean;
asm
BT AX,DX
JC @set
MOV Result,False
JMP @fin
@set: MOV Result,True
@fin:
end;
function GetBit(Dana: word; Bit: integer):boolean;
asm
BT AX,DX
JC @set
MOV Result,False
JMP @fin
@set: MOV Result,True
@fin:
end;
function GetBit(Dana: dword; Bit: integer):boolean;
asm
BT EAX,DX
JC @set
MOV Result,False
JMP @fin
@set: MOV Result,True
@fin:
end;
////////////////////////////////////////////////////////////////////////////////