ASM程序

ASM程序

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

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

你可能感兴趣的:(ASM程序)