.286.386.486.586 ??
-
Hätte da mal so eine Frage,als Neueinsteiger in Assembler.
Ist die Einbindung der diversen Prozessoren,zBsp.:
mit .386 im Assemblercode,mit einer Filterung des
Befehlssatzes verbunden ? Sprich,bekomme ich eine
Meldung während des Assemblierens wenn ich einen
Opcode des 486 verwende obwohl ich für einen .386
"konfiguriert" habe ?Oder für was soll das sonst
gut sein ?Cu Zyklon
-
Ganz genau das ist es
-
Danke
-
Aja....hätt ichs fast vergessen.Hätte da noch eine Spezialfrage oder auch nicht.Vielleicht kann mir auch hier einer helfen.
In C heißt es ja man soll bei einer Zuweisung einer Zahl an einer Variable
des Typs LONG den "Zusatz" L oder l anhängen,da es sonst bei Operationen zu falschen Ergebnissen kommen kann.Hängt dies mit internen Operationen eines 16 und 32 Registers zusammen ?long Long_Vari;
/* Hier sollte ich das L dranhängen,da der Compiler sonst eine short Zahl annimmt und es eventuell bei Rechenoperationen zu falschen Ergebnissen kommen kann,aber wieso,habe geglaubt interne Operationen mit Operanden geht nur mit Operanden des gleichen Typs,castet nicht der Compiler für mich ?*/
Long_Vari = 634L;
Mfg Zyklon
-
Mal ne Frage außer der Reihe Zyklon.
Kennst Du Paul Morphy?
Wenn ja, wann und wo kann ich Dich mal treffen -
ist schon lange her seit dem GC...
-
Du meinst den Schachspieler Paul C.Morphy ? 1837 - 1884.
Ja der Mann war gut.Aber was hat das mit dem Thema zu tun,oder willst du mir
den Weg weisen ?Mfg Zyklon
-
long Long_Vari;
/* Hier sollte ich das L dranhängen,da der Compiler sonst eine short Zahl annimmt und es eventuell bei Rechenoperationen zu falschen Ergebnissen kommen kann,aber wieso,habe geglaubt interne Operationen mit Operanden geht nur mit Operanden des gleichen Typs,castet nicht der Compiler für mich ?*/
Long_Vari = 634L;Soweit ich mich noch richtig daran erinnern kann liegt es daran, dass das Statement wie folgt abgearbeitet wird.
1. Zuerst berechnen des Ausdrucks auf der rechten Seite 2. Zuweisung des Wertes des Ausdrucks an die Variable
Beim Berechnen des Ausdrucks wird als Typ die höchste Präzision gewählt. Dabei werden - meines Wissens - Ganzzahlen standartmäßig als int und Kommazahlen als double interpretiert. Wenn Du also
long myLong ; myLong = 1 ;
sdchreibst. So müsste die 1 automatisch als int (nicht als short) interpretiert werden. Erst beim zweiten Schritt, also der Zuweisung des Ausdrucks an die Variable, wird geschaut, ob die beiden Typen (Typ des Ausdrucks und der Variable) zueinander passen. Sollte dem nicht so sein, wird der Ausdruck automatisch auf den Typ der Variable gecastet.
Ich denke, so könnte es stimmen...
Vielleicht ist Deine Frage damit ja beantwortet.
*P.S. Wann und wo können wir mal spielen - und wie geht es denn der ganzen GC-Crew (Ninelives & Co.) - hast Du noch Kontakt?
mfg.
lasker
*[ Dieser Beitrag wurde am 05.06.2003 um 13:52 Uhr von own editiert. ]
-
Meine Frage ist zwar nicht ganz befriedigt,aber trotzdem vielen Dank.Das was Du meinst betrifft die implizite(automatische )Typumwandlung.Ist mir schon klar,nur dann bräuchte ich das L(l) generell nicht bei einer Zuweisung einer Zahl an eine long Variable dranzuhängen,wenn sich diese Zahl im Wertebereich einer short Variable befände.
P.S. Wann und wo können wir mal spielen - und wie geht es denn der ganzen GC-Crew (Ninelives & Co.) - hast Du noch Kontakt?
Soll das ein Scherz sein ?
Mfg Zyklon
-
Original erstellt von <Zyklon>:
**Meine Frage ist zwar nicht ganz befriedigt,aber trotzdem vielen Dank.Das was Du meinst betrifft die implizite(automatische )Typumwandlung.Ist mir schon klar,nur dann bräuchte ich das L(l) generell nicht bei einer Zuweisung einer Zahl an eine long Variable dranzuhängen,wenn sich diese Zahl im Wertebereich einer short Variable befände.
**Das L muss in dem Moment ran, wo die Zahl rechts den Typenbereich von int üebrschreitet. afair ist int der "standardtyp" erstmal. Wenn du nun eine Zahl die größer als ein int ist rechts hast, wird die gekürzt und du erhältst nicht das was du eigentlich wolltest. Ansonsten mit Operationen von Registern hat das nichts zu tun, das ist reine C-Problematik
-
oder casten mit (long)
cu todo
-
Meine Frage ist zwar nicht ganz befriedigt,aber trotzdem vielen Dank.Das was Du meinst betrifft die implizite(automatische )Typumwandlung.Ist mir schon klar,nur dann bräuchte ich das L(l) generell nicht bei einer Zuweisung einer Zahl an eine long Variable dranzuhängen,wenn sich diese Zahl im Wertebereich einer short Variable befände.
Ich kann mir ehrlich gesagt nicht vorstellen, zu welchen Fehlern es kommen kann, wenn Du
long myLong ; myLong = "Zahl" ;
schreibst. Solange eben die "Zahl" im Wertebereich eines Int-Wertes (oder Short-Wertes, wenn es bei Dir so ist) liegt. Allerdings hat mir mein Projektleiter immer eingeschärft, dass ich bei der Inititialisierung von Variablen mit einer Zahl immer ein cast (ob als (Long) ... oder mit dem ... L(l) ist dabei ja egal) vornehmen soll, weil es sonst zu leicht zu Fehlern kommen kann. Allgemein sei es auch guter Stil, wenn man es so macht.
Vielleicht solltes Du auch mal "Hume" im C++-Forum direkt ansprechen, wenn Deine Frage immer noch nicht (ganz) geklärt ist. Der kennt sich nämlich wesentlich besser aus, als ich...
P.S. Wann und wo können wir mal spielen - und wie geht es denn der ganzen GC-Crew (Ninelives & Co.) - hast Du noch Kontakt?
Soll das ein Scherz sein ?Ganz offentsichtlich habe ich Dich wohl verwechselt. Ich kannte mal einen Zyklon, der zu morgens statt der Tageszeitung alte Morphy-Partien studiert hat. Wir haben oft miteinander im GC gespielt. Seit dieser aufgelöst wurde, habe ich nichts mehr von ihm gehört. Soviel Zufall, dass ich ihn ausgerechnet hier wiedersehe, kann es wohl wirklich nicht geben. Schade eigentlich ...
-
Erstmal herzlichen Dank für die Antworten !
Original erstellt von TriPhoenix
Das L muss in dem Moment ran, wo die Zahl rechts den Typenbereich von int üebrschreitet. afair ist int der "standardtyp" erstmal. Wenn du nun eine Zahl die größer als ein int ist rechts hast, wird die gekürzt und du erhältst nicht das was du eigentlich wolltest. Ansonsten mit Operationen von Registern hat das nichts zu tun, das ist reine C-Problematik
Original erstellt von Own
Solange eben die "Zahl" im Wertebereich eines Int-Wertes (oder Short-Wertes, wenn es bei Dir so ist) liegt. Allerdings hat mir mein Projektleiter immer eingeschärft, dass ich bei der Inititialisierung von Variablen mit einer Zahl immer ein cast (ob als (Long) ... oder mit dem ... L(l) ist dabei ja egal) vornehmen soll, weil es sonst zu leicht zu Fehlern kommen kann. Allgemein sei es auch guter Stil, wenn man es so macht.
Aber nur wenn int auf dem jeweiligem System als short interpretiert wird,und der Datenbereich der zuweisenden Zahl größer als 2 Byte beträgt,kommt es natürlich zu Fehlern durch "Kürzungen" des Wertes(natürlich auch dann wenn die Zahl größer als long ist,klar)!? Aha....
Das ist also der Grund,leuchtet mir ein
Mein Gedankenweg war der,daß die Zahl automatisch in den Typ der Variablen,der die Zahl aufnehmen soll,umgewandelt wird.Unter Dos könnte man das wohl leicht nachvollziehen.
Nochmals vielen Dank !
Own,bin leider nicht der Zyklon für den Du mich hälst.Ehrlich gesagt hab ich in meinem ganzen Leben keine 3 Schachzüge getätigt.Vielleicht triffst ja doch mal den wahren Zyklon ?
Mfg ZyklonDouble