Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inline ASM - Rückgabe (https://www.delphipraxis.net/155163-inline-asm-rueckgabe.html)

DarkItachi 11. Okt 2010 20:38

Inline ASM - Rückgabe
 
Hallöchen!

Ich habe ein ASM InlineCode:

Delphi-Quellcode:
  asm
     mov AH, 2Ch
     int 21h
  end;
Als Rückgabewerte bekomme ich: CH, CL, DH.. [Stunden, Minuten, Sekunden]

Wie kann ich nun CH bzw die anderen in einer Variable speichern?
Also ich habe eine function:

Delphi-Quellcode:
function gettime: String;
var
 stunden, minuten, sekunden: integer;
begin
  asm
    mov AH, 2Ch
    int 21h
    mov s, CH
  end;
Result:= IntTOStr(s)
geht leider nicht...
Operandengröße stimmt nicht überein..
Kann mir jemand erklären und zeigen, wie man mit den Rückgabewerten umgeht?

thx

himitsu 11. Okt 2010 20:44

AW: Inline ASM - Rückgabe
 
Wo kommt bitte "s" her?

Zitat:

Zitat von DarkItachi (Beitrag 1055130)
Operandengröße stimmt nicht überein..

Ist doch auch klar?

Integer = 4 Byte (z.B. EAX)
Byte = 1 Byte (z.B. AL)

Delphi-Quellcode:
var
  stunden, minuten, sekunden: Byte;
begin
  asm
    mov AH, $2C
    int $21
    mov byte ptr &stunden, CH
    mov byte ptr &minuten, CL
    mov byte ptr &sekunden, DH
  end;
(ich persönlich schreib das "byte ptr" und "&" mit dazu und arbeite auch gern einheitlich mit der Delphi-Syntax für die Hex-Werte ... muß man aber nicht unbedingt)

Es gab aber auch noch irgendeinen Befehl (welcher mir grad nicht einfällt), um Byte nach LongWord/LongInt zu expandieren, aber ich glaub der ging nur innerhalb eines Registers.


PS: Warum unbedingt via Interrupt?
(wobei dieser vom Windows nicht unbedingt erlaubt sein muß)

DarkItachi 11. Okt 2010 20:49

AW: Inline ASM - Rückgabe
 
Joa danke..

Ich habe erst gestern mit assembler beschäftigt, aber kann noch fast garnichts...
Aber du hast Recht, das ist logisch...

Habe gerade ein dt. ebook gefunden, damit werde ich asm lernen :P

thx nochmal :-D

Edit: habe falsch kopiert ^^
ich meine natürlich stunden statt s :D

Ich habe diesen Code von dieser Seite
http://www.delphipages.com/forum/sho...d.php?t=153039

Ich bin gerade sehr interessiert an assembler, deswegen probiere ich manche Sachen so aus ^^

Edit2:
Ich bekomme auch bei dem Interrupt ne Zugriffsverletzung :D

Reinhard Kern 12. Okt 2010 00:09

AW: Inline ASM - Rückgabe
 
Zitat:

Zitat von DarkItachi (Beitrag 1055133)
Ich bekomme auch bei dem Interrupt ne Zugriffsverletzung :D

Hallo,

ist dir klar, dass INT21 ein Software-Aufruf für MSDOS ist? Wahrscheinlich ist das Beispiel für Turbopascal für DOS.

Gruss Reinhard

Luckie 12. Okt 2010 00:27

AW: Inline ASM - Rückgabe
 
INT21 ist ein Hardware Interupt. Direkte Hardwarezugriffe sind unter Windows nur über Treiber möglich.

himitsu 12. Okt 2010 01:00

AW: Inline ASM - Rückgabe
 
Zitat:

Zitat von Luckie (Beitrag 1055165)
Direkte Hardwarezugriffe sind unter Windows nur über Treiber möglich.

Es kommt drauf an ... Hardwarezugriffe nein, obwohl ... RDPMC und RDTSC könnte man auch schon als Hardwarezugriffe bezeichnen, jedenfalls lesen sie Werte von der CPU aus und einige Interrupts sind auch möglich.
Der Interrupt 3 ist auch im Usermode ganz nett oder böse, jenachdem wie und wo man den verwendet/antrifft.

DarkItachi 12. Okt 2010 14:42

AW: Inline ASM - Rückgabe
 
Danke für die Aufklärungen!

Ich habe das, was ihr mir sagen wolltet, eigentlich schon verstanden...
So weit so gut.. Wie kann man denn unter Windows das Datum via Assembler erhalten?

Ich arbeite gerade an ein Assembler-Inline-Beispiel (wenn es fertig ist, kommt es in meine CodeLib), welches ich später nochmal angucken kann..

Naja, ich muss gerade
Urzeit und Datum via Assembler rausfinden...

Hat jemand eine Ahnung, wie man das realisieren könnte?

Ps.: Ich weiß, dass Delphi schon von Haus aus die Funktionen:
Date & Time hat

Aber ich möchte ich das jetzt über ASM machen.. :thumb:

Union 12. Okt 2010 15:15

AW: Inline ASM - Rückgabe
 
Das einzige was Du über ASM machen könntest wäre GetLocalTime aufzurufen. Die Systemzeit wird durch die Windows API zurückgegeben.

DarkItachi 12. Okt 2010 15:30

AW: Inline ASM - Rückgabe
 
Ja danke :-D

Habs geschafft


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 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