Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
faecher:informatik:oberstufe:techinf:assembler:logik:start [20.09.2021 21:41] – sbel | faecher:informatik:oberstufe:techinf:assembler:logik:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Logik, Sprünge und Sprungmarken ====== | ||
- | |||
- | |||
- | Der Befehlssatz des Prozessors enthält die Befehle AND, OR, XOR, TEST und NOT der booleschen Logik. D | ||
- | |||
- | Das Format für diese Befehle ist folgendes: | ||
- | ^ Anweisung ^ Format im Programmcode ^ | ||
- | |AND |AND operand1, operand2 | | ||
- | |OR |OR operand1, operand2 | | ||
- | |XOR |XOR operand1, operand2 | | ||
- | |TEST |TEST operand1, operand2 | | ||
- | |NOT | NOT operand1 | ||
- | |||
- | Der erste Operand kann entweder in einem Register oder im Speicher sein. Der zweite Operand kann entweder in einem Register/ | ||
- | |||
- | Die Operatoren werden bitweise ausgeführt je nach Ergebis werden die Flags CF, OF, PF, SF oder ZF gesetzt. | ||
- | |||
- | ===== Die AND-Instruktion ===== | ||
- | |||
- | Die AND-Anweisung vergleicht zwei Operanden indem sie eine bitweise AND-Operation durchführt. Die bitweise UND-Verknüpfung ergibt 1, wenn die übereinstimmenden Bits beider Operanden 1 sind, andernfalls ergibt sie 0. | ||
- | |||
- | Das Ergebnis der Operation wird im ersten Operand gespeichert. | ||
- | |||
- | Beispiel: | ||
- | |||
- | < | ||
- | | ||
- | | ||
- | ---------------------------------- | ||
- | AND -> Operand1: | ||
- | </ | ||
- | |||
- | Die AND-Verknüpfung kann verwendet werden, um ein oder mehrere Bits zu löschen. Beispiel: Das BL-Register enthält 0011 1010. Wenn du die höherwertigen Bits auf Null setzen willst, verknüpfe BL mit 0FH: | ||
- | |||
- | <code asm> | ||
- | mov BL, 00111010B; Schreibe 00111010 ins Register BL | ||
- | and BL, 0FH ; Jetzt steht in BL das Bitmuster 00001010 | ||
- | </ | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A1) === | ||
- | |||
- | Analysiere den folgenden Code. Welchen Inhalt hat das Register BL nach der AND Operation? Welche Ausgabe erzeugt das Programm? | ||
- | |||
- | <code asm> | ||
- | | ||
- | tabelle TIMES 10 DW 97 | ||
- | |||
- | section .text | ||
- | | ||
- | _start: | ||
- | |||
- | |||
- | MOV BL, 01111010B ; | ||
- | AND BL, 0F0H ; | ||
- | |||
- | MOV [tabelle], BL ; Was passiert hier? | ||
- | | ||
- | ; | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | | ||
- | | ||
- | |||
- | </ | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A2) === | ||
- | |||
- | An folgendem Beispiel kann man sich einige neue Möglichkeiten erschließen - das folgende Programm testet eine Zahl, ob sie gerade oder ungerade ist. | ||
- | |||
- | <code asm> | ||
- | section .data | ||
- | even_msg | ||
- | len1 equ $ - even_msg | ||
- | |||
- | odd_msg db ' | ||
- | len2 equ $ - odd_msg | ||
- | |||
- | section .text | ||
- | | ||
- | |||
- | _start: | ||
- | | ||
- | | ||
- | | ||
- | |||
- | |||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | evnn: | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | exitprog: | ||
- | |||
- | | ||
- | | ||
- | </ | ||
- | |||
- | * Teste das Programm und überprüfe, | ||
- | * Erweitere das Programm um eine Benutzereingabe, | ||
- | |||
- | ---- | ||
- | {{: | ||
- | === (A3) === | ||
- | |||
- | Bearbeite die Seite https:// | ||
- | |||
- | Informationen zu Bedingungen und Sprungbefehlen findest du auf dieser Seite: | ||
- | |||
- | https:// | ||
- | |||