gerry 发表于 2011-4-7 21:11:18

ADS1.2汇编程序求解

AREA Block, CODE, READONLY      ; name this block of code

num   EQU   20            ; Set number of words to be copied

      ENTRY                   ; mark the first instruction to call

start

      LDR   r0, =src      ; r0 = pointer to source block
      LDR   r1, =dst      ; r1 = pointer to destination block
      MOV   r2, #num      ; r2 = number of words to copy

      MOV   sp, #0x400      ; set up stack pointer (r13)
blockcopy      
      MOVS    r3,r2, LSR #3   ; number of eight word multiples
      BEQ   copywords               ; less than eight words to move ?

      STMFD   sp!, {r4-r11}   ; save some working registers
octcopy
      LDMIA   r0!, {r4-r11}   ; load 8 words from the source
      STMIA   r1!, {r4-r11}   ; and put them at the destination
      SUBS    r3, r3, #1            ; decrement the counter
      BNE   octcopy         ; ... copy more

      LDMFD   sp!, {r4-r11}   ; don't need these now - restore originals

copywords
      ANDS    r2, r2, #7            ; number of odd words to copy
      BEQ   stop                  ; No words left to copy ?
wordcopy
      LDR   r3, , #4    ; a word from the source
      STR   r3, , #4    ; store a word to the destination
      SUBS    r2, r2, #1            ; decrement the counter
      BNE   wordcopy                ; ... copy more

stop
      MOV   r0, #0x18               ; angel_SWIreason_ReportException
      LDR   r1, =0x20026    ; ADP_Stopped_ApplicationExit
      SWI   0x123456                ; ARM semihosting SWI


      AREA BlockData, DATA, READWRITE

src   DCD   1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
dst   DCD   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

      END


调试的linker的RO端口是0x40000000,RW是0x40003000,但为什么DCD伪指令没有将1 2 3 4...的值写到以0x40003000开头的空间中去?求解

钟米不 发表于 2011-11-2 17:06:49

呱呱 发表于 2011-12-25 17:02:05

RW 起始地址是跟在 RO 后面的~~ 如果你不在ADS RW那里设置的话~~编译自动生成RW的地址
页: [1]
查看完整版本: ADS1.2汇编程序求解