ach es ist SAR, jetzt versteht mich auch der inlineassembler
ein SAR darf nicht so einfach das vorzeichen bit mitverschieben, wie es das SHR macht.
Aha? Dann hast du ein echtes Problem
Zitat:
Dieser Befehl ist identisch mit dem SAR-Kommando und stellt nur eine alternative Schreibweise dar. Der Assembler übersetzt SAR und SHR in den gleichen Maschinencode.
Also mein Delphi übersetzt die Befehle nicht in den selben Code, und die Ergebnisse unterscheiden sich auch.
Delphi-Quellcode:
var
a,b,c,d: integer;
begin
a := 4242;
b := -4242;
c := a;
d := b;
asm
shr a, 8;
shr b, 8;
sar c, 8;
sar d, 8;
nop;
end;
end;
Ergebnis:
a = 16
b = 16777199
c = 16
d = -17
CPU-Ansicht:
Code:
Unit1.pas.36: shr a, 8;
00453364 C16DFC08 shr dword ptr [ebp-$04],$08
Unit1.pas.37: shr b, 8;
00453368 C16DF808 shr dword ptr [ebp-$08],$08
Unit1.pas.38: sar c, 8;
0045336C C17DF408 sar dword ptr [ebp-$0c],$08
Unit1.pas.39: sar d, 8;
00453370 C17DF008 sar dword ptr [ebp-$10],$08
Oder hab ich dich missverstanden?
Meintest du vielleicht den Shift-
Left-Befehl? Denn da sollte es logischerweise keinen Unterschied machen...