![]() |
Inline Assembler
Delphi-Quellcode:
Fehlermeldung:
procedure CvtInt;
{ IN: EAX: The integer value to be converted to text ESI: Ptr to the right-hand side of the output buffer: LEA ESI, StrBuf[16] ECX: Base for conversion: 0 for signed decimal, 10 or 16 for unsigned EDX: Precision: zero padded minimum field width OUT: ESI: Ptr to start of converted text (not start of buffer) ECX: Length of converted text } asm OR CL,CL JNZ @CvtLoop @C1: OR EAX,EAX JNS @C2 NEG EAX CALL @C2 MOV AL,'-' INC ECX DEC ESI MOV [ESI],AL RET @C2: MOV ECX,10 @CvtLoop: PUSH EDX PUSH ESI @D1: XOR EDX,EDX DIV ECX DEC ESI ADD DL,'0' CMP DL,'0'+10 JB @D2 ADD DL,('A'-'0')-10 @D2: MOV [ESI],DL OR EAX,EAX JNE @D1 POP ECX POP EDX SUB ECX,ESI SUB EDX,ECX JBE @D5 ADD ECX,EDX MOV AL,'0' SUB ESI,EDX JMP @z @zloop: MOV [ESI+EDX],AL @z: DEC EDX JNZ @zloop MOV [ESI],AL @D5: end; //////////////////////////////////////////////////////////////////////////////// // Procedure : IntToHex // Comment : function IntToHex(Value: Integer; Digits: Integer): string; // FmtStr(Result, '%.*x', [Digits, Value]); asm CMP EDX, 32 // Digits < buffer length? JBE @A1 XOR EDX, EDX @A1: PUSH ESI MOV ESI, ESP SUB ESP, 32 PUSH ECX // result ptr MOV ECX, 16 // base 16 EDX = Digits = field width CALL CvtInt MOV EDX, ESI POP EAX // result ptr CALL System.@LStrFromPCharLen ADD ESP, 32 POP ESI end; [/quote]units\MpuTools.pas(339,1) Fatal: Syntax error, "BEGIN" expected but "ASM" found[quote] Setze ich vor Zeile 11 das begin kommt folgende Fehlermeldungen für die Zeile 58: [quote]units\MpuTools.pas(386,1) Error: Illegal expression units\MpuTools.pas(386,10) Fatal: Syntax error, ";" expected but "identifier INTTOHEX" found |
Re: Inline Assembler
Wenn du nur vor Zeile 11 ein begin setzt, kann es sein das da in Zeile 52 ein end; zu wenig ist :mrgreen:
MfG, Bug |
Re: Inline Assembler
Zitat:
|
Re: Inline Assembler
Zitat:
|
Re: Inline Assembler
Die Frage ist aber, warum funktioniert die Syntax da oben nicht? Bei mir funktioniert sie.
Was hast du denn da für einen Uraltcompiler verwendet? Musst du evtl. noch "assembler" als Direktive hinter die Funktion schreiben. :mrgreen: Edit: Ach mist, dieses *** Lazarus-Forum :duck: Und ich hatte extra noch nachgesehen, welche Delphi-Version Luckie benutzt..... Edit2: Kann man dieses Lazarusforum vielleicht in einer anderen Farbe gestalten (kirschrot bspw.)? Das ist nicht das erste Mal, dass mir das passiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz