Hallo,
[user]Warf[/user] programm erzielt ja nicht das gewünschte Ergebnis.
Nach 8-mal ROL oder ROR sollte bei einem Byte das ursprüngliche Muster wieder auftauchen, wie eine 8-Bit Laufschrift
mal als Konsolenprogramm für Freepascal:
Code: Alles auswählen
program test;
{$MODE objFPC}
{$ASMMODE intel}
{$DEFINE RELEASE}
uses
sysutils;
var
b2: byte = %00000001;
procedure Button1Click;
begin
asm
Rol b2, 1
end;
end;
// wie in Delphi werden die Daten je nach Anzahl und Format
//in EAX,EDX und ECX und dann über den Stack übertragen
function Roln(n: byte):byte;assembler;
asm
ROL AL,1;
end;
function RolPascal(n: byte):byte;
var
Carry : byte;
begin
Carry := ORD((n AND 128)>0);// Bit 2^7 = 128 gesetzt-> 1 sonst 0
result := 2*n +Carry;
end;
var
i: integer;
n : byte;
Begin
For i := 0 to 10 do Begin
Button1Click;write(b2:4);
end;
writeln;
n := 1;
For i := 0 to 10 do Begin
n := Roln(n);write(n:4);
end;
writeln;
n := 1;
For i := 0 to 10 do Begin
n := RolPascal(n);write(n:4);
end;
writeln;
end.
ergibt wie gewüscht ein umlaufendes 1-Bit
Code: Alles auswählen
2 4 8 16 32 64 128 1 2 4 8
2 4 8 16 32 64 128 1 2 4 8
2 4 8 16 32 64 128 1 2 4 8
Die Meldung
unit1.pas(44,24) Error: Generating PIC, but reference is not PIC-safe
Heisst nur , dass Du PIC = Positions unabhängigen Code wolltest, was aber als normales Programm nicht relevant ist, bei .dll oder .so hingegen schon.
SIehe
http://www.freepascal.org/docs-html/prog/progsu112.html
Gruß Horst