Software > Coding
Hilfe bei PureC printf und Adressberechnung
simonsunnyboy:
Nein, das ist nicht Pure C, sondern der von Pure C generierte Assembler Code, der vermutliuch nur add.w erzeugt, obwohl du add.l für den Übertrag in die oberen Bytes bräuchtest.
Das liegt alles an den verwendeten Datentypen. Diese Auswahl beinflusst direkt den nötigen Maschinencode, und der kann problemlos Überträge weglassen.
guest522:
--- Zitat von: simonsunnyboy am Fr 06.04.2012, 13:03:45 ---Nein, das ist nicht Pure C, sondern der von Pure C generierte Assembler Code, der vermutliuch nur add.w erzeugt, obwohl du add.l für den Übertrag in die oberen Bytes bräuchtest.
--- Ende Zitat ---
Die Aussage versteh ich nicht. Mir ist schon klar, dass ein C-Compiler binär Code (nicht Assembler!) erzeugt.
Mir ist auch klar, dass hier unterschiedliche Instruktionen zum Einsatz kommen. Was hier richtig oder falsch ist bzw. was ich bräuchte ist nicht die Frage.
--- Zitat von: simonsunnyboy am Fr 06.04.2012, 13:03:45 ---Das liegt alles an den verwendeten Datentypen. Diese Auswahl beinflusst direkt den nötigen Maschinencode, und der kann problemlos Überträge weglassen.
--- Ende Zitat ---
siehe oben....ist mir alles bewusst. ich hätte es nur gern etwas präziser gewußt. ;) D.h. welchen Regeln folgt eine Pointer Addition abhängig von der verwendeten Syntax.
simonsunnyboy:
Pointerarithmetik folgt ganz regulär den Regeln der verwendeten Registern und wie auf sie zugegriffen wird. Sie unterscheidet sich absolut nicht vom normalen Rechnen.
Wenn du nur auf die unteren Bytes zugreifst, gibt es keinen Übertrag in die beiden oberen, ganz einfach.
C ist eigentlich nur ein besserer Makroassembler. EIn grundlegendes Verständnis für die Maschinenebene ist leider weiterhin zwingend nötig, um solche "Fallen" zu verstehen. Deswegen: Pointer für M68k = 32Bit = unsigned long = uint32_t = U32
Und mit Pointern nicht rechnen, wenn es nicht zwingend notwendig ist.
Was genau willst Du eigentlich technisch mit Deinem Konstrukt da machen?
guest522:
--- Zitat von: simonsunnyboy am Fr 06.04.2012, 14:26:32 ---Pointerarithmetik folgt ganz regulär den Regeln der verwendeten Registern und wie auf sie zugegriffen wird. Sie unterscheidet sich absolut nicht vom normalen Rechnen.
Wenn du nur auf die unteren Bytes zugreifst, gibt es keinen Übertrag in die beiden oberen, ganz einfach.
C ist eigentlich nur ein besserer Makroassembler. EIn grundlegendes Verständnis für die Maschinenebene ist leider weiterhin zwingend nötig, um solche "Fallen" zu verstehen. Deswegen: Pointer für M68k = 32Bit = unsigned long = uint32_t = U32
Und mit Pointern nicht rechnen, wenn es nicht zwingend notwendig ist.
Was genau willst Du eigentlich technisch mit Deinem Konstrukt da machen?
--- Ende Zitat ---
Sei mir nicht böse, aber Deine Antwort ist mir zu unpräzise. ;D
Das ist als wenn ich frage "Warum ist -2 + 2 = 0" und Du antwortest "Das folgt den Regeln der Mathematik".
Kannst Du an anhand der konkreten Instruktionen (vor allem das 3. Bsp.) erklären warum die Arithmetik genau das macht was sie macht? Diese Erklärung suche ich, damit ich das besser verstehe.
Was ich damit mache? Ich stricke wieder mal an der Nova rum.
Gruß
Wolfgang
simonsunnyboy:
Ich behaupte, wenn Du einfach sagst was Du genau ansprechen willst, dann gibt es bestimmt eine elegantere Lösung, die auch eindeutig zu verstehen ist.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln