mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Negative Zahl! Woher weiß der uC?


Autor: M.o. G. (tavaritsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!


EIne Frage kann ich mir nicht beantworten.
Angenommen, ich möchte mit Assembler -1 im Speicher ablegen.
Wie sieht diese -1 im Speicher aus?
Ich stelle mir vor, dass der Wert nach den Zweierkomplementregeln 11 11 
11 11 heißt. Irgendwann hol ich den Wert aus dem Speicher zurück. Woher 
weiß der Controller, dass es sich um den Wert -1 handelt, und nicht um 
den Wert 0xff? Wie sagt man ihm also, wie er welchen Wert zu 
interpretieren hat?
Oder muss ich diese Interpretationsinformation mit ablegen?
?
Wahrscheinlich dumme Frage, aber ich bin Assembleranfänger. Bei C wird 
das durch das Schlüsselwort "unsigned" schon irgenwie geregelt.

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der uC weiss es in der Tat nicht -- er "sieht" nur die 8 Bit, die in 
einem Register stehen. Er weiss nicht von sich aus, wie er die Bits bzw. 
das Byte interpretieren soll. Es könnte signed oder unsigned sein, oder 
ein Buchstabe, eine Adresse oder vieles mehr. Aber Du als Programmierer 
weisst es, oder solltest es wissen. Du merkst es Dir durch den Namen der 
Variablen und eventuell einen Kommentar, und verwendest nur Operationen, 
die zu dem Datentyp passen.

Bei C ist es nicht viel anders. Nur dass der Compiler etwas aufpasst und 
z.B. nicht ohne weiteres zulässt, dass Du völlig unsinnige Operationen 
mit Deinen Datentypen machst.

Autor: Chris S. (hondaracer1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei C macht es der Compiler, bei Assembler macht das dein Kopf ;-)

Autor: Thomas V. (thomasv)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
richtig, Du musst selber drauf achten!

Der Wertebereich einer solchen (8bit) Zahl kann ja auch nur -128 bis 
+127 sein!

Beispiel:

80h = -128d
C0h = -64d
7Fh = +127d
40h = +64d

Deine Software muss das entsprechend berücksichtigen

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.