Вывести номер двойного слова на основание 10 - PullRequest
1 голос
/ 05 декабря 2010

Например, у меня есть номер 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-битными регистрами

Ответы [ 2 ]

2 голосов
/ 05 декабря 2010

Деление каждого слова на десять и сохранение остатка в стеке в этом случае не работает, потому что нижняя часть двойного слова - 0000.

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

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

1 голос
/ 05 декабря 2010

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

...