PDA

View Full Version : GNU assembly x86 - indirizzamento indiretto con registro indice


zio_mangrovia
31-08-2020, 12:03
In ambiente Gnu Assembler con cpu compatibile con la famiglia INTEL x86 a 32 bit, ho un vettore di 10 componenti (da 2 byte ciascuna); l'indirizzo del vettore è passato tramite il registro EBX.
L'istruzione MOV mi da diversi errori che non comprendo, il mio obiettivo è di scorrere il vettore all'infinito:

MOV $0, %ESI
loop: MOV (%EBX)(,%ESI, 2), %AX
INC %ESI
JMP loop

Non comprendo perchè l'istruzione MOV (%EBX)(,%ESI, 2), %EAX restituisce errore durante il processo di compilazione.
Se sostituissi a %EBX un'etichetta predefinita (es. "numero", definita come numero: .WORD 1, 2, 3, 4, ....) tutto funzionerebbe regolarmente (es. MOV numero(,%ESI, 2), %AX )

Se non capisco male l'operando sorgente della MOV dovrebbe essere tramite il contenuto del registro EBX (indirizzo di memoria)+il contenuto del registro ESI*2.
Dove sbaglio?

pabloski
31-08-2020, 12:53
segment-override:signed-offset(base,index,scale)

quindi non puoi fare

MOV (%EBX)(,%ESI, 2), %AX

l'offset non può essere un registro, ma dev'essere una costante letterale

se EBX è la base, dev'essere

MOV (%EBX,%ESI, 2), %AX

zio_mangrovia
31-08-2020, 13:17
segment-override:signed-offset(base,index,scale)
l'offset non può essere un registro, ma dev'essere una costante letterale

se EBX è la base, dev'essere

MOV (%EBX,%ESI, 2), %AX

Grazie 1000, non riuscivo a trovare informazioni in merito.