faecher:informatik:oberstufe:techinf:assembler:adressierung: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:adressierung:start [20.09.2021 20:24] sbelfaecher:informatik:oberstufe:techinf:assembler:adressierung:start [21.09.2021 09:01] (aktuell) sbel
Zeile 16: Zeile 16:
 BYTE_VALUE  DB  150    ; Ein Byte-Wert (BYTE_VALUE) wird zum Wert 150 definiert  BYTE_VALUE  DB  150    ; Ein Byte-Wert (BYTE_VALUE) wird zum Wert 150 definiert 
 ADD  BYTE_VALUE, 65    ; Es wird unmittelbar der Wert 65 addiert ADD  BYTE_VALUE, 65    ; Es wird unmittelbar der Wert 65 addiert
-MOV  AX, 45H           ; 45H wird unmittelbar ins Register AX geshrieben+MOV  AX, 45H           ; 45H wird unmittelbar ins Register AX geschrieben
 </code> </code>
  
Zeile 60: Zeile 60:
 <code asm> <code asm>
 Zeichenkette DB 'ABCDEfGH'  Zeichenkette DB 'ABCDEfGH' 
-Haeufigkeit DB 26 DUP (0)+Haeufigkeit times 26 DB 0
 </code> </code>
  
Zeile 68: Zeile 68:
 </code> </code>
  
-nicht zweckmäßig, sie würde immer das Feldelement Nr.3 (das vierte) ansprechen. Man müßte statt der 3 etwas Variables einsetzen können, je nachdem wür welchen Buchstaben man den Zähler inkremetieren möchte.+nicht zweckmäßig, sie würde immer das Feldelement 3 (das vierte) ansprechen. Man müßte statt der 3 etwas Variables einsetzen können, je nachdem für welchen Buchstaben man den Zähler inkremetieren möchte.
  
 Genau dies erlaubt die Register-indirekte Adressierung oder kurz indirekte Adressierung: Genau dies erlaubt die Register-indirekte Adressierung oder kurz indirekte Adressierung:
Zeile 76: Zeile 76:
 INC [Haeufigkeit+BX] ;indirekte Adressierung INC [Haeufigkeit+BX] ;indirekte Adressierung
 </code> </code>
-wird nun auch das Feldelement Nr.3 angesprochen, hier kann man aber zur Laufzeit berechnen, welcher Speicherplatz angesprochen werden soll, indem man BX mit diesem Wert vorbelegt, kann dann auch der 4. oder 10. Platz angesprochen werden.+wird nun auch das Feldelement 3 angesprochen, hier kann man aber zur Laufzeit berechnen, welcher Speicherplatz angesprochen werden soll, indem man BX mit diesem Wert vorbelegt, kann dann auch der 4. oder 10. Platz angesprochen werden.
    
  
Zeile 103: Zeile 103:
    mov  ebx,1           mov  ebx,1       
    mov  eax,4           mov  eax,4       
-   int :w 0x80        +   int  0x80        
  
    mov  eax,1          mov  eax,1      
Zeile 112: Zeile 112:
 {{:aufgabe.png?nolink  |}} {{:aufgabe.png?nolink  |}}
 === (A2) === === (A2) ===
 +Das folgede Bild zeigt ein Speicherschema zum obigen Code. 
 {{ :faecher:informatik:oberstufe:techinf:assembler:adressierung:adressing.png |}} {{ :faecher:informatik:oberstufe:techinf:assembler:adressierung:adressing.png |}}
 +
 +Beantworte die folgenden Fragen:
 +
 +  * Wie groß ist der blaue Speicherbereich (2)?
 +  * Welche Adresse hat die mit (1) bezeichnete "Speicherzelle"?
 +  * Welche  Adresse hat die mit (3) bezeichnete "Speicherzelle"?
 +
 +Mache dir klar, dass die Adressierung durch Offsets erfolgt, weil vor dem Start des Programms nicht feststeht, an welchen absoluten Speicheradressen Daten und Programm bei der Ausführung geladen werden! Man kann sich also vorstellen, dass bei der Deklaration einer Variablen wie ''tabelle'' eine neue "Nulladresse" gespeichert wird, von der aus man sich dann in "Byteschritten" durch den Speicher bewegen kann.
  
 ---- ----
Zeile 135: Zeile 143:
    mov  ebx,1           mov  ebx,1       
    mov  eax,4           mov  eax,4       
-   int :w 0x80        +   int  0x80        
  
    mov  eax,1          mov  eax,1      
Zeile 155: Zeile 163:
                            
    mov EBX, tabelle     ;     mov EBX, tabelle     ; 
-   mov [EBX+4], word 98 ;  +   mov [EBX+2], word 98 ;  
-   ADD EBX,           ; +   add EBX,           ; 
-   MOV [EBX], word 99   ;+   mov [EBX], word 99   
 +    
 +   mov  edx,20     
 +   mov  ecx,tabelle    
 +   mov  ebx,1        
 +   mov  eax,4        
 +   int :w 0x80         
 + 
 +   mov  eax,1       
 +   int  0x80         
 +</code> 
 + 
 +Was muss man an obigem Code ändern, damit die ausgegebene Zeichenkette mit ''abc...'' beginnt. Warum beginnt sie nicht mit ''abc''?  
 + 
 +---- 
 +{{:aufgabe.png?nolink  |}} 
 +=== (A5) === 
 +Was macht der folgende Code? Verfahre wie oben. Ergänze nach den Semikola erklärende Kommentare 
 +<code asm> 
 +section .data 
 +tabelle TIMES 10 DW 97 
 + 
 +section .text 
 +   global _start     
 +_start: 
 + 
 + 
 +   mov ECX, 98        ; 
 +   mov EBX, tabelle   ;  
 +   mov [EBX + 2], ECX ; 
 +   inc ECX            ; 
 +   inc ECX            ; 
 +   add EBX, 8         ; 
 +   mov [EBX], ECX     ;
        
    mov  edx,20        mov  edx,20    
  • faecher/informatik/oberstufe/techinf/assembler/adressierung/start.1632162289.txt.gz
  • Zuletzt geändert: 20.09.2021 20:24
  • von sbel