LPC2148汇编代码。尝试从读写内存中读取数据,但Label显示空白数据

时间:2018-04-05 16:15:35

标签: arm embedded

我正在尝试从一个位置复制LUT中的数据并将其复制到另一个位置。这是代码

    AREA    Program, CODE, READONLY
    EXPORT __main
    ENTRY

__main
    ldr     r0, =SourceL        ; Address of SourceL
    ldr     r1, =DestinationL   ; Address of DestinationL
    ldr     r2, [r0]            ; r2 contains data@SourceL
    str     r3, [r1]            ; r3 contains data@DestinationL

    mov     r4, #245
    str     r4, [r1]

    SWI     &11

    AREA MyData, DATA, READWRITE

SourceL
    DCW     &1234
    ALIGN

DestinationL
    DCW     &0
    ALIGN

    END

这是一个非常基本的ARM7TDMI汇编代码。 当我看到标签的地址(在调试器中)。 SourceL为0x40000000,DestinationL为0x40000004。

但是当看到内存位置时,它们的值为零。

但在LUT中,SourceL的值为& 1234

当我尝试将一些数据存储在由DestinationL标签表示的内存中时,我能够成功地执行此操作。

这不是上述代码的唯一情况。

ARM网站中的示例代码

      AREA    StrCopy, CODE, READONLY
      EXPORT    __main
      ENTRY                             ; Mark first instruction to execute

__main
    LDR     r1, =srcstr               ; Pointer to first string
    LDR     r0, =dststr               ; Pointer to second string

    BL      strcopy                   ; Call subroutine to do copy
stop
    MOV     r0, #0x18                 ; angel_SWIreason_ReportException
    LDR     r1, =0x20026              ; ADP_Stopped_ApplicationExit
    SVC     #0x123456                 ; ARM semihosting (formerly SWI)

strcopy
    LDRB    r2, [r1],#1               ; Load byte and update address
    STRB    r2, [r0],#1               ; Store byte and update address
    CMP     r2, #0                    ; Check for zero terminator
    BNE     strcopy                   ; Keep going if not
    MOV     pc,lr                     ; Return

    AREA    Strings, DATA, READWRITE
 srcstr  DCB     "First string - source",0
 dststr  DCB     "Second string - destination",0
    END

与srcstr对应的内存仅显示为零。

我正在使用KEIL IDE进行编程。

为什么LUT中的数据没有显示在内存位置?

感谢!!!

1 个答案:

答案 0 :(得分:-1)

您的代码不会将@SourceL复制到@DestinationL。它只将数据加载到寄存器中,并且不对它进行任何操作(完全根据注释)。

ldr     r0, =SourceL        ; Address of SourceL
ldr     r1, =DestinationL   ; Address of DestinationL
ldr     r2, [r0]            ; r2 contains data@SourceL
str     r2, [r1]            ; Copy data@SourceL to DestinationL  <<ADD THIS