www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Technische Informatik" - Assembler Befehle
Assembler Befehle < Technische Inform. < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Technische Informatik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Assembler Befehle: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 16:00 Di 18.01.2011
Autor: Parkan

Aufgabe
Angenommen, die folgendenWerte sind in den angegebenen Registern bzw. Speicheradressen gespeichert:

Register Wert
%eax 0x00000100
%ecx 0x00000001
%edx 0x0000000C
Adresse Wert
0x100 0x0000BEEF
0x104 0x000000AC
0x108 0x00000013
0x10c 0x00078900

Überlegen Sie sich, welche Adressen bzw. Register als Ziel der folgenden Befehle ausgewaählt werden
und welche Resultatwerte sich ergeben:

addl %ecx, (%eax)
subl %edx,4(%eax)
imull $16,(%eax,%edx)
incl 8(%eax)
decl %ecx
subl %edx,%eax

Hinweis:
Beim gnu-Assembler steht der Zieloperand rechts, und eine runde Klammer um ein Register bedeutet
einen Speicherzugriff auf die entsprechende Adresse, ggf. mit dem vor der Klammer notierten Byte-
Offset. Zum Beispiel bewirkt
der Befehl: addl %ecx,12(%eax)
die Operation: MEM[0x0000010c] = 0x00078901


Ich möchte erste mal das hier anschauen addl %ecx, (%eax)
Ich hätte es so gemacht.
addl ist die addition
berechnet wird 0 + (%eax)
dann das Ergebnis in %ecx gespeichert.

Aber wenn ich das Beispiel da angucke  addl %ecx,12(%eax) denke das mein Weg falsch ist.

Kann mir jemand erklären wie ich da vorgehen muss?

Gruß
Janina


        
Bezug
Assembler Befehle: Antwort
Status: (Antwort) fertig Status 
Datum: 19:38 Di 18.01.2011
Autor: felixf

Moin Janina!

> Angenommen, die folgendenWerte sind in den angegebenen
> Registern bzw. Speicheradressen gespeichert:
>  
> Register Wert
>  %eax 0x00000100
>  %ecx 0x00000001
>  %edx 0x0000000C
>  Adresse Wert
>  0x100 0x0000BEEF
>  0x104 0x000000AC
>  0x108 0x00000013
>  0x10c 0x00078900
>  
> Überlegen Sie sich, welche Adressen bzw. Register als Ziel
> der folgenden Befehle ausgewaählt werden
>  und welche Resultatwerte sich ergeben:
>  
> addl %ecx, (%eax)
>  subl %edx,4(%eax)
>  imull $16,(%eax,%edx)
>  incl 8(%eax)
>  decl %ecx
>  subl %edx,%eax
>  
> Hinweis:
>  Beim gnu-Assembler steht der Zieloperand rechts, und eine
> runde Klammer um ein Register bedeutet
>  einen Speicherzugriff auf die entsprechende Adresse, ggf.
> mit dem vor der Klammer notierten Byte-
>  Offset. Zum Beispiel bewirkt
>  der Befehl: addl %ecx,12(%eax)
>  die Operation: MEM[0x0000010c] = 0x00078901
>  
> Ich möchte erste mal das hier anschauen addl %ecx, (%eax)
>  Ich hätte es so gemacht.
>  addl ist die addition
>  berechnet wird 0 + (%eax)
>  dann das Ergebnis in %ecx gespeichert.

Wie kommst du auf die 0?

> Aber wenn ich das Beispiel da angucke  addl %ecx,12(%eax)
> denke das mein Weg falsch ist.

Warum?

> Kann mir jemand erklären wie ich da vorgehen muss?

Schreib ein wenig mehr warum du irgendwas meinst, dann kann man dir sagen wo du dich irrst. Wenn du meine beiden Fragen beantwortest kommen wir der Sache wohl naeher.

LG Felix


Bezug
                
Bezug
Assembler Befehle: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:35 Di 18.01.2011
Autor: Parkan


Ok  fange wir an mit

Wie kommst du auf die 0?
Hier bei
addl %ecx, (%eax)
ist doch eine addition vorhanden.  Der erste Wert ist in %eax (oder nicht?) gespeichert und weil kein anderer da steht würde ich sagen es ist die null.

Bei deiner Frage warum ich denk das mein Weg Falsch ist, naja weil ich das gegebene Beispiel nicht nachvollziehen kann bzw nach konstruieren.



Bezug
                        
Bezug
Assembler Befehle: Antwort
Status: (Antwort) fertig Status 
Datum: 01:07 Mi 19.01.2011
Autor: felixf

Moin!

> Ok  fange wir an mit
>
> Wie kommst du auf die 0?
> Hier bei
> addl %ecx, (%eax)
>  ist doch eine addition vorhanden.  Der erste Wert ist in
> %eax (oder nicht?) gespeichert und weil kein anderer da
> steht würde ich sagen es ist die null.

Ok, nochmal ganz langsam von vorne.

Erstmal hast du:

> Register Wert
> %eax 0x00000100
> %ecx 0x00000001
> %edx 0x0000000C
> Adresse Wert
> 0x100 0x0000BEEF
> 0x104 0x000000AC
> 0x108 0x00000013
> 0x10c 0x00078900

Jetzt hast du addl %ecx, (%eax).

Lies dir nochmal den Hinweis durch:

> Beim gnu-Assembler steht der Zieloperand rechts, und eine runde Klammer
> um ein Register bedeutet einen Speicherzugriff auf die entsprechende Adresse,
> ggf. mit dem vor der Klammer notierten Byte-Offset. Zum Beispiel bewirkt
> der Befehl: addl %ecx,12(%eax)
> die Operation: MEM[0x0000010c] = 0x00078901

%eax = 0x100, %eax + 12 = 0x10c, und %ecx = 1
im Speicher unter der Adresse 0x10c stand vorher 0x78900, nun steht da 0x78901

Offensichtlich wurde an der Adresse 0x10c der Wert im Speicher um 1 erhoeht, also um den Wert von %ecx.

Und die Adresse 0x10c berechnet sich aus %eax + 12

Jetzt hast du addl %ecx, (%eax).

Die Adresse ist also %eax + 0 = 0x100

An 0x100 steht vorher der Wert 0xBEEF (siehe Tabelle oben)
Und %ecx hat den Wert 1

Also, was passiert bei addl %ecx, (%eax)?

LG Felix


Bezug
                                
Bezug
Assembler Befehle: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:46 Mi 19.01.2011
Autor: Parkan


MEM[0x0000100] = 0x000BEF0
?


Bezug
                                        
Bezug
Assembler Befehle: Antwort
Status: (Antwort) fertig Status 
Datum: 16:37 Mi 19.01.2011
Autor: felixf

Moin!

> MEM[0x0000100] = 0x000BEF0
> ?

Genau.

Und jetzt versuch dich doch mal an den Aufgaben, die du loesen sollst. Was passiert dort?

LG Felix


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Technische Informatik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.mathebank.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]