x86 Befehle mit Adressen

Hallo zusammen,

der x86 Assemblersatz hat ja verschiedene Befehle, denen eine Adresse mit übergeben wird. Da wäre zum Beispiel der push Befehl, der auf der einen Seite eine ganz normale Zahl auf den Stack legen kann, und auf der anderen Seite ja auch einen Offset.
Mich würde nun interessieren, welche Befehle mit einer Addresse als Argument aufgerufen werden können und wie ich zu diesen Befehlen den primary opcode finde. Bei dem schon oben genannten Beispiel mit push ist das glaub ich so:

Code:
6Ah push  10h; Hier wird eine Zahl auf den Stack gelegt
68h push offset 401000; 68h legt eine Addresse auf den Stack

Ich hoffe ich hab das verständlich beschrieben. Über hilfe würde ich mich sehr freuen.

grüße
seux
 
Ich glaube da hast du etwas falsch verstanden. Es werden beim Assembler keine Datentypen unterschieden im Sinne von ("Zahl" / Adresse). Es werden nur Datengrößen unterschieden.
0x6A pusht ein BYTE auf den Stack und 0x68 ein WORD bzw. DWORD (Je nach dem ob es im 16bit oder 32bit Modus eines Prozessors ausgeführt wird. Der Stackpointer dekrementiert sich in beiden Fällen um ein WORD bzw. DWORD)

Das kannst du auch hier schön nachschlagen:
coder32 edition | X86 Opcode and Instruction Reference 1.11

Das Keyword "offset" wird in manchen Assemblerdialekten dafür benutzt um die Adressberechnung von deklarierten Daten nicht selbst tun zu müssen.
Pseudo-Beispiel:
Code:
.data
 sTest db "Test",0
.code
entry:
 push offset sTest
 call print

Ob man nun in deinem Beispiel
push offset 401000
oder
push 401000
schreibt, ist also völlig egal.
 
Zurück
Oben