faecher:informatik:oberstufe:techinf:assembler:logik:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:techinf:assembler:logik:start [20.09.2021 19:15] sbelfaecher:informatik:oberstufe:techinf:assembler:logik:start [20.09.2021 19:41] (aktuell) sbel
Zeile 1: Zeile 1:
-====== Logik, Sprünge und Unterprogramme ======+====== Logik, Sprünge und Sprungmarken ======
  
  
Zeile 37: Zeile 37:
   and BL, 0FH      ; Jetzt steht in BL das Bitmuster 00001010   and BL, 0FH      ; Jetzt steht in BL das Bitmuster 00001010
 </code> </code>
- + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A1) === 
 + 
 +Analysiere den folgenden Code. Welchen Inhalt hat das Register BL nach der AND Operation? Welche Ausgabe erzeugt das Programm? 
 <code asm> <code asm>
  section .data  section .data
Zeile 44: Zeile 50:
 section .text section .text
    global _start     ;must be declared for linker (ld)    global _start     ;must be declared for linker (ld)
-_start:             ;tell linker entry point+_start:              ;tell linker entry point
  
    
-   MOV BL, 01111010B +   MOV BL, 01111010B ; 
-   AND BL, 11110000B+   AND BL, 0F0H      ;
  
-   MOV [tabelle], BL+   MOV [tabelle], BL  ; Was passiert hier?
                  
    ;tabelle ausgeben    ;tabelle ausgeben
Zeile 63: Zeile 69:
        
 </code> </code>
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (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  db  'Gerade Zahl!' 
 +len1  equ  $ - even_msg 
 +   
 +odd_msg db  'Ungerade Zahl!'   
 +len2  equ  $ - odd_msg
 +
 +section .text
 +   global _start            
 +
 +_start:                     ;tell linker entry point
 +   mov   ax, 8h           ;getting 8 in the ax 
 +   and   ax, 1              ;and ax with 1
 +   jz    evnn
 +   
 +   
 +   mov   eax, 4             ;system call number (sys_write)
 +   mov   ebx, 1             ;file descriptor (stdout)
 +   mov   ecx, odd_msg       ;message to write
 +   mov   edx, len2          ;length of message
 +   int   0x80               ;call kernel
 +   jmp   exitprog
 +
 +evnn:   
 +  
 +   mov   ah,  09h
 +   mov   eax, 4             ;system call number (sys_write)
 +   mov   ebx, 1             ;file descriptor (stdout)
 +   mov   ecx, even_msg      ;message to write
 +   mov   edx, len1          ;length of message
 +   int   0x80               ;call kernel
 +
 +exitprog:
 +
 +   mov   eax,             ;system call number (sys_exit)
 +   int   0x80               ;call kernel
 +</code>
 +
 +  * Teste das Programm und überprüfe, ob es korrekte Ausgaben erzeugt.
 +  * Erweitere das Programm um eine Benutzereingabe, die ein Zeichen als Eingabe akzeptiert. Wie kannst du Zahlen testen die größer sind als 10?
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A3) ===
 +
 +Bearbeite die Seite https://www.tutorialspoint.com/assembly_programming/assembly_logical_instructions.htm, um Informationen über die weiteren logischen Operatoren zu erhalten.
 +
 +Informationen zu Bedingungen und Sprungbefehlen findest du auf dieser Seite:
 +
 +https://www.tutorialspoint.com/assembly_programming/assembly_conditions.htm
  
  
-An folgendem Beispiel kann man sich einige neue Möglöichkeiten erschließen: 
  • faecher/informatik/oberstufe/techinf/assembler/logik/start.1632165311.txt.gz
  • Zuletzt geändert: 20.09.2021 19:15
  • von sbel