Ragazzi mi aiutate a scrivere questa condizione ?

di il
5 risposte

Ragazzi mi aiutate a scrivere questa condizione ?

Ho iniziato da poco a programmare con l'assembly e sto usando asim, mi hanno dato questo esercizio :
1- IF indice ==12
then (locazione di memoria ($8200 + indice))=D3- 1
else (locazione di memoria ($8100 + indice))=D3*2

Ho pensato di implementarlo così:
 . . .
CMPI.L #12,INDICE      *confronta 12 con indice
BNE      SKIP                *salta  se diverso da 12
ADDQ.L #1,INDICE       *esegui se indice=12  
All'inzio dovrei mettere locazione di memoria ($8100 + indice))=D3*2
e dopo
ADDQ.L
devo mettere (locazione di memoria ($8100 + indice))=D3*2

solo che non so scriverlo in assembly , potete aiutarmi ?

5 Risposte

  • Re: Ragazzi mi aiutate a scrivere questa condizione ?

    Ciao
    allora per quanto riguarda l'addizione devi prima caricarti l'indirizzo in un registro ed esso si fa cosi
    MOVE.W #$8200,A2
    ADDA.W #INDICE,A2
    nel caso prendiamo vera che indice=12 dovrai fare
    SUB.W #1,D3 ; in alternativa puoi usare ADD.W #-1,D3
    MOVE D3,A2
    
    nel caso la condizione non sia vera avremo che indice <>12
    in questo caso le cose si complicano leggermente perchè se operi con processori 68020 o successivi potrai usare l'istruzione MULS mentre con processori precedenti la MULS te la devi creare.
    per quanto riguarda la locazione di memoria usa lo stesso sistema del caso indice=12
    moltiplicazione caso 68020 o successivi
     MULS D3,D3
    MOVE D3,A2
    moltiplicazione caso 68000 e 68010
    VOLTE DC.W 2
    MULTY CLR.W DO 
    MOVE.W VOLTE,D1
    CICLO ADD D3,D0
    SUB.W #1,D1 ; in alternativa puoi usare ADD.W #-1,D1
    BNE CICLO
    FATTO MOVE DO,A2
    ti ho messo le label MULTY e FATTO al fine di farti capire da dove inizia e dove finisce la routine che con qualche piccolo accorgimento puoi trasformare in una subroutine.
    ma visto che stai ancora all'inizio non ti spiego per non confonderti le idee.
    spero di esserti stato d'aiuto
  • Re: Ragazzi mi aiutate a scrivere questa condizione ?

    Ciao innanzitutto ti ringrazio per la risposta e per la disponibilità.
    Potrebbe funzionare implementato cosi ?
    
    ... 
    CMPI.W #12,INDICE      *confronta 12 con indice
    BNE      SKIP                *salta  se diverso da 12
    MOVE.W #$8200,A2
    ADD.W #INDICE,A2
    SUB.W #1,D3 ; 
    MOVE D3,A2
    ADDQ.L #1,INDICE       *esegui se indice=12 
    MOVE.W #$8200,A2
    ADD.W #INDICE,A2
    MULS.W #2,D3
    MOVE D3,A2
    ...
    
  • Re: Ragazzi mi aiutate a scrivere questa condizione ?

    Ciao
    ci siamo quasi purtroppo ci sono ancora errori
    perchè usi
    ADDQ.L #1,INDICE 
    se indice è una word ?
    la sintassi,in questo caso, e
    ADD.w #1,INDICE
    per farti capire ti riorganizzo il tutto
    ... *routine di gestione 
    CMPI.W #12,INDICE      *confronta 12 con indice
    BNE      SKIP                *salta  se diverso da 12

    cimmiv ha scritto:


    1- IF indice ==12 then (locazione di memoria ($8200 + indice))=D3- 1
    MOVE.W #$8200,A2 *traduzione del then
    ADD.W #INDICE,A2
    SUB.W #1,D3 ;
    MOVE D3,A2
    *qui manca la condizione di fine
    *puoi comodamente mettere un salto alla fine del programma

    cimmiv ha scritto:


    else (locazione di memoria ($8100 + indice))=D3*2
    * manca la Label
    MOVE.W #$8200,A2 *realizzazione del else
    ADD.W #INDICE,A2
    MULS.W #2,D3
    MOVE D3,A2
    dopo ciò o metti la fine o metti un salto alla routine di gestione.
    ricordati che le struture if then else in assembly e come se avessero questa struttura:
    if condizione (se è falsa) salta ad una label
    ............ ; operazioni del then
    .............
    salta o alla fine o alla routine di gestione della condizione
    label di condizione falsa
    ............ ; operazioni del then
    .............
    salta o alla fine o alla routine di gestione della condizione
    << se successivamente c'è la fine e si vuol terminare allora non serve mettere il salto.>>
    spero di esserti stato di aiuto
  • Re: Ragazzi mi aiutate a scrivere questa condizione ?

    Ti ringrazio nuovamente per la tua disponibilità , seguendo la tua spiegazione e con un manuale aperto spero di aver trovato la soluzione :
    
      org $8000
    indice:  dc.w 8
    start:
               cmpi.w #12,indice
               bne else 
               move.w #$8200,a2
               add.w #indice,a2
               sub.w #1,d3
              move d3,a2
               bra fine
    else: move.w #$8200,a2
            add.w   #indice,a2
            muls.w #2,d3
    fine: end start 
    
  • Re: Ragazzi mi aiutate a scrivere questa condizione ?

    Allora
    se lo devi eseguire una sola volta cosi come è va bene.
    ma se lo devi eseguire fino a che indice=12
    ci manca ancora qualcosa.
    vediamo se riesci a renderlo iterativo
Devi accedere o registrarti per scrivere nel forum
5 risposte