力为的技术博客

联系 聚合 管理
  154 Posts :: 1 Stories :: 561 Comments :: 0 Trackbacks

这是一段汇编程序,如此写法,如何得知其用意?

main:                    ; Entry to the function "main"
;multiplicant 
=r0;
;multiplier 
= r1;
;product 
= r2;
;multiplicand 
= r3;
        mul m1,
2,r3     ;m1 = 2 * r3
        mul m2,
4,r3     ;m2 = 4 * r3
        mul m3,
8,r3     ;m3 = 8 * r3
        mul m4,
16,r3    ;m4 = 16 * r3
        mul m5,
32,r3    ;m5 = 32 * r3
        mul m6,
64,r3    ;m6 = 64 * r3
        mul m7,
128,r3   ;m7 = 128 * r3

    cmp r1, #
255     ; if multiplier > 255
    bgt 
error     ; excute the error condition
    cmp r1, #
0     ; if multiplier <0
    blt 
error    ; excute the error condition


    mov r2, #
0    ; assgin product to 0 initially

Loop:
        cmp r1 #
128     ;compare r1 with 128
        bge exp_loop1   ;r1 
>=128
        cmp r1 #
64      ;compare r1 with 64
        bge exp_loop2   ;r1 
>=64
        cmp r1 #
32      ;compare r1 with 32
        bge exp_loop3   ;r1 
>=32
        cmp r1 #
16      ;compare r1 with 16
        bge exp_loop4   ;r1 
>=16
        cmp r1 #
8       ;compare r1 with 8
        bge exp_loop5   ;r1 
>=8
        cmp r1 #
4       ;compare r1 with 4
        bge exp_loop6   ;r1 
>=4
        cmp r1 #
2       ;compare r1 with 2
        bge exp_loop7   ;r1 
>=2
        cmp r1 #
1       ;compare r1 with 1
        bge exp_loop8   ;r1 
>=1
        mov pc, lr      ;Terminate the program
exp_loop1:
        add r2,r2,m7    ;r2 
= r2 + m7
        
sub r1,r1,#128  ;r1 = r1 - 128
        bne 
loop        ;Repeat the loop
exp_loop2:
        add r2,r2,m6    ;
        
sub r1,r1,#64   ;
        bne 
loop        ;
exp_loop3:
        add r2,r2,m5    ;
        
sub r1,r1,#32   ;
        bne 
loop        ;
exp_loop4:
        add r2,r2,m4    ;
        
sub r1,r1,#16   ;
        bne 
loop        ;
exp_loop5:
        add r2,r2,m3    ;
        
sub r1,r1,#8    ;
        bne 
loop        ;
exp_loop6:
        add r2,r2,m2    ;
        
sub r1,r1,#4    ;
        bne 
loop        ;
exp_loop7:
        add r2,r2,m1    ;
        
sub r1,r1,#2    ;
        bne 
loop        ;
exp_loop8:
        add r2,r2,r3    ;
        
sub r1,r1,#1    ;
        bne 
loop        ;
error:
        mov r2, #
-1     ;r2 = -1

exit:
        mov r0, r2      ;r2 
= r0

    mov pc, lr    ;Terminate the program


    .end
posted on 2007-08-23 23:49 力为 阅读(1949) 评论(3)  编辑 收藏 引用 所属分类: 4. C++ FAQ

评论

# re: 瞧,这段神秘的程序 2007-08-24 09:24 若弱
就是一个乘法运算。  回复  更多评论
  

# re: 瞧,这段神秘的程序 2007-08-30 16:56 minidxer
没看出神秘在哪里……  回复  更多评论
  

# re: 瞧,这段神秘的程序 2007-08-30 19:35 力为
再仔细看看 :)  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理