AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Seltsames Phänomen: Unterschied zwischen Integer und Int64
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsames Phänomen: Unterschied zwischen Integer und Int64

Ein Thema von hschmid67 · begonnen am 9. Jan 2021 · letzter Beitrag vom 9. Jan 2021
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Seltsames Phänomen: Unterschied zwischen Integer und Int64

  Alt 9. Jan 2021, 14:20
Die Frage ist nur: Warum funktioniert es unter 32Bit nicht?
Es ist ein komplett anderer Compiler.
Im Win32 wird Int64 auch noch "emuliert", denn die CPU hat ja nur 32 Bit, also das +1 berechnet nicht die CPU mit "einem" Assemblerbefehl, sondern es erledigt Delphi, über zwei Int32. Teilweise über monströse Funktionen in der System.pas.

Delphi-Quellcode:
// Win32
Unit1.pas.29: X := X + 1;
0060E3A9 8B45F0 mov eax,[ebp-$10]
0060E3AC 8B55F4 mov edx,[ebp-$0c]
0060E3AF 83C001 add eax,$01
0060E3B2 83D200 adc edx,$00
0060E3B5 8945F0 mov [ebp-$10],eax
0060E3B8 8955F4 mov [ebp-$0c],edx

// Win64
Unit1.pas.29: X := X + 1;
000000000070ADA8 4883450801 add qword ptr [rbp+$08],$01
Delphi-Quellcode:
{ 64-bit Integer helper routines }
{$IF defined(CPU386) and defined(ASSEMBLER)}
procedure __llmul;
procedure __lldiv;
procedure __lludiv;
procedure __llmod;
procedure __llmulo;
procedure __llumulo;
procedure __lldivo;
procedure __llmodo;
procedure __llumod;
procedure __llshl;
procedure __llushr;
{$ENDIF}
In Win32 sieht der Aufruf also quasi so aus
lTest.SetTo2(lCount).SetI(__lladd(lCount, 1)).WriteInt; // __lladd ist aber eine Inline-Funktion vom Compiler
und hier wird das __lladd wohl zu früh ausgeführt, vor SetTo2.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Jan 2021 um 14:35 Uhr)
  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 17:34 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