我怎样才能从 10 中获得 10000,1000,100 最简单的方法

Posted

技术标签:

【中文标题】我怎样才能从 10 中获得 10000,1000,100 最简单的方法【英文标题】:How can i make 10000,1000,100 from 10 the easiest way 【发布时间】:2014-10-13 10:11:44 【问题描述】:

我正在寻找上述问题的解决方案。 我需要生成 100,1000 和 10000(十进制数)。 因为整个练习就是计算:

10000*X+1000*Y+100*Y+10*V+1*C

我知道我可以通过 mul 命令做到这一点,但在这种情况下 我必须大量使用堆栈。

我在想某种转移,但不知道怎么做 用十进制数字。

用二进制数

mov al,2h;mov al,10b;
shl al,1

Preferebla 是 masm 环境。感谢您的帮助

更新1: 我不想使用 mul 或 imul(小于 32 位数) 我有一个数字作为字符串(db)让我们说 24575,我有伪代码,没有完成

    mov cx,5
    Calc:
mov di,offset first
add di,2;so we are on the adress of "2"


;ASCI number is 2 and i want to get 20000
    mov al,10d

    ;than ASCI number is 4 and i want to get 4000

    ;than ASCI number is 5 and i want to get 500

    ;than ASCI number is 7 and i want to get 70

    ;than ASCI number is 5 and i want to get 5


inc di
    loop Calc

first:db"A$"
number :db"24575$"

【问题讨论】:

... but in that case i have to work a lot with stack. - 你的意思可能是fmul, mul 在寄存器上工作。 XYV的取值范围和数据类型是什么? 需要更多信息。如果这是 32 位或 64 位模式下的大约 32 位数字,您可以将它们 imul 加上常数 10、100 等。 谢谢哈罗德,这是一个简单的程序,使用 mul 和寄存器就足够了。数字小于 32 位 shl 命令会很棒,但我可以生成 10,100,1000 作为二进制数,但我需要得到十进制数。 你可以使用10=8+2这个事实,所以移位3,移位1,然后将它们相加。或使用10=2*(4+1),您可以在32 位模式下使用LEA 计算4+1 好吧,但计算 100 和 1000 和 10000 并不是那么简单 【参考方案1】:

要计算10000*X+1000*Y+100*Z+10*V+1*C,请使用转换10*(10*(10*(10*X+Y)+Z)+V)+C。这样,您只需在每次迭代中乘以 10。正如我在评论中所写,您可以使用10=8+2 避免mul。因此,您的代码可能如下所示:

    mov cx, 5               ; number of digits
    mov di, offset number   ; pointer to digits
    xor ax, ax              ; zero result
next:
    mov dx, ax              ; save a copy of current result
    shl ax, 3               ; multiply by 8
    add ax, dx              ; 9
    add ax, dx              ; 10
    movzx dx, byte ptr [di] ; fetch digit
    sub dx, '0'             ; convert from ascii
    add ax, dx              ; add to sum
    inc di                  ; next digit
    loop next

【讨论】:

以上是关于我怎样才能从 10 中获得 10000,1000,100 最简单的方法的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能只从 textClock 获得小时

我怎样才能从 react beautiful dnd 中获得组合来处理我的项目?

我只(总是)为 Youtube Data Api v3 获得 10 个 nextpagetoken;我怎样才能增加这个?

我怎样才能从一个街区提前归还一些东西?

当我从通常核心的 cron 运行某些东西时,我怎样才能获得核心转储?

奏鸣曲捆绑包,我怎样才能获得当前登录的用户?