2016-01-10 1 views
3

Je rencontre des problèmes lors de la sortie de la valeur calculée à chaque étape du calcul de la séquence Fibonacci, elle affiche le caractère ASCII respectif de la valeur calculée comme ☺ ☻ ♥ ♣ et le nombre de fois exécution est dépend de l'utilisateur mais il est limité à 47:Sortie du caractère ASCII des nombres dans l'assembly 8086

org 100h 

ask_for_input db " Please enter a number[1-47]: ","$" 
inputNumber DB 0 
conv DB 10D 
newL DB 0AH,"$"  


ask-again:   
    LEA DX, newL 
    MOV AH,9H 
    int 21H  

    ; Ask for user input  
    LEA DX, ask_For_input      
    mov AH,9H 
    int 21H    

    ; Gets user input 
    ; First digit   
    MOV ah, 01H   
    int 21h 

    SUB AL, 30H 
    MUL conv 
    MOV inputNumber, AL 

    ; Second Digit 
    MOV AH, 01H 
    int 21h 

    SUB AL, 30H 
    add inputNumber, AL 

    ; Checks if number is above 47D 
    CMP inputNumber, 2FH 
    JNLE ask-again 
    ; Checks if number is below 00D 
    CMP inputNumber, 00H 
    JLE ask-again  

; Squence loop Counter      
MOV CH, 00H 
MOV CL, inputNumber 

; Starting calculation 
prev DB 01D 
current DB 1D    

Begin: 
    space DB " ","$" 
    LEA DX, space 
    MOV AH,9H 
    int 21H  

    ; Print Current Number        
    LEA DX, current,"$" 
    mov AH,09H 
    int 21H 

    ; Finds next number 
    MOV BL, prev 
    add current, BL 

    ; Advances prev 
    MOV BL, current 
    SUB BL, prev 
    MOV prev, BL    

    Loop Begin 
+1

Vous devriez certainement pas placer des données dans le chemin d'exécution de code. Mettez-les après tout le code. En ce qui concerne l'impression, 'int 21h/ah = 09h' est utilisé pour imprimer des chaînes. Vous devrez donc convertir votre numéro en chaîne. Il y a beaucoup de questions sur la façon de le faire déjà, alors faites des recherches. – Michael

+0

Et qu'est-ce que "LEA DX, actuel," $ "' censé faire? Est-ce que cela s'assemble même? – Michael

+0

@Michael Je suis vraiment nouveau à l'assemblage et ce que j'ai vu le livre de texte que le tuteur vient de donner sur la production de chaînes à la console – samix73

Répondre

1
  • placez toujours les données en dehors de la voie d'exécution. Maintenant, vous avez placé les données pour prev, actuel, et espace entre les instructions. Cela conduira à l'échec.

    ask_for_input db " Please enter a number[1-47]: ","$" 
    inputNumber DB 0 
    conv   DB 10D 
    newL   DB 0AH,"$"  
    prev   DB 01D 
    current  DB 01D,"$"    
    space   DB " ","$" 
    
  • Pour réellement imprimer le nombre dont vous avez besoin de le convertir en caractère. Votre variable actuelle contient une valeur binaire, pas un caractère! Cette solution rapide affiche les nombres de Fibonacci simples chiffres seulement:

    ; Print Current Number        
    add current, 30H 
    LEA DX, current 
    mov AH,09H 
    int 21H 
    sub current, 30H 
    
+0

Merci pour votre réponse, mais puisque nous demandons à l'utilisateur d'entrer un nombre entre 1-47 le résultat sera plus de 1 chiffre pour sûr – samix73

+2

C'est pourquoi j'ai dit que vous avez besoin de le convertir. Recherchez une routine de conversion. – Fifoernik

+0

Je suis effectivement venu avec un mehod de conversion moi-même, je vais le poster une fois que j'ai écrit le code – samix73