【问题标题】:Print double word number to base 10以 10 为底打印双字数
【发布时间】:2010-12-05 10:51:27
【问题描述】:

例如我有数字 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 位寄存器

【问题讨论】:

    标签: assembly dos tasm


    【解决方案1】:

    在这种情况下,将每个字除以 10,然后将余数保存在堆栈中是行不通的,因为双字的下半部分是 0000。

    不,确实不会。你需要做的是用两个词来实现一个大数的除法。即,您需要实现多精度除法,并将其用于除以 10。

    有关如何执行此操作的提示,请查看this question 的已接受答案。

    【讨论】:

    • 我会调查的。谢谢,是的,这是家庭作业。
    【解决方案2】:

    为什么不划分工作?你可以将 0 除以 10,你知道的。

    【讨论】:

    • 因为他正在处理一个被分成两个单词的巨大数字。除法当然有效,但需要为此表示实现除法。
    • 啊,是的,我现在可以通过代码来判断了。当我发布我的答案时,那还不存在。 :)
    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2021-06-05
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多