题目:SEED DM642的boot.asm程序

题目:SEED DM642的boot.asm程序

楼主位:

mvkl  COPY_TABLE, a3   ; load table pointer
        mvkh  COPY_TABLE, a3

        ldw   *a3++, b1        ; Load entry point

copy_section_top:
        ldw   *a3++, b0        ; byte count
        ldw   *a3++, a4        ; ram start address
        nop   3

[!b0]  b copy_done            ; have we copied all sections?
        nop   5

copy_loop:
        ldb   *a3++,b5
        sub   b0,1,b0          ; decrement counter
[ b0]  b     copy_loop        ; setup branch if not done
[!b0]  b     copy_section_top
        zero  a1//######
[!b0]  and   3,a3,a1
        stb   b5,*a4++
[!b0]  and   -4,a3,a5         ; round address up to next multiple of 4
[ a1]  add   4,a5,a3          ; round address up to next multiple of 4
以上是合众达DM642开发板boot.asm里拷贝代码段的程序,从//######开始以下的几行程序我实在看不明白,请高手执教阿

 

一楼回复:

这段代码是由于DSP的流水线原因产生延迟槽,导致执行的顺序发生变化,所以不好理解。load指令的delay slots是4,branch指令的delay slots是5,所以load执行时,后面的4条指令先执行,branch时后面5条指令先执行。你用这样的顺序在看一下。
    另外,dsp外挂的flash是8位的,而段的起始位置是4字节对齐。所以,拷贝下个段之前要进行4自己对齐的调整。

 

转自:http://www.hellodsp.com/bbs/forum.php?mod=viewthread&tid=21138

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值