我怎样才能从 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
在寄存器上工作。 X
、Y
、V
的取值范围和数据类型是什么?
需要更多信息。如果这是 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 最简单的方法的主要内容,如果未能解决你的问题,请参考以下文章
我怎样才能从 react beautiful dnd 中获得组合来处理我的项目?
我只(总是)为 Youtube Data Api v3 获得 10 个 nextpagetoken;我怎样才能增加这个?