| Autor |
Nachricht |
freecrac
Unregistrierter
|
freecrac Unregistrierter
12:04:15 13.04.2012 Titel: |
|
Zitieren |
| NNN schrieb: | Der push Befehl funktioniert in einem 32 Bit Programm nur mit 32 Bit Werten = DWORD. Also WORD in DWORD packen usw.
Wenn Du 16 Bit Programme schreibst, ist das anders - da kann man nur WORD (16 Bit) mit einem push Befehl auf den Stack legen. |
Und wie möchtest du dann mit einem 32 Bit Programm ein "push segreg" machen?
http://www.fermi.mn.it/linux/quarta/x86/push.htm
| Zitat: |
IF StackAddrSize = 16
THEN
IF OperandSize = 16 THEN
SP := SP - 2;
(SS:SP) := (SOURCE); (* word assignment *)
ELSE
SP := SP - 4;
(SS:SP) := (SOURCE); (* dword assignment *)
FI;
ELSE (* StackAddrSize = 32 *)
IF OperandSize = 16
THEN
ESP := ESP - 2;
(SS:ESP) := (SOURCE); (* word assignment *)
ELSE
ESP := ESP - 4;
(SS:ESP) := (SOURCE); (* dword assignment *)
FI;
FI;
Description:
PUSH decrements the stack pointer by 2 if the operand-size attribute of the instruction is 16 bits; otherwise, it decrements the stack pointer by 4. PUSH then places the operand on the new top of stack, which is pointed to by the stack pointer.
|
Hinweis:
Der Unterschied zwischen dem 32Bit-Mode und dem 16 Bit-Mode auf einem Intel 80686+ liegt einzig und alleine in der Bedeutung/Verwendung der Operandsize/Registersize/Adressize-Prefixe.
So ist es auch im 16 Bit-Mode möglich 32 Bit-Register/32 Bit-Adressen(bis zu 4 GiB)/32 Bit-Operationen zu verwenden und im 32 Bit-Mode ist es möglich 16 Bit-Register/16 Bit-Adressen/16 Bit-Operationen zu verwenden.
Dirk |
|
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum 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.
|
|
|
|
|