Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [ASM] Dubbio su indirizzamento di memoria

    Sto lavorando a livello universitario con il linguaggio ASM della GNU.
    Mi sono imbattuto in programmi che compilavano ma creavano risultati sbagliati a causa di mie possibili incomprensioni di alcuni costrutti.
    Il mio principale dubbio risiede in una forma di indirizzamento di memoria.


    Faccio un esempio veloce:

    es1:

    MOVL 12(%EBP, %EIP, 4), %ECX


    e


    es2:

    MOVL 12(%EBP), %EAX
    MOVL (%EAX, %EIP, 4), %ECX


    ponendo il caso che 12(%EBP) sia l'indirizzo del vettore "int v[5]", io utilizzo "12(%EBP, %EIP, 4)" e incremento ciclicamente %EIP per scorrere all'interno degli elementi del vettore che hanno INDIRIZZO = [12 + %EBP + (%EIP*4)], con 4 che ovviamente rappresenta la grandezza di ogni elemento (INT o LONG)


    mi è capitato però di vedere usare anche:

    MOVL 12(%EBP), %EAX
    MOVL (%EAX, %EIP, 4), %ECX


    nella mia ignoranza ho pensato che fossero due modi diversi per scrivere la stessa cosa, ma compilando i risultati erano diversi e quindi mi viene ovvio da pensare che pensavo male.
    Qualcuno potrebbe perfavore spiegarmi che differenze ci sono tra "es1" e "es2"?

    Grazie a tutti per l' attenzione!

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    EIP è il PC su x86 molto probabilmente hai visto ESP. Se nn sbaglio
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    si vabè alla fine uno vale l'altro è una convenzione. Poteva esserci anche %EDX, oppure bastava fare una PUSH %EIP per poi ripristinarlo con POP %EIP. Il problema è l'uso di quel costrutto che non mi è chiaro.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Originariamente inviato da siciliano87
    Il problema è l'uso di quel costrutto che non mi è chiaro.
    Sul libro di testo su cui stai studiando non sono spiegati i vari indirizzamenti di memoria?

  5. #5
    Non questo. Per questo motivo chiedo a voi che avete più esperienza.
    Sul libro c'è solo:

    CODICE (%reg)
    CODICE num(%reg)
    CODICE (%reg, %reg0)

    e manca proprio quello, ma in giro ho trovato che:

    CODICE (%reg, %reg0, 4)

    vuol dire reg+(reg0*4)

    e su

    CODICE num(%reg, %reg0, 4)

    non ho trovato nulla.

    __________________________________________________ _____
    Il punto è che mi piacerebbe sapere che differenza pratica hanno:

    es1:

    MOVL 12(%EBP, %EIP, 4), %ECX


    e


    es2:

    MOVL 12(%EBP), %EAX
    MOVL (%EAX, %EIP, 4), %ECX


    che ancora non mi è chiara!
    Grazie comunque per le risposte

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.