AGB  ·  Datenschutz  ·  Impressum  







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

Inline ASM - Rückgabe

Ein Thema von DarkItachi · begonnen am 11. Okt 2010 · letzter Beitrag vom 12. Okt 2010
Antwort Antwort
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#1

Inline ASM - Rückgabe

  Alt 11. Okt 2010, 20:38
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
Developer since age 14
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: Inline ASM - Rückgabe

  Alt 11. Okt 2010, 20:44
Wo kommt bitte "s" her?

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ß)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Okt 2010 um 20:50 Uhr)
  Mit Zitat antworten Zitat
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Inline ASM - Rückgabe

  Alt 11. Okt 2010, 20:49
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

thx nochmal

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

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
Developer since age 14

Geändert von DarkItachi (11. Okt 2010 um 21:00 Uhr)
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

AW: Inline ASM - Rückgabe

  Alt 12. Okt 2010, 00:09
Ich bekomme auch bei dem Interrupt ne Zugriffsverletzung
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Inline ASM - Rückgabe

  Alt 12. Okt 2010, 00:27
INT21 ist ein Hardware Interupt. Direkte Hardwarezugriffe sind unter Windows nur über Treiber möglich.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#6

AW: Inline ASM - Rückgabe

  Alt 12. Okt 2010, 01:00
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Okt 2010 um 01:05 Uhr)
  Mit Zitat antworten Zitat
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Inline ASM - Rückgabe

  Alt 12. Okt 2010, 14:42
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..
Developer since age 14
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Inline ASM - Rückgabe

  Alt 12. Okt 2010, 15:15
Das einzige was Du über ASM machen könntest wäre GetLocalTime aufzurufen. Die Systemzeit wird durch die Windows API zurückgegeben.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
DarkItachi

Registriert seit: 28. Dez 2009
Ort: Berlin
130 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: Inline ASM - Rückgabe

  Alt 12. Okt 2010, 15:30
Ja danke

Habs geschafft
Developer since age 14
  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 10:49 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