error: invalid effective address

11/07/2010 - 19:52 von Jens Kallup | Report spam
Hallo,

siehe Zopic, betreffende Stellen sind mkiert ...
wie kann man das mit nasm lösen?

L52:
fld qword [_i]
fstp qword [esp]
; prüfen ob Daten stimmen ...
mov dword eax, [_aalpha_AsmArrayListe]
mov dword ebx, [eax + esp * 16 + 0] ; <--
cmp ebx, 1 ; if expr?
jnz near Lb52
mov dword ebx, [eax + esp * 16 + 8] ; <--
mov dword ecx, [eax + esp * 16 + 12] ; <--
mov dword [_varr_expr ], ebx
mov dword [_varr_expr +4], ecx
mov dword [_varr_vartype], 1
jmp near Lb53
Lb52:
mov dword ebx, [eax + esp * 16 + 8] ; <--
mov dword [_varr_string], ebx
mov dword [_varr_vartype], 2
Lb53:


Gruß
Jens
 

Lesen sie die antworten

#1 Jan Seiffert
12/07/2010 - 02:13 | Warnen spam
Jens Kallup schrieb:
Hallo,

siehe Zopic, betreffende Stellen sind mkiert ...
wie kann man das mit nasm lösen?

L52:
fld qword [_i]
fstp qword [esp]
; prüfen ob Daten stimmen ...
mov dword eax, [_aalpha_AsmArrayListe]
mov dword ebx, [eax + esp * 16 + 0] ; <--



Garnicht.
wie ich schon schrieb ist nur *1,*2,*4 und *8 moeglich. Alles andere
unterstuetzt die CPU nicht (leider auch kein *16 in long mode...).
Du musst das per Hand aufloesen.

Ausserdem ist esp * 16 bullshit.
Ausser den gaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanz seltenen faellen wo in
esp mal nicht der Stackpointer ist (was man schon mit Gewalt herbei fuehren
muss, besser innerhalb eines cli), ergibt das nur Muell. Warum willst du den
Stackpointer mit 16 multiplizieren?

Du willst warsch. eher:
mov dword eax, [_aalpha_AsmArrayListe] ; array pointer laden
mov dword edx, [esp] ; index laden
mov dword ebx, [eax + edx * 16 + 0] ; indexed load -> geht nich

Was immer noch nicht geht (wegen den 16), aber schon eher Sinn ergibt.
Also:
mov dword eax, [_aalpha_AsmArrayListe] ; array pointer laden
mov dword edx, [esp] ; index laden
shl edx, 4 ; index mal 16
mov dword ebx, [eax + edx + 0] ; indexed load

[snip]


Gruß
Jens


Gruss
Jan

Elwood: It's 106 miles to Chicago, we got a full tank of gas,
half a pack of cigarettes, it's dark, and we're wearing sunglasses.
Jake: Hit it.

Ähnliche fragen