我正在尝试从一个位置复制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中的数据没有显示在内存位置?
感谢!!!
答案 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