-         
Ergebnis 1 bis 9 von 9

Thema: welche Unterschied

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    9

    welche Unterschied

    Anzeige

    1) Syntax: RETLW k ; k ist ein Zahlenwert von 0 ... 255
    a) retlw 1 ; in w: 0000 0001
    b) retlw '1' ; Frage: '1' ist ein Zahl oder ein Zeichen?
    Zahlenwert in W?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.02.2006
    Alter
    48
    Beiträge
    781
    '1' ist das Zeichen 1, der Zahlenwert ist 49.

    Mit Zeichen kann man übrigens auch rechnen:
    '0'+1 ist das gleiche wie '1' (gleichbedeutend mit '0'+1 = 48+1 = 49 = '1').
    '1'-'0' ergibt dann 1 als Zahlenwert.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    9
    verstehe ich noch nicht, warum '0' = 48?

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.996
    Hallo!

    Das Assemblerprogramm nimmt alles zwischen ´´ als ASCII Koden und 48 bedeutet ein Zeichen 0 (Null).

    MfG

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    9
    dank PICture,

    jetzt alles klar!
    D'48' = 0x30 ASCII Code ist '0'.



    ich habe noch eine Frage:

    ich habe gerade PIC datesheets gelesen. man kann eine Dezimalzahl nur so schreiben: D'123' oder .123
    aber folgendes Befehl: ini equ 8 ; ist 8 Dezimal?

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.996
    die Zahlen zwischen 0 bis 9 sind für beide Zahlsysteme (hex und dec) gleich. Nur für alle grössere Zahlen, so wie in Deinem ersten Beispiel D´123´, gibt es zwischen den Zahlen ein Unterschied.

    Du hast also schlechte Zahl für deine Frage genommen.

    MfG

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Alter
    54
    Beiträge
    114
    Man kann auch beim Assembler am Anfang die Zeile

    list r=dec

    einfügen.
    Dann sind alle Zahlen, die nicht ausdrücklich anders codiert werden, dezimal zu verstehen.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.11.2007
    Alter
    34
    Beiträge
    140
    Als weiter bitte...
    Ich kann da echt noch was lernen!

    Mit

    Test equ 32 kann doch entweder die dezimale Zahl 32 gemeint sein oder ebenso die Speicherzelle 0x032. Habe ichd as richtig verstanden? Also je nachdem ob ich schreibe

    addlw Test ; dann addiere ich 32dezi auf w

    oder

    movwf Test ; hier speichere ich w in Test an der Adresse 0x032

    richtig?

    Gruß

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Alter
    54
    Beiträge
    114
    Nein.

    Du legst dich am Anfang des Programms fest, welches Zahlensystem gelten soll. Wenn man gar nichts angibt, gilt glaube ich Hex als default. Ich schreibe immer "list r=dec" am Anfang meines Programms, damit ich nicht durcheinander komme.

    Die Zeile
    Code:
    Test equ 32
    ist eindeutig.
    Je nach Basis ist Test entweder 32 (r=dec) oder 50 (r=hex)

    Ob Test im Programm als Zahlenwert (literal) oder als Adresse angewendet wird, ist dem Assembler egal. Er ersetzt immer Test durch den Zahlenwert, den er bei der entsprechenden "equ" Anweisung gesehen und entsprechend der dann gültigen Basis interpretiert hat.
    Es gibt auch noch die "Set"-Anweisung. Die weist Test nur vorläufig einen Wert zu, den man später wieder ändern kann. Z.B. so:
    Code:
    Test SET Test+1
    Achtung! Es kommt noch schlimmer. Man kann die Basis auf verschiedene Arten einstellen. Es gibt neben der "List"-Anweisung noch die "RADIX"-Anweisung und zumindest bei einem Assembler kann man noch per Kommandozeilen-Parameter die Default-Basis einstellen. Die Basis kann auch noch auf oktal oder binär eingestellt werden und jederzeit mitten im Programm geändert werden.

    Das alles kann dazu beitragen, im besten Fall ein Programm komplett unverständlich zu machen und im schlimmsten Fall einen so subtilen Fehler zu produzieren, dass man ihn nicht mehr findet.

    Also mein Rat: Eine feste Basis am Anfang einstellen, und die bei allen Programmen gleich, damit man weiß, woran man ist. Alle Zahlen, die nicht in dieser Basis sind, dann mit dem entsprechenden Code präfixen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •