Visualizzazione risultati 1 fino 6 di 6

Discussione: [Assembly] Divisione 8 bit - intel 8086

  1. #1
    Guest

    Exclamation [Assembly] Divisione 8 bit - intel 8086

    Salve a tutti, oggi il prof. ci ha assegnato la creazione di un programma che faccia la divisione a 8 bit tra due numeri e stampi quoziente e resto.
    Non abbiamo ancora fotto i cicli e poi per adesso lavoriamo solo sui numeri compresi tra 0 e 9
    Vi posto il mio codice (che non risulta) anche se per adesso sto vedendo di riuscire a stampare anche solo il quoziente.
    Codice:
    TITLE Divisione
    .MODEL SMALL
    .STACK 100h
    .DATA
    divid DB "INSERIRE DIVIDENDO: ","$"
    divis DB "INSERIRE DIVISORE: ","$"
    invio DB "Premere un tasto per continuare...","$"
    acapo DB "",10,13,"$"
    ris DB "QUOZIENTE: ","$"
    num DB ?
    .CODE
    .STARTUP
    	MOV DX,OFFSET divid
    	MOV AH,09h
    	INT 21h
    MOV  AH,01h
    INT 21h
    SUB num,48
    MOV AL,num
    	MOV DX,OFFSET acapo
    	MOV AH,09h
    	INT 21h
    	MOV DX,OFFSET divis
    	MOV AH,09h
    	INT 21h
    MOV AH,01h
    INT 21h
    SUB num,48
    	DIV num
    	ADD num,48
    	MOV DX,OFFSET acapo
    	MOV AH,09h
    	INT 21h
    	MOV DX,OFFSET acapo
    	MOV AH,09h
    	INT 21h
    MOV DX,OFFSET ris
    MOV AH,09h
    INT 21h
    ;stampa risultato
    MOV DL, num
    MOV AH,02h
    INT 21h
    	MOV DX,OFFSET acapo
    	MOV AH,09h
        INT 21h
    	MOV DX,OFFSET acapo
    	MOV AH,09h
    	INT 21h
    MOV DX,OFFSET invio;
    MOV AH,09h
    INT 21h
    MOV AH,01h
    INT 21h
    ;RITORNO AL SO
    MOV AH,4Ch
    INT 21h
    END
    Il prof. e' stato molto vago sul come farlo comunque preferirei un aiuto nel ragionarci anziché copiare il codice senza capire
    Comunque non mi da errori in compilazione ma non mi restituisce il risultato corretto..
    PS: Opero su un SO Windows 32bit

    Thanks..

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Premetto che ho studiato l'8088, e non questo. Comunque, penso siano equivalenti a livello di IA.

    Non potendo usare i cicli, avete fatto però i jump? perché altrimenti non saprei con precisione come fare.

    Nel sorgente sopra come hai ragionato? (non ho voglia di mettermi a ragionare riga per riga :P). In ogni caso, ho visto che usi DIV. Adesso purtroppo non ho il libro sotto mano, ma guardando un attimo in internet, sembra la divisione . Fai la divsione con la divisione? .

    (curiosità):
    -cosa è l'interruzione 21h?
    -
    Codice:
    divid DB "INSERIRE DIVIDENDO: ","$"
    Cosa significa questa riga? (e le altre simili).

    Ciao!
    Ultima modifica di alemoppo : 02-02-2013 alle ore 21.35.16

  3. #3
    Guest

    Predefinito

    Abbiamo iniziato a programmare da poco e l'istruzione jump abbiamo solo letto alcune cose riguardanti il processore ma non abbiamo mai fatto sintassi e cose varie..
    Praticamente io faccio leggere un numero "num" e questo lo assegno (dopo avergli sottratto 48) al registro AL perché, a quanto ho capito dall'accenno fatto dal prof, il DIV prende la locazione di memoria (in questo caso) "num" (che ha ricevuto in input poco prima e a cui ho levato 48) e come denominatore imposta il contenuto presente nel registro AL (sarebbe il "num" letto prima ancora) e poi assegnato alla locazione "num" il valore della divisione, aggiungo 48 e poi stampo..
    Non so se sono stato chiaro, ma il problema e che ottengo simboli che non hanno nulla a che vedere con il mio risultato, ho provato a ragionarci con la tabella ASCII d'avanti in modo da cercare una qualche correlazione oltre alla somma e sottrazione del 48 ma niente.. Consigli? :)
    PS: Tutte queste sottrazioni, somme,.. le ho fatte su consiglio del prof.

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    Prova così: in pratica, dice che su AX va il dividendo. Poi richiami DIV con il divisore. Quindi su AL ti trovi il quoziente, e su AH il resto.

    Ciao!

  5. #5
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    -cosa è l'interruzione 21h?
    Vecchia chiamata di sistema MS-DOS, usata per fare un po' di tutto, in questo caso per esempio per stampare stringhe e leggere singoli caratteri.

  6. #6
    Guest

    Predefinito

    Scusate, ma non riesco comunque a trovare il risultato.. ottengo simboli che non hanno nessun (credo) rapporto con il quoziente.. :/
    Ho provato a ragionare sul consiglio di "alemoppo" ma nada.. aiutino?

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •