2010-12-05 7 views
1

Zum Beispiel habe ich die Nummer 6C0000h = 7077888dDrucke Doppelwortnummer zur Basis 10

Teile jedes Wort von zehn und dann auf dem Stapel, den Rest Speicher in diesem Fall nicht funktioniert, weil der unteren Teil der Doppelwort ist 0000.

Alle Tipps sind willkommen.

dank

zum Beispiel ..

;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 

dieser Code angezeigt: 1080 und nicht 7.077.888, die das erwartete Ergebnis

von 0000

108 = 6Ch und der Endung 0 10 div wäre ..

HINWEIS: Ich muss mit 16bit-Registern arbeiten

+1

Hausaufgaben nehme ich an! –

Antwort

2

Teile jedes Wort von zehn und dann auf dem Stapel, den Rest Speicher in diesem Fall nicht funktioniert, weil der untere Teil des Doppelwortes 0000.

Nein in der Tat wird es nicht . Was Sie tun müssen, ist Division für Ihre Darstellung einer großen Zahl in zwei Worten implementieren. Das heißt, Sie müssen eine Mehrfachpräzisionsabteilung implementieren und diese für Ihre Abteilung mit 10 verwenden.

Für Hinweise, wie dies zu tun ist, sehen Sie sich die angenommene Antwort auf this question an.

+0

Ich werde es untersuchen. Danke, und ja, es ist eine Hausaufgabe. – Bogdan

1

Warum sollte die Arbeit nicht aufgeteilt werden? Sie können 0 bis 10 teilen, wissen Sie.

+1

Weil er mit einer riesigen Zahl arbeitet, die in zwei Wörter unterteilt ist. Die Abteilung funktioniert natürlich, aber für diese Repräsentation muss eine Teilung implementiert werden. –

+0

Ah ja, ich kann jetzt anhand des Codes erkennen. Das war noch nicht da, als ich meine Antwort poste. :) – GolezTrol