| Autor |
Nachricht |
phreaking
Mitglied
Benutzerprofil
Anmeldungsdatum: 20.01.2002
Beiträge: 399
|
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
|
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
|
Nobuo T Moderator
20:54:00 29.06.2002 Titel: |
|
Zitieren |
Entweder hast du da was falsch verstanden, oder ich jetzt
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 [/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
|
phreaking Mitglied
21:27:00 29.06.2002 Titel: |
|
Zitieren |
| Zitat: | Original erstellt von Nobuo T:
Entweder hast du da was falsch verstanden, oder ich jetzt
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 [/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
|
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
|
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
|
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
|
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
|
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
|
Necromancer Mitglied
13:52:00 25.08.2002 Titel: |
|
Zitieren |
Hmm leider habt ihr ein Register vergessen:
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
|
Nobuo T Moderator
14:19:00 25.08.2002 Titel: |
|
Zitieren |
hmm... Gilt nicht
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
|
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
|
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? |
_________________ ==Mod im Assembler-Forum==
http://z0r.de/2908
|
|
 |
Necromancer
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.08.2002
Beiträge: 24
|
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?  |
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. ] |
|
|
|
 |