Ergebnis 1 bis 7 von 7

Bit-weise logische Operatoren | Verwirrung

  1. #1 Zitieren
    Knight Avatar von GenerationLost
    Registriert seit
    Apr 2009
    Ort
    Whereabouts Unknown
    Beiträge
    1.773
    Hallo zusammen!

    Ich lerne gerade für das Fach "Technische Informatik" an meiner Hochschule und hänge ein bisschen bei Bit-weisen logischen Operatoren, vor allem was die Fragestellung meines Profs angeht.

    Eine Aufgabe lautet z.B. so:
    Zum „Auf-Eins-Setzen“ bestimmter Bits in einem Register wird ein Bit-weiser logischer Operator mit einer entsprechend gewählten Konstante als zweitem Operanden verwendet.
    Es ist eine Multiple-Choice Aufgabe mit den Möglichkeiten:
    - AND - OR
    - NAND - XOR
    - NOR - XNOR

    Die Folgeaufgabe lautet:
    Der Inhalt des 32-Bit Registers $s0 soll im letzten Byte auf (FF)Hex gesetzt werden. Dazu wird als Hilfsregister $t0 verwendet und das Ergebnis soll nach $s1 geschrieben werden. (Hier keinen Assemblercode hinschreiben.) Vervollständigen Sie bitte die Darstellung und beschriften Sie die freien Linien mit dem logischen Operator und der richtigen binären Konstante.
    Code:
    $s0: 0111 0011 1111 0100 1100 1011 1100 1010
    Das letzte Byte (in rot) soll also alles auf 1 gesetzt werden, also verodere ich mit:
    Code:
    0.................1111 1111
    Das würde ja bedeuten, die Lösung zur ersten Aufgabe wäre das OR, richtig?

    Eine Abwandlung dieser Aufgabe lautet:
    Zum Ausmaskieren (also zum Nullen) bestimmter Bits in einem Register wird ein Bit-weiser logischer Operator mit einer entsprechend gewählten Konstante als zweitem Operanden verwendet.
    mit der Folgeaufgabe:
    Der Inhalt des 32-Bit Register $s0 soll im letzten Byte auf (00)Hex gesetzt werden. Dazu wird als Hilfsregister $t0 verwendet und das Ergebnis soll nach $s1 geschrieben werden. (Hier keinen Assemblercode hinschreiben.) Vervollständigen Sie bitte die Darstellung und beschriften Sie die freien Linien mit dem logischen Operator und der richtigen binären Konstante.
    Code:
    $s0: 0111 0011 1111 0100 1100 1011 1100 1010
    Ich hätte jetzt gesagt "drehen wir es einfach um, da von 1 jetzt auf 0, also NOR", klappt nur nicht. Ich hab es auch mit den anderen versucht, ohne Erfolg. Irgendwie stehe ich gerade ziemlich auf dem Schlauch und bin jetzt nur noch verwirrt.

    Wäre euch sehr verbunden, wenn ihr mir da aushelfen könntet.

    LG
    GL
    GenerationLost ist offline

  2. #2 Zitieren
    Tieftöner Avatar von Lookbehind
    Registriert seit
    Dec 2007
    Beiträge
    15.176
    Wenn du ein Bit, unabhängig von seinem aktuellen Wert, mit einem boolschen Operator auf einen bestimmten Wert bringen möchtest, aber nicht weißt, welcher Operator das kann, dann hilft, wie so oft eine Werte-Tabelle.

    Mögliche Eingabewerte Zweites Register Soll raus kommen
    0 0 0
    1 0 0

    Welcher Operator kann das?
    Das kann man, je nach Vorgabe auch mit anderen Werten für den Zweiten Wert machen, oder für den Zielwert.

    Wenn du so nicht drauf kommst, mach dir eine Werte-Tabelle für jeden der Operatoren und vergleiche.
    Lookbehind ist offline

  3. #3 Zitieren
    Knight Avatar von GenerationLost
    Registriert seit
    Apr 2009
    Ort
    Whereabouts Unknown
    Beiträge
    1.773
    Prinzipiell glaube ich es verstanden zu haben. Nehmen wir mal das zuletzt genannte Beispiel:
    Code:
    $s0: 0111 0011 1111 0100 1100 1011 1100 1010
    Das letzte Byte auf 0. Das würde ja ganz einfach mit einem AND gehen:
    Code:
    ... 1100 1010
    AND 0000 0000
    =   0000 0000
    Der Rest müsste dann wohl mit 1 verundet werden, um den Wert beizubehalten.
    Im Bezug zur ersten Aufgabenstellung, gibt es da dann nicht eigentlich mehrere Wege, oder nur diesen einen Operator der genau das macht?

    Man könnte doch auch statt AND ein NAND nehmen und mit dem 1er-Komplement der Konstante verknüpfen, also quasi umgekehrt, oder mache ich da gerade einen Denkfehler?
    GenerationLost ist offline

  4. #4 Zitieren
    Tieftöner Avatar von Lookbehind
    Registriert seit
    Dec 2007
    Beiträge
    15.176
    Vergiss dabei nicht, dass ein NAND die Eingänge negiert, nicht den Ausgang (das gibts auch, heißt dann AND NOT).
    Mögliche Eingabewerte Zweites Register NAND
    0 1 0
    1 1 0
    0 0 1
    1 0 0

    Aber, ja, es gibt oft mehrere Lösungen. Zumal du auch aus Kombinationen einzelner Operatoren wieder andere Operatoren bauen kannst. Du kannst dir ja mal überlegen, wie du aus AND und NAND ein XOR bauen kannst
    Lookbehind ist offline

  5. #5 Zitieren
    Knight Avatar von GenerationLost
    Registriert seit
    Apr 2009
    Ort
    Whereabouts Unknown
    Beiträge
    1.773
    Ist das nicht genau umgekehrt? NAND negiert den Ausgang, also ist für 00, 10 und 01 alles 1.
    GenerationLost ist offline

  6. #6 Zitieren
    Tieftöner Avatar von Lookbehind
    Registriert seit
    Dec 2007
    Beiträge
    15.176
    Zitat Zitat von GenerationLost Beitrag anzeigen
    Ist das nicht genau umgekehrt? NAND negiert den Ausgang, also ist für 00, 10 und 01 alles 1.
    Ähm, ups. Ja, du hast recht. Ich sollte so spät nicht mehr über solche Dinge schreiben.
    Lookbehind ist offline

  7. #7 Zitieren
    Knight Avatar von GenerationLost
    Registriert seit
    Apr 2009
    Ort
    Whereabouts Unknown
    Beiträge
    1.773
    Kein Problem, ich sehs als Übung. Dass ich das überhaupt gemerkt hab sagt mir ja schon, dass ich es verstanden hab.
    GenerationLost ist offline

Berechtigungen

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