2010-12-05 1 views
1

Например, у меня есть номер 6C0000h = 7077888dпечати число двойных слов к основанию 10

Деление каждое слово в десять раз, а затем сохранить остаток в стеке не работает в этом случае, так как в нижней части двойное слово 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-разрядными регистрами

+1

Домашнее задание Я полагаю! – 2010-12-05 15:52:50

ответ

2

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

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

Чтобы узнать, как это сделать, посмотрите на принятый ответ this question.

1

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

+1

Потому что он работает с гигантским числом, представленным как разделенное на два слова. Разумеется, работы отдела, но для этого представления необходимо выполнить разделение. – 2010-12-05 13:58:50

+0

Ах да, я могу сказать по коду сейчас. Этого еще не было, когда я опубликовал свой ответ. :) – GolezTrol 2010-12-05 18:17:27

 Смежные вопросы

  • Нет связанных вопросов^_^