Istruzione con registro puntatore

di il
1 risposte

Istruzione con registro puntatore

Sto utilizzando Gnu ASsembler con cpu compatibile con la famiglia INTEL x86 a 32 bit.
Ho un vettore di 10 componenti, ciascuna di dimensione 2 byte, il cui indirizzo viene passato tramite il registro EBX.
Non capisco come l'istruzione MOV non compili, devo scorrere il vettore:
  MOV $0, %ESI
loop:   MOV %EBX(,%ESI, 2), %EAX
           INC %ESI
           JMP loop
Ovviamente in questo caso il codice scorre il vettore all'infinito oltre la sua area di memoria a disposizione, mail punto non è questo.
Non comprendo perchè l'istruzione MOV %EBX(,%ESI, 2), %EAX restituisce errore durante il processo di assembler.
Se sostituissi a %EBX un'etichetta predefinita (es. numero, definita come numero: .WORD 1, 2, 3, 4, ....) tutto funziona regolarmente.

1 Risposte

  • Re: Istruzione con registro puntatore

    Perchè un registro può contenere un valore o un indirizzo e in questo caso tu vuoi indirizzare un vettore!
    per indirizzare un vettore con un registro lo devi porre all'interno delle parentesi.
    ma prima devi prendere l'indirizzo e mettere nel registro che vuoi utilizzare.
    in asm intel x86
    dovresti fare:
    mov ebx,offset vettore
    mov ecx,numero elementi
    a000: mov eax,[ebx] ;per le dword
    mov ax,word ptr [ebx] ; per le word
    mov al,byte ptr [ebx]; per i byte
    inc ebx
    loop a000
    la logica è questa a te la traduzione in Gnu ASsembler
Devi accedere o registrarti per scrivere nel forum
1 risposte