【发布时间】:2020-10-02 01:31:59
【问题描述】:
这是我的 ARM 汇编列表文件。我想编写汇编代码来计算:C = A + B;当我“全力以赴”时,我收到以下错误:
错误:未定义的符号 r5 用作立即数
错误:未定义的符号 r6 用作立即数
我是汇编文件的新手,所以我有点迷路了。我应该在我的 .text 部分更改什么以消除错误。我还被告知“对三个内存访问使用单点可寻址性 (DS)。每个内存访问 应该使用使用标签计算的偏移量(没有硬编码的文字偏移值)。”
SET_TARGET
.text
FUNCTION main,global
push {r4,r5,r6,r7,lr}
ldr r4,=C //Store symbol C inside r4
ldrb r5,=A //Store symbol C inside r4
ldrh r6,=B //Store symbol C inside r4
add r4,r5 //Add A to C
add r4,r6 //Add B to C as well
all_done:
pop {r4,r5,r6,r7,lr}
bx lr
ENDFUNC main
.data
.org 234
.align 2,0xa5
DS: .word 0xbbbbbbbb
A: .byte 123
.align 1,0xa5
B: .short 47587
.align 2,0xa5
C: .word ~0
.align 3,0xa5
.word 0xeeeeeeee
.end
【问题讨论】:
-
能否请您使用以下信息补充您的问题:- 您正在使用的汇编软件(GNU AS、Keil 汇编器,...),- 您正在为其编写程序的 Arm CPU(Cortex -A, Cortex-M,...) ?
-
GNU 汇编器@Frant
-
您当前的代码将添加地址。不确定
=symbol甚至可以与ldrb/ldrh一起使用。另外,您确定您的汇编程序支持//作为注释字符吗?通常是@。虽然//确实可以在我的桌面上与来自GNU Binutils 2.34 的arm-none-eabi-as一起使用。 -
还要注意
C = A+B只接受加法。您正在实施C += A+B。 -
你能发布你用来汇编的命令吗(即你的makefile运行什么汇编命令)?
标签: assembly arm microprocessors