這是一段匯編程序,如此寫(xiě)法,如何得知其用意?
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
