Calculating the Average

给定100的数据,计算这100个数据的平均值
方法:space创建连续的内存空间,存储100个数据,首先计算这100个数据的和作为被除数,使用移位和减法来计算除法,得到商和余数

二进制除法
将被除数和除数当做二进制,被除数每次左移1位,和除数作减法

算法流程
1)将商和余数清零
2)将被除数左移1位到余数中
3)余数和除数作减法
4)若所得结果为负数,则将商的最低位置零;
若所得结果为正数或零,则将商的最低位置1,并且将所得结果存入余数中
5)判断是否达到循环的次数(循环的次数,即数据的位数)
6)若达到循环的次数,退出,得到结果
若没有达到循环的次数,将商值左移1位,余数左移1位,继续进行步骤2


stack_top   EQU 0x30200000          

    AREA ave,CODE,READWRITE
    code32
    entry
start
        ldr     r0,= array            ;r0 point to the 100 num
        mov     r1, #1
        mov     r2, #0
        ldr     sp,= stack_top
arrayinit
        add     r2, r1, #0
        str     r2, [r0], #4
        add     r1, r1, #1
        cmp     r1, #101
        bne     arrayinit
averageinit
        ldr     r0,= array            
        mov     r1, #1                
        mov     r2, #0                ;r2 point to the dividend  beicu
        mov     r3, #0                ;r3 point to the ramainder yu
        mov     r4, #0                ;r4 point to the quotient  shan
getsum
        ldr     r3, [r0], #4
        add     r2, r2, r3
        add     r1, r1, #1
        cmp     r1, #101
        bne     getsum
average
        mov     r1, #1
        mov     r3, #0
aveloop
        movs    r2, r2, lsl#1
        addcs   r3, r3, #1
        subs    r5, r3, #100
        biccc   r4, r4, #1
        orrcs   r4, r4, #1
        movcs   r3, r5
        add     r1, r1, #1
        cmp     r1, #33
        movne   r4, r4, lsl#1
        movne   r3, r3, lsl#1
        bne     aveloop     
stop
        b       stop

        ltorg
array   space   100                             
        end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值