Adressierungsproblem
-
Hi, ich steh gerad ein wenig im Dunkeln.
Ich hab ein 2-dimensionales Array sagen eine 4*3 Matrix.
Nun will ich die Adresse eines bestimmente Elements in der Matrix.
Nur wie komme ich da jetzt dran.Ich habs mal mit
mov esi, [ebp + 28 + ebx * 8 + ecx * 8]
versucht, wobei Spalte bzw Zeile in EBX und ECX stehen sollen.
Aber der * geht dabei nicht.
Gibts da einen Ausweg?Ich bedanke mich schonmal!
-
Nehmen wir an, das Array sieht so aus (4*3):
array db 41h, 42h, 43h, 44h db 45h, 46h, 47h, 48h db 49h, 4Ah, 4Bh, 4Ch
Um von der Adresse 'Array' zu einem Feld zu gelangen müssen wir 'Zeile*4' und 'Spalte' hinzuaddieren. Wobei bei (0,0) angefangen wird. Im Beispiel wäre 47h also in Zeile 1 und Spalte 2. Das heißt: Adresse = Array + Zeile*4 + Spalte = Array + 1*4 + 2 = Array + 6. Und Array + 6 ist ja genau die Adresse der 47h. Wenn in ebx die Zeile und in ecx die Spalte steht, lautet der Befehl so:
mov esi, [array+ebx*4+ecx]
-
mal etwas anders erklaert:
Wenn die Dimensionen Deiner Matrix und der dazugehoerige Datentyp bekannt sind,
kannst Du die Adressen waerend des Assemblierens ausrechnen lassen.Kleines Beispiel fuer marix 3*4 (dd):
DIM2 equ 3 D4x3 macro a, b (a*DIM2+b)*(sizeof dd) endm .data matrix dd 4*3 dup (0) ... .code mov esi, D4x3(1, 2)+ offset matrix ; entspricht Pseudocode C: mov esi,&matrix[1][2] ... ;dto. mov edi, offset matrix mov esi, [edi+D4x3(1,2)]
mfg