Вывести число двойного слова по основанию 10

Например у меня есть число 6C0000h = 7077888d

Разделение каждого слова на десять с последующим сохранением остатка в стеке в данном случае не работает, потому что нижняя часть двойного слова равна 0000.

Любые советы приветствуются.

Спасибо

Например..

;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

этот код отображает: 1080, а не 7077888, что было бы ожидаемым результатом

108 = 6Ch и окончание 0 от 0000 div 10..

ПРИМЕЧАНИЕ. Мне приходится работать с 16-битными регистрами.


person Bogdan    schedule 05.12.2010    source источник


Ответы (2)


Разделение каждого слова на десять с последующим сохранением остатка в стеке в данном случае не работает, потому что нижняя часть двойного слова равна 0000.

Нет, действительно не будет. Что вам нужно сделать, так это реализовать деление для представления большого числа двумя словами. То есть вам нужно реализовать деление с множественной точностью и использовать его для вашего деления на 10.

Подсказки о том, как это сделать, см. в принятом ответе на этот вопрос .

person Don Roby    schedule 05.12.2010
comment
Я посмотрю на это. Спасибо, и да, это домашнее задание. - person Bogdan; 05.12.2010

Почему деление не работает? Вы знаете, что можете разделить 0 на 10.

person GolezTrol    schedule 05.12.2010
comment
Потому что он работает с гигантским числом, представленным разделенным на два слова. Разделение работает, конечно, но для этого представления необходимо реализовать разделение. - person Don Roby; 05.12.2010
comment
Ах да, теперь я могу сказать по коду. Этого еще не было, когда я отправил свой ответ. :) - person GolezTrol; 05.12.2010