-
-
[求助]帮我看看这段程序怎么实现得到4位十进制数的每位数字?
-
发表于:
2010-9-13 12:37
4093
-
[求助]帮我看看这段程序怎么实现得到4位十进制数的每位数字?
请看下面一段程序:内核是SH2的,删除了压栈和参数传递,仅列出算法部分。r6是传入的4位十进制数,不妨设为4321,下面的程序可以实现获得相应位的数字,千位=4,百位=3,十位=2,个位=1。
我不明白的是程序中用红色表示的,是3个32位数,用16进制表示。请问这几个红色的数字是什么含义?还有是这个算法如何实现的?(PS:算法我已经在VC2008下调试过,没有问题,最后可以获得各位数字,vc2008的详细程序可见附件!)
补充说明:extu.w是word扩展,即只留低16位数据,
dmuls.l r2, r5 是两个32位寄存器相乘,然后高32位存放到mach,低32位存放到macl。
sts mach, r2 是将mach移动到r2中。
mul.l r2, r3 结果存放到macl中。其他移位指令的应该很明了。不清楚的可以回帖问我。希望高手能看懂这段程序。
这个指令集的源操作数在前,目的操作数在后。即mov r6, r2是将r6中的内容移动r2中。
mov r6, r2
extu.w r2, r2
mov.l dword_88A8, r5 ;
h'10624DD3
dmuls.l r2, r5
sts mach, r2
shar r2
shar r2
shar r2
shar r2
shar r2
shar r2
mov r2, r5
rotl r5 ;
;
mov #1, r3
and r3, r5
mov r2, r4
add r5, r4
mov r4, r2
mov r2, r7
extu.w r7, r7
mov r7, r0
mov.w r0, @(h'10,r15) ;
;
mov r6, r2
mov r7, r4
mov.w word_87FE, r12 ; h'3E8 ; d'1000
mul.l r4, r12
sts macl, r4
extu.w r2, r2
mov r2, r5
sub r4, r5
mov.l dword_88AC, r2 ;
h'51EB851F
dmuls.l r5, r2
sts mach, r2
shar r2
shar r2
shar r2
shar r2
shar r2
mov r2, r5
rotl r5 ;
;
mov #1, r3
and r3, r5
mov r2, r4
add r5, r4
mov r4, r5
mov r5, r14
mov r6, r2
mov r7, r4
mul.l r4, r12
sts macl, r5
extu.w r2, r2
mov r2, r4
sub r5, r4
extu.w r14, r14
mov r14, r2
mov #h'64, r3 ; d'100
mul.l r2, r3
sts macl, r2
sub r2, r4
mov.l dword_88B0, r2 ;
h'66666667
dmuls.l r4, r2
sts mach, r2
shar r2
shar r2
mov r2, r5
rotl r5
mov #1, r3
and r3, r5
mov r2, r4
add r5, r4
mov r4, r5
mov r5, r0
mov.w r0, @(h'18,r15)
mov r6, r2
mov r7, r6
mulu r6, r12
sts macl, r6
sub r6, r2
mov r14, r6
mov #h'64, r3
mulu r6, r3
sts macl, r6
sub r6, r2
mov r5, r6
extu.w r6, r6
mov r6, r4
mov r6, r12
mov r12, r6
shll2 r6
shll r6
shll r4
add r4, r6
sub r6, r2
mov r2, r0
mov.w r0, @(h'1C,r15) ;
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课