Autor Beitrag
Morphilog
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 12.06.06 17:35 
Hallo zusammen!

Ich hab folgendes Anliegen. Ich lerne gerade Assembler und habe versucht wie folgt eine Function zu schreiben, welche einen bool`schen Rückgabewert hat. Nach meinen Informationen werden die Rückgabewerte in Delphi im EAX bzw AX oder AL - Register zurückgegeben. False = 0, True = 1 oder?! Boolean ist ein 1Byte Datentyp, also müsste das AL-Register ausreichen. Jedoch funktioniert es mit keinem der 3 Varianten, dass der Rückgabewert korrekt zurückgeliefert wird :(

Nuja ich habe folgenden Code geschrieben. Die Routine läuft eigentl. so wie sie denk ich soll, bis auf die Tatsache das es scheint, dass diese Routine keinen Rückgabewert liefert.

Hat jemand eine Idee woran dies liegt? Falls irgendwas falsch ist, weisst mich bitte drauf hin ;)

Hier der Code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
function isINFifo(value: LongWord):Boolean;
begin
  asm
  PUSH EDI
  PUSH ECX
  PUSH EBX


  call getNumberOfElements
  MOV ECX, EAX
  MOV EAX, value
  lea edi, fifo
  repne scasd

  Cmp ecx,0
  JNE @@gefunden
  mov ebx, value
  cmp [edi-4],ebx
  je @@gefunden

  @@nichtgefunden:
  mov ax,0
  jmp @@ende
  @@gefunden:
  mov ax,1

  @@ende:

  POP EBX
  POP ECX
  POP EDI
  end;
end;



so far so long

mfg Morph

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 12.06.06 18:50 
Delphi macht einen wesentlichen Unterschied zwischen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function Foo: Boolean;
Begin
    ASM
        MOV AL, 1
    end;
end;


und

ausblenden Delphi-Quelltext
1:
2:
3:
4:
function Foo: Boolean;
ASM
    MOV AL, 1
end;


Bei ersterem muss man Delphi explizit anweisen, den Result-Wert zu übernehmen, während Delphi dies bei zweiterem automatisch macht...

Ach ja: Ersteres lautet korrekt so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
function Foo: Boolean;
Begin
    ASM
        MOV Result, 1
    end;
end;


Müsste Dir Delphi aber eigentlich auch mit einer Warnung quittieren "Rückgabewert wahrscheinlich nicht gesetzt..." ;-) Man sollte auf Delphi hören, wenn es sowas sagt ... oft genug hat es damit Recht :P

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Morphilog Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 12.06.06 20:27 
fein :) ... ich sag nur hab vielen dank und wer lesen kann ist klar im vorteil ;)