AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit "inline", "assembler"

Ein Thema von Baeuerle · begonnen am 11. Mär 2009 · letzter Beitrag vom 11. Mär 2009
Antwort Antwort
Baeuerle

Registriert seit: 17. Mär 2005
Ort: Ettenheim
283 Beiträge
 
Delphi 2005 Professional
 
#1

Problem mit "inline", "assembler"

  Alt 11. Mär 2009, 08:48
Hallo zusammen,

ich habe folgenden Code versucht unter Delphi2005 zu compilieren jedoch hängt der Compiler immer an der kommentierten Stelle mit der Fehlermeldung "E2029 Deklaration erwartet, aber ( gefunden". Ich habe leider keine Ahnung von Assembler in Delphi.

Vielleicht kann mir jemand sagen was ich umstellen muss damit die Befehlsfolgen funktionieren.

Thx
Baeuerle

Delphi-Quellcode:
unit UBlaBlub;

INTERFACE
uses Variants;

Const cArcTan=1;
      cCos =2;
      cSin =3;
      cLn =4;
      cExp =5;
      cSqr =6;
      cSqrt =7;

var WriteErrorFlag:Boolean=true;
    
Type
 JumpRecord = record
               SpReg,
               BpReg : Word;
               JmpPt : Pointer;
              end;

Var
 PCalcErrCode:Word;

Procedure SetJump (Var JumpDest: JumpRecord);
// Hier bleibt der Compiler mit der oben genannten Fehlermeldung hängen
inline($5F/ {pop di           }
      $07/ {pop es           }
      $26/$89/$25/ {mov es:[di],sp   }
      $26/$89/$6D/$02/ {mov es:[di+2],bp }
      $E8/$00/$00/ {call null        }
                             {null:            }
      $58/ {pop ax           }
      $05/$0C/$00/ {add ax,12        }
      $26/$89/$45/$04/ {mov es:[di+4],ax }
      $26/$8C/$4D/$06); {mov es:[di+6],cs }
                             {next:            }

Procedure LongJump (Var JumpDest: JumpRecord);
inline(
      $5F/ {pop di           }
      $07/ {pop es           }
      $26/$8B/$25/ {mov sp,es:[di]   }
      $26/$8B/$6D/$02/ {mov bp,es:[di+2] }
      $26/$FF/$6D/$04); {jmp far es:[di+4]}
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Problem mit "inline", "assembler"

  Alt 11. Mär 2009, 08:58
Delphi-Quellcode:
Procedure SetJump (Var JumpDest: JumpRecord);
asm
  pop di
  pop es
  mov es:[di],sp
  mov es:[di+2],bp
  call @null
 @null:
  pop ax
  add ax,12
  ...
end;
Du kannst ASM ganz normal schreiben. Aber bedenke bitte, dass wir schon lange keinen 16bit-Prozessor mehr haben und zu dem einen linearen Addressraum. Dein code würde so nicht funktionieren.

Crashkurs
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Problem mit "inline", "assembler"

  Alt 11. Mär 2009, 11:19
Hallo,

wenn ich mich richtig erinnere, wurden SetJump und LongJump zu Zeiten von Turbo Pascal eingesetzt, um in der Fehlerbehandlung prozedurübergreifende Sprünge durchführen zu können. In modernen Sprachen würde man zu diesem Zweck Exceptions verwenden.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz