2010-04-25 22 views
3

Je dois écrire un programme en 8086 Assemblage qui reçoit des données de l'utilisateur, fait des calculs mathématiques et imprime la réponse à l'écran, j'ai écrit toutes les parties du programme et tout fonctionne bien mais je ne sais pas comment imprimer le numéro à l'écran.Simple façon d'imprimer la valeur d'un registre dans l'assemblage x86

À la fin de tout mon calcul, la réponse est AX et elle est traitée comme un entier non signé de 16 bits. Comment imprimer la valeur décimale (non signée) du registre AX?

+1

double possible de http://stackoverflow.com/questions/2504974/outputting-variable-values-in-x86-asm – danben

+0

Quel système d'exploitation? –

Répondre

1

vous pouvez utiliser la fonction C-bibliothèque itoa, il est œuvre pas difficile, basiquement, vous faites:

while (x){ 
    buff[n]==x % 10; 
    x/=10; 
    n++; 
} 

puis inverser le tampon (ou caractère sage impression arrière)

void numéro_impression (int x);

print_number: 
    buff db 15 dup(0) 
    mov ax,[esp+4] 
    mov bx,0 
itoa_w1: 

    mov cx, ax 
    mod cx,10 
    add cx,30h;'0' 
    div ax,10 
    mov buff[bx],cl 
    cmp ax,0 
    jnz itoa_w1 

itoa_w2: 
    push buff[bx] 
    call putchar 
    pop ax 
    cmp bx,0 
    jnz itoa_w2 

ret 
+0

itoa n'est pas standard, c'est une extension microsoft. –

+0

Je sais, mais la recherche sur le web va mettre en place des implémentations open source. – flownt

+0

si je pouvais utiliser le code c je n'aurais pas de problème. Mais je dois tout écrire dans le code d'assemblage 8086. – Bob