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

    [ASSEMBLER] Problema su programma in assembler 8086

    Il comando è:
    Letto un numero N, da tastiera, se maggiore di 5 visualizzarlo altrimenti visualizzare tutti i numeri da 1 a N.

    Io ho scritto il codice:
    codice:
    .MODEL SMALL
    .STACK 100
    .DATA
    
    NUM1 DB ?
    ris db 0 
    dom1 DB "INSERISCI IL VALORE: " ,13,10,"$"
    
    risp1 db "il numero  e': " ,13,10,"$"
    risp2 db "I numeri che vanno da 1 al numero inserito sono : " ,13,10,"$"
    
    
    .CODE
    MOV AX,@DATA
    MOV DS,AX
    
    LEA DX,dom1;visualizza stringa
    MOV AH,9
    INT 21H
    
    MOV AH,01h ;acquisizione valore
    INT 21H
    SUB al,30H ;coversione valore
    
    
    
              cmp al,5
              jg vis
              jbe ciclo
    
          LEA DX,risp2
              mov ah,9
              int 21H 
    
              
    ciclo:    dec al
          
          inc ris
    
         
              mov dl,ris
              mov ah,2
              int 21h
               
              loop ciclo
              
              jmp fine
            
        vis:  LEA DX,risp1
              mov ah,9
              int 21H 
              
          mov num1,al
              mov dl,num1
          sub dl,30h
              mov ah,2
              int 21h
              jmp fine
    
    fine:    MOV AH,4CH ;fine
              INT 21H
              END
    Screen del .exe:


    NON RIESCO A TROVARE L'ERRORE.
    Ultima modifica di MItaly; 22-03-2014 a 13:23

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ne stai già parlando in mille forum ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Lo so, mi serve con urgenza.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    L'urgenza non esiste su un forum - come ti ho già detto - non insistere.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Ciao,

    innanzitutto devi togliere la riga
    jbe ciclo
    altrimenti le tre righe sotto non vengono mai eseguite.

    Il tuo loop che hai chiamato ciclo non viene mai interrotto, infatti l'istruzione LOOP continua un numero di volte pari a CX, ma non vedo che hai inizializzato CX da nessuna parte.

    Prima della riga
    ciclo: dec al
    devi quindi aggiungere le righe:
    MOV CL, AL
    XOR CH, CH


    Così hai CX che è uguale a AL

    Questo solo per quel che riguarda la parte di programma quando inserisci numeri minori di 5.
    Però non ho capito quando dici "visualizzare tutti i numeri da 1 a N."
    Intendi proprio il numero oppure il carattere ASCII relativo a quel numero ??
    Perchè tu ora avendo la riga
    SUB al,30H
    hai trasformato il numero ASCII contenuto in AL in numero decimale (quindi da zero in poi), ma se vuoi visualizzare proprio il numero in ASCII, dopo la riga
    XOR CH, CH
    devi aggiungere la riga
    OR AL, 30H
    per riportare il numero in ASCII

    Spero di esserti stato utile

    Quando hai sistemato questa parte, poi vediamo anche il resto.

    Sergio

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ha già risolto Sergio ... in altri forum ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2014
    residenza
    Vicenza
    Messaggi
    318
    Sarebbe stato carino che lo avesse segnalato, ho perso del tempo inutilmente

    Sergio

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Purtroppo questa è la conseguenza del "crossposting tra forum", pratica vietata in certi forum e sanzionata se individuata.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9

    Moderazione

    In questo forum il crossposting con altri forum non è sanzionato (anche se non è comunque visto troppo di buon occhio); in ogni caso, è veramente pessima educazione chiedere aiuto e non riportare la soluzione (o quantomeno riferire che si è risolto), facendo perdere tempo ad altri utenti per niente.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.