Operazioni in assembly

di il
6 risposte

Operazioni in assembly

Ciao ragazzi scusate ma ho bisogno di aiuto riguardo un esercizio in assembly 8088.
il testo è questo:
In un 8088, se i registri di segmento contengono i seguenti valori: DS=0 SS=1 CS=2 ES=3
ed i registri IP, SP, BP, BX, DI contengono tutti il valore 2,
allora, supponendo che ciascuna delle seguenti istruzioni sia eseguita isolatamente, per ciascuna istruzione dire se:
- ciascuna delle seguenti istruzioni sovrascrive qualche locazione di memoria RAM?,
- se l’istruzione sovrascrive la memoria, qual è l’indirizzo fisico di inizio del blocco di due bytes che viene soprascritto?
MOV BX, DI
MOV [BX], DI
MOV [BP], DI
MOV [BX+2], DI

riuscite a spiegarmi come funziona e come funziona la ricerca dell'indirizzo fisico e dell'offset?
Grazie in anticipo Vi prego aiutatemi

6 Risposte

  • Re: Operazioni in assembly

    In che senso "ricerca"? Si tratta di memoria segmentata, in un mondo nel quale i registri erano ampi 16 bit (al massimo), per indirizzare più memoria di 64K in quella che era la modalità reale.

    Oggi funziona (grosso modo) in maniera equivalente, solo che gli offset sono estesi a 32 o 64 (in realtà un po' meno, ma lasciamo stare) bit

    Cosa, in particolare, ti turba? Come funziona una memoria segmentata?
  • Re: Operazioni in assembly

    Come riesco a trovare l'indirizzo fisico nei 4 casi di quel esercizio

    se riesci a spiegarmi come funziona una memoria segmentata ti sarei grato
  • Re: Operazioni in assembly

    Come si calcola l'indirizzo fisico e come si trova offset , quando un istruzione sovrascrive una locazione di memoria RAM
  • Re: Operazioni in assembly

    È il contrario: dati base e offset calcoli l'indirizzo fisico della memoria.
    Normalmente (vado a memoria, saranno 25 anni che non scrivo programmi a 16 bit ;-D) il bus indirizzi è a 20 bit, quindi con offset a 16bit avrai basi (segmenti) di 4 bit.

    In sostanza giustapponi la base all'offset ed otterrai l'indirizzo fisico; analogamente moltiplichi per 16 il segmento e ci sommi l'offset (nell'esempio di 4+16 bit)

    Ricorda inoltre nel tuo esempio che

    BX registro generale
    BP base pointer dello stack
    DI indice/puntatore
  • Re: Operazioni in assembly

    Dove lo prendo offset?
  • Re: Operazioni in assembly

    ale_1095 ha scritto:


    dove lo prendo offset?
    Dipende. Se ti hanno dato questo esercizio, dovresti sapere che quel genere di processori hanno vari modi di indirizzamento (5, 3 o 2 a seconda di come li raggruppi). In particolare, nell'esempio si usa il modo diretto (mi pare, ma sui nomi potrei fare confusione), che prevede che l'offset sia memorizzato nel registro incluso tra parentesi quadre.
Devi accedere o registrarti per scrivere nel forum
6 risposte