2010-12-05 4 views
1

Par exemple, j'ai le nombre 6C0000h = 7077888dImprimer numéro double mot à base 10

En divisant chaque mot par dix, puis sauver le reste sur la pile ne fonctionne pas dans ce cas, parce que la partie inférieure de la le mot double est 0000.

Tous les conseils sont appréciés.

grâce

par exemple ..

;number = 6c0000h 
mov ax,word ptr number 
;after this mov ax is 0000 
;dividing by ten will mean dx = 0 and ax = 0 and 0 is saved on the stack 
mov cx,0 
repeat: 
    mov dx,0 
    div ten ;ten = 10 
    inc cx 
    push dx 
    cmp ax,0 
    ja repeat 
mov ax,word ptr number+2 
;after this ax is 6Ch 
;i think this part is alright 
repeat2: 
    mov dx,0 
    div ten 
    inc cx 
    push dx 
    cmp ax,0 
    ja repeat2 
display: 
    pop dx 
    add dl,'0' 
    mov ah,02h 
    int 21h 
    loop display 

ce code affiche: 1080 et non 7077888 qui serait le résultat attendu

108 = 6Ch et la terminaison 0 est de 0000 div 10 REMARQUE: Je dois travailler avec des registres 16 bits

+1

Les devoirs Je suppose! –

Répondre

2

En divisant chaque mot par dix, puis sauver le reste sur la pile ne fonctionne pas dans ce cas, parce que la partie inférieure du double mot est Non en effet, il ne sera pas 0000.

. Ce que vous devez faire est de mettre en œuvre la division pour votre représentation d'un grand nombre en deux mots. Par exemple, vous devez implémenter une division à précision multiple et l'utiliser pour votre division de 10.

Pour des conseils sur la façon de procéder, consultez la réponse acceptée à this question.

+0

Je vais regarder dedans. Merci, et oui c'est un devoir. – Bogdan

1

Pourquoi ne pas diviser le travail? Vous pouvez diviser 0 par 10, vous savez.

+1

Parce qu'il travaille avec un nombre géant représenté divisé en deux mots. La division fonctionne bien sûr, mais la division doit être mise en œuvre pour cette représentation. –

+0

Ah oui, je peux dire par le code maintenant. Ce n'était pas encore là quand j'ai posé ma réponse. :) – GolezTrol

Questions connexes