Nu är det ju så att det funkar lite speciellt med arrayer i asm...
För att komma åt ett värde, måste du antingen använda en konstant (inte en variabel), eller ett av följande register: BX, SI, DI, BP (BP har dock SS som standard segment, så vill du komma åt arrayen i DS måste du använda DS:[BP]). BX och BP går även att kombinera med SI och DI (BX+SI), och du kan även lägga till en konstant (BX+1 eller BX+SI+1).
Sedan är arrayer 0 baserade, dvs definierar du en array som DB 25 dup(0), kommer man åt den med 0-24.
Så... Om du har följande , och vill komma åt värdet i arrayen som index pekar på (index lär väl ändras nånstans i koden...)
arr DB 25 dup(0)
index DW 0
...
mov bx,index
mov al,[bx+arr] (eller "mov al,arr[bx]", det är vilket som...)
(mov al,[index+arr] fungerar alltså inte... i vissa kompilatorer går det igenom, men det får inte den effekt man tänker sej)
om du istället vill använda BP, blir det
mov al,DS:[BP+arr]
Vill du använda dej av en konstant position i arrayen kan du antingen göra
plats EQU 5
mov al,[arr+plats] (eller "mov al,arr[plats]")
eller
mov al,[arr+5] (mov al,arr[5])
Heh, hoppas det blev lite klarare