faecher:informatik:oberstufe:techinf:assembler:register: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:register:start [13.09.2021 18:35] – [Flags] sbelfaecher:informatik:oberstufe:techinf:assembler:register:start [13.09.2021 19:55] (aktuell) – [Speicherbereiche reservieren] sbel
Zeile 20: Zeile 20:
 Das folgende Bild zeigt die Register für die 32Bit Prozessoren: Das folgende Bild zeigt die Register für die 32Bit Prozessoren:
  
-{{ :faecher:informatik:oberstufe:techinf:assembler:register:auswahl_401.png |}}+{{ :faecher:informatik:oberstufe:techinf:assembler:register:auswahl_401.png?400 |}}
  
 Registernamen beginnen mit einem E für "extended", weil diese Register von 16 auf 32 Bit erweitert wurden.  Registernamen beginnen mit einem E für "extended", weil diese Register von 16 auf 32 Bit erweitert wurden. 
Zeile 51: Zeile 51:
  
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-Statusflags sind Flags, die der Prozessor nach arithmetischen oder bitweise logischen Operationen setzt, um etwas über das Resultat dieser Operation auszusagen. +**Statusflags** sind Flags, die der Prozessor nach arithmetischen oder bitweise logischen Operationen setzt, um etwas über das Resultat dieser Operation auszusagen. 
  
 Der Programmierer kann diese Flags dann in bedingten Sprungbefehlen abfragen und Programmverzweigungen vom Zustand Der Programmierer kann diese Flags dann in bedingten Sprungbefehlen abfragen und Programmverzweigungen vom Zustand
Zeile 57: Zeile 57:
 </WRAP> </WRAP>
  
 +[[.statusflags:start|Statusflags im Detail]]
  
 +===== Speicherbereiche reservieren =====
  
-===== Beispiel =====+Im Abschnitt .data werden Speicherbereiche mit Vorbelegung definiert, im Abschnitt .bss solche, die nicht initialisiert werden.
  
 +Bei der Deklaration muss angegeben werden, wie groß die Bereiche sein sollen. 
  
 +^ .data  ^ .bss   ^ Size    ^
 +| db     | resdb  | 1 Byte  |
 +| dw     | resdw  | 2 Byte  |
 +| dd     | resdd  | 4 Byte  |
 +| dq     | resdq  | 8 Byte  |
  
-<code asm> +**Beispiele:**
-section .data +
-     msg db 'Displaying 9 stars',0xa ;Message, Aneinanderreihung von "byte" (db) Bereichen +
-     len equ $ - msg  ;Laenge der Message +
-     s2  times 9 db '*' ; 9 x ein byte (db) mit dem Inhalt "*+
-  +
-  +
- section .text +
-    global _start     ;must be declared for linker +
-  +
- _start         ;startadresse +
-    mov  edx,len  ;Laenge nach edx +
-    mov  ecx,msg  ;Message nach ecx +
-    mov  ebx,1    ;file descriptor (stdout) +
-    mov  eax,4    ;system call number (sys_write) +
-    int  0x80     ;call kernel +
-  +
-    mov  edx,9    ;message length +
-    mov  ecx,s2   ;message to write +
-    mov  ebx,1    ;file descriptor (stdout) +
-    mov  eax,4    ;system call number (sys_write) +
-    int  0x80     ;call kernel +
-  +
-    mov  eax,1    ;system call number (sys_exit) +
-    int  0x80     ;call kernel+
  
-</code>+  * Zaehler2 DB 0 ;Def. der Byte-Variablen Zaehler2, Vorbesetzung mit 0 
 +  * Startchar DB 65 ;Vorbesetzung mit ASCII-Zeichen #65 = ’A’ 
 +  * Startchar DB ’A’;gleiche Wirkung, besser lesbar 
 +  * Regmaske DB 00110101b ;Vorbesetzung mit binärem Wert (Bitmuster) 
 +  * Pixely DW 01AFh ;Wort-Variable, Vorbesetzung mit hexadezimalem Wert
  
-Hier kommt wieder der **Linux-Systemaufruf** ''4'' zum Einsatz. Linux-Systemaufrufe funktionieren grob folgendermaßen:+Mit einer Anweisung können auch gleich mehrere Speicherplätze gleichen Typs, also Felder , 
 +definiert werden:
  
-    Lege die Nummer des Systemaufrufs in das EAX-Register +  Meldung1 DB ’Divisionsfehler! ;Vorbesetzung mit einer Zeichenkette,das Feld erhält 16 Byte Speicherplatz 
-    Speichere die Argumente für den Systemaufruf in den Registern EBXECXusw. +  Meldung1 DB ’Hallo Welt’,13,10 ;Vorbesetzung mit einer Zeichenkette, und Steuerzeichen, 12 Byte Speicherplatz
-    * Rufe den Interrupt (80h) auf +
-    * Das Ergebnis des Systemaufrufs wird normalerweise im EAX-Register zurückgegeben.+
  
-Um das erfolgreich zum Einsatz zu bringen, muss man wissen, was ein Systemaufruf in welchem Register erwartet, damit er funktioniert, beim System-Call 4 (Write) ist es folgendermaßen:+Das haben wir beim Hallo-Welt Programm gemacht.
  
-^ Name   ^ %eax  ^ %ebx                          ^ %ecx                    ^ %edx            ^ %esx  ^ %edi  ^ +In der .bss-Sektion sieht dass folgendermaßen aus:
-| Write  | 4     | unsigned int (Output Stream)  | const char * (Inhalte)  | size_t (Länge)     | -     |+
  
-Das kann man sich ein wenig wie eine Funktion/Methode mit Argumenten vorstellen: Man befüllt zunächst die Register mit den Argumenten und ruft dann den Systemaufruf auf.+''antwort resb 5 ; 5 beschreibbare Bytes ohne spezielle Vorbelegung.''   
 + 
 +{{simplefilelist>:faecher:informatik:oberstufe:techinf:assembler:register:*}}
  • faecher/informatik/oberstufe/techinf/assembler/register/start.1631550910.txt.gz
  • Zuletzt geändert: 13.09.2021 18:35
  • von sbel