Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - Assembler ::  EAX ... AX     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
phreaking
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.01.2002
Beiträge: 399
Beitrag phreaking Mitglied 20:44:00 29.06.2002   Titel:   EAX ... AX            Zitieren

Warum gibt es AX, auf welches man auch über AL und AH zugreifen kann, und EAX, bei dem es nichts wie EAL und EAH gibt? Wo ist der Unterschied zwischen den beiden Registern?

lg, phreaking
Werbeunterbrechung
volkard
Moderator

Benutzerprofil
Anmeldungsdatum: 06.04.2000
Beiträge: 24356
Beitrag volkard Moderator 20:52:00 29.06.2002   Titel:              Zitieren

Zitat:
Original erstellt von phreaking:
Warum gibt es AX, auf welches man auch über AL und AH zugreifen kann, und EAX, bei dem es nichts wie EAL und EAH gibt? Wo ist der Unterschied zwischen den beiden Registern?
lg, phreaking

AX ist Teil von EAX.
ungefär so:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
union
{
   int EAX;
   union
   {
      short AX;
      union
      {
         char AH;
         char AL;
      }
   }  
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
union
{
int EAX;
union
{
short AX;
union
{
char AH;
char AL;
}
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
union
{
   int EAX;
   union
   {
      short AX;
      union
      {
         char AH;
         char AL;
      }
   }  
}

_________________
http://www.venganza.info/
plonk fürs Forum v1.02
Nobuo T
Moderator

Benutzerprofil
Anmeldungsdatum: 09.10.2001
Beiträge: 4737
Beitrag Nobuo T Moderator 20:54:00 29.06.2002   Titel:              Zitieren

:confused: Entweder hast du da was falsch verstanden, oder ich jetzt :D
eax ist ein 32Bit Register ax hat 16Bit al und ah haben nur 8.
al und ah sind in ax und ax ist wiederum in eax enthalten. Das verdeutlicht diese Skizze vielleicht etwas besser:

Bits 0-7 8-15 16-31
al ah /
\ax/ /
\__eax___/
[edit:]Zu langsam :D [/edit]

[ Dieser Beitrag wurde am 29.06.2002 um 21:07 Uhr von Nobuo T editiert. ]

_________________
==Mod im Assembler-Forum==

http://z0r.de/2908
phreaking
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.01.2002
Beiträge: 399
Beitrag phreaking Mitglied 21:27:00 29.06.2002   Titel:              Zitieren

Zitat:
Original erstellt von Nobuo T:
:confused: Entweder hast du da was falsch verstanden, oder ich jetzt :D
eax ist ein 32Bit Register ax hat 16Bit al und ah haben nur 8.
al und ah sind in ax und ax ist wiederum in eax enthalten. Das verdeutlicht diese Skizze vielleicht etwas besser:

Bits 0-7 8-15 16-31
al ah /
\ax/ /
\__eax___/
[edit:]Zu langsam :D [/edit]

[ Dieser Beitrag wurde am 29.06.2002 um 21:07 Uhr von [qb]Nobuo T
editiert. ][/QB]

Soweit habe ich das ja auch verstanden. Aber warum verwendet man manchmal einfach nur ax, bx, cx, usw. und manchmal nur eax, ebx, ecx, usw, und warum kommt das eigentlich nie gemischt in Programmen vor (ich habe das zumindest bis jetzt noch nie gesehen)?
Meine Frage bzgl. al sowie ah:
Code:
| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|
|     AL    |     AH    |                       |
|           AX          |                       |
|                      EAX                      |
Code:
| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|
| AL | AH | |
| AX | |
| EAX |
Code:
| 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15|
|     AL    |     AH    |                       |
|           AX          |                       |
|                      EAX                      |

Mittels AX kann (könnte) ich jetzt ja quasi auf den LOW-Teil von EAX zugreifen. Aber es gibt doch keine Möglichkeit, "direkt" auf den HIGH-Teil von EAX zuzugreifen (wie das eben bei AX mittels AH möglich ist), oder? Warum eigentlich nicht?

lg, phreaking
Nobuo T
Moderator

Benutzerprofil
Anmeldungsdatum: 09.10.2001
Beiträge: 4737
Beitrag Nobuo T Moderator 22:00:00 29.06.2002   Titel:              Zitieren

In 32Bit-Anwendungen werden meist nur 32Bit Register verwendet, da 1. zum Addressieren eh 32Bit Register benoetigt werden und 2. OpCodes mit 16Bit-Register ein Code Prefix benoetigen (66h oder 67h)
Bei 16Bit-Anwendungen ist das genau andersrum: OpCodes mit 32Bit-Registern brauchen dieses Prefix.
Es gibt aber eigentlich auch genug Grenzfaelle, in denen 16Bit und 32Bit Register benutzt werden. Ich habe das aber bisher nur bei Windows-Programmen, die mit Assembler geschrieben wurden, oder DOS-Programmen gesehen :confused:

Warum es keine Moeglichkeit gibt, den high Bereich von eax direkt anzusprechen habe ich mich auch schon oft genug gefragt. Kann man wohl nichts machen :o ;)

_________________
==Mod im Assembler-Forum==

http://z0r.de/2908
malfunction
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.04.2001
Beiträge: 664
Beitrag malfunction Mitglied 11:02:00 30.06.2002   Titel:              Zitieren

Also soweit ich mich erinnere gibt es da etliche 32-bit Programme, die auch die 16-bit Register und auch die darin enthaltenen 8-bit Register verwenden. Man schaue sich doch mal ein normales Programm im Disassembler an. ;)

Warum man den höherwertigen Teil von EAX nicht direkt ändern kann? Nun, anfangs habe ich mich das auch gefragt. Aber während längerer Programmierpraxis habe ich dann festgestellt, dass ich eigentlich so gut wie nie den höherwertigen Teil eines 32-bit Registers direkt manipulieren wollte.
phreaking
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.01.2002
Beiträge: 399
Beitrag phreaking Mitglied 10:18:00 16.08.2002   Titel:              Zitieren

Naja, danke für eure Antworten. Eigentlich kann ich dem letzten Satz von malfunction ja auch nur beipflichten, denn die Frage war eher theoretisch gemeint!

greetz, phreaking
Bigor
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.05.2001
Beiträge: 606
Beitrag Bigor Mitglied 22:20:00 16.08.2002   Titel:              Zitieren

das ist ja aber auch nich sooo schwer

rol eax,16
mov ax,bla
rol eax,16

_________________
Windows hat 32 bit und die werde ich ALLE trinken;);)
-> bin ich(bigor92)
phreaking
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.01.2002
Beiträge: 399
Beitrag phreaking Mitglied 21:24:00 17.08.2002   Titel:              Zitieren

Das es nicht Unmöglich ist, die Zuweisung über einen "Umweg" durchzuführen, war mir sowieso klar (es ginge auch über ein shiften und eine bitweise Oder-Verknüpfung). Die Frage war ja auch nur, warum es keinen direkten Wege gibt!
Aber trotzdem Danke!

greetz, phreaking
Necromancer
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.08.2002
Beiträge: 24
Beitrag Necromancer Mitglied 13:52:00 25.08.2002   Titel:              Zitieren

Hmm leider habt ihr ein Register vergessen:

:D

0......63
\_RAX__/

[ Dieser Beitrag wurde am 25.08.2002 um 13:53 Uhr von Necromancer editiert. ]
Nobuo T
Moderator

Benutzerprofil
Anmeldungsdatum: 09.10.2001
Beiträge: 4737
Beitrag Nobuo T Moderator 14:19:00 25.08.2002   Titel:              Zitieren

hmm... Gilt nicht :p
RAX ist kein x86-Intel-Standard.
Sonst koennte ich ja hier auch noch mit Registern vom 65c816 anruecken ;)

_________________
==Mod im Assembler-Forum==

http://z0r.de/2908
TriPhoenix
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.08.2001
Beiträge: 1530
Beitrag TriPhoenix Mitglied 17:49:00 25.08.2002   Titel:              Zitieren

Zitat:
Original erstellt von Nobuo T:
RAX ist kein x86-Intel-Standard.


Ich mag mich irren, aber ist das nicht ein ganz normales IA-64-Register? Dann ists von Intel, von IA-32 hast du ja nichts gesagt ;)
Nobuo T
Moderator

Benutzerprofil
Anmeldungsdatum: 09.10.2001
Beiträge: 4737
Beitrag Nobuo T Moderator 18:09:00 25.08.2002   Titel:              Zitieren

Hast recht, das ist ein IA-64-Register.
und ich habe nichts von einer 32Bit-Begrenzung gesagt ;)
auch nicht, dass dieser Standard nicht von Intel waere... Aber gehoeren die entsprechenden Prozzies noch zur x86(Pentium)-Serie :confused:

Was solls: es ging hier urspruenglich mal um eax und ax. => 32Bit
Ausserdem: wer benutzt heute schon solche 64Bitter privat? :p

_________________
==Mod im Assembler-Forum==

http://z0r.de/2908
Necromancer
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.08.2002
Beiträge: 24
Beitrag Necromancer Mitglied 11:46:00 26.08.2002   Titel:              Zitieren

Zitat:
Original erstellt von Nobuo T:
Hast recht, das ist ein IA-64-Register.


Ist ein x86-64 Register (AMD Opteron/Clawhammer).

Zitat:
Was solls: es ging hier urspruenglich mal um eax und ax. => 32Bit
Ausserdem: wer benutzt heute schon solche 64Bitter privat? :p


Ende dieses Jahres soll der Clawhammer kommen und es gibt immer private Leute , die sich sowas leisten.

[ Dieser Beitrag wurde am 26.08.2002 um 11:46 Uhr von Necromancer editiert. ]
C/C++ Forum :: FAQ - Assembler ::  EAX ... AX   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.