Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:techinf:assembler:adressierung:start [20.09.2021 18:23] – [Indirekte Speicheradressierung] sbel | faecher:informatik:oberstufe:techinf:assembler:adressierung:start [21.09.2021 07:01] (aktuell) – sbel | ||
---|---|---|---|
Zeile 16: | Zeile 16: | ||
BYTE_VALUE | BYTE_VALUE | ||
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 |
</ | </ | ||
Zeile 60: | Zeile 60: | ||
<code asm> | <code asm> | ||
Zeichenkette DB ' | Zeichenkette DB ' | ||
- | Haeufigkeit | + | Haeufigkeit |
</ | </ | ||
Zeile 68: | Zeile 68: | ||
</ | </ | ||
- | nicht zweckmäßig, | + | nicht zweckmäßig, |
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 | ||
</ | </ | ||
- | wird nun auch das Feldelement | + | wird nun auch das Feldelement 3 angesprochen, |
Zeile 103: | Zeile 103: | ||
| | ||
| | ||
- | | + | |
| | ||
Zeile 112: | Zeile 112: | ||
{{: | {{: | ||
=== (A2) === | === (A2) === | ||
+ | Das folgede Bild zeigt ein Speicherschema zum obigen Code. | ||
+ | {{ : | ||
+ | |||
+ | Beantworte die folgenden Fragen: | ||
+ | |||
+ | * Wie groß ist der blaue Speicherbereich (2)? | ||
+ | * Welche Adresse hat die mit (1) bezeichnete " | ||
+ | * Welche | ||
+ | |||
+ | 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 '' | ||
---- | ---- | ||
{{: | {{: | ||
- | === (A2) === | + | === (A3) === |
Was macht der folgende Code? Verfahre wie oben. Erläutere, was an den mit EINS und ZWEI markierten Stellen passiert. | Was macht der folgende Code? Verfahre wie oben. Erläutere, was an den mit EINS und ZWEI markierten Stellen passiert. | ||
Zeile 133: | Zeile 143: | ||
| | ||
| | ||
- | | + | |
| | ||
Zeile 141: | Zeile 151: | ||
---- | ---- | ||
{{: | {{: | ||
- | === (A3) === | + | === (A4) === |
Was macht der folgende Code? Verfahre wie oben. Ergänze nach den Semikola erklärende Kommentare | Was macht der folgende Code? Verfahre wie oben. Ergänze nach den Semikola erklärende Kommentare | ||
Zeile 153: | Zeile 163: | ||
mov EBX, tabelle | mov EBX, tabelle | ||
- | mov [EBX+4], word 98 ; | + | mov [EBX+2], word 98 ; |
- | ADD EBX, 4 ; | + | add EBX, 2 ; |
- | MOV [EBX], word 99 ; | + | mov [EBX], word 99 ; |
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | int :w 0x80 | ||
+ | |||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Was muss man an obigem Code ändern, damit die ausgegebene Zeichenkette mit '' | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (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 | ||
+ | | ||
+ | _start: | ||
+ | |||
+ | |||
+ | mov ECX, 98 ; | ||
+ | mov EBX, tabelle | ||
+ | mov [EBX + 2], ECX ; | ||
+ | inc ECX ; | ||
+ | inc ECX ; | ||
+ | add EBX, 8 ; | ||
+ | mov [EBX], ECX ; | ||
| |