我正在为abowe这个问题寻找解决方案。 我需要生成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环境。谢谢你的帮助
UPDATE1: 我不想使用mul或imul(少于32位数) 我有一个数字作为字符串(db)让我说24575,我有hier的伪代码,没有完成
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$"
答案 0 :(得分:4)
要计算10000*X+1000*Y+100*Z+10*V+1*C
,请使用转化10*(10*(10*(10*X+Y)+Z)+V)+C
。这样,您只需要在每次迭代中乘以10。正如我在评论中所写,您可以使用mul
来避免10=8+2
。因此,您的代码可能如下所示:
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