Assembly 如何编写ARMGNU汇编代码来编写C=A+;B

Assembly 如何编写ARMGNU汇编代码来编写C=A+;B,assembly,arm,microprocessors,Assembly,Arm,Microprocessors,这是我的手臂装配列表文件。我想写汇编代码来计算:C=A+B;当我“全部生成”时,我得到以下错误: 错误:未定义的符号r5用作立即值 错误:未定义的符号r6用作立即值 我不熟悉汇编文件,所以我有点迷路了。我应该在.text部分更改什么以消除错误。我还被告知“对三次内存访问使用一个可寻址点(DS)。每次内存访问 应使用使用标签计算的偏移量(无硬编码文字偏移量值)。” gnu汇编程序: so.s: Assembler messages: so.s:1: Error: bad instruction `

这是我的手臂装配列表文件。我想写汇编代码来计算:C=A+B;当我“全部生成”时,我得到以下错误:

错误:未定义的符号r5用作立即值

错误:未定义的符号r6用作立即值

我不熟悉汇编文件,所以我有点迷路了。我应该在.text部分更改什么以消除错误。我还被告知“对三次内存访问使用一个可寻址点(DS)。每次内存访问 应使用使用标签计算的偏移量(无硬编码文字偏移量值)。”

gnu汇编程序:

so.s: Assembler messages:
so.s:1: Error: bad instruction `set_target'
so.s:5: Error: bad instruction `function main,global'
so.s:21: Error: bad instruction `endfunc main'
这些当然不是gnu汇编指令,它们看起来像ARM/Kiel类型的东西

清理干净了看起来像这样

.text

.type main, %function
.globl main
main:

    push {r4,r5,r6,r7}

    ldr  r4,=C @ copy address of C to r4
    ldrb r5,=A @ copy address of A to r5
    ldrh r6,=B @ copy address of B to r6
    add  r4,r5 @ &C = &C + &A, r4 = address of C plus address of A
    add  r4,r6 @ &C = &C + &B, r4 = r4 plus address of B

    pop {r4,r5,r6,r7}

    bx lr

.data

      .align
A:    .byte     123

      .align
B:    .short    47587

      .align
C:    .word     ~0
对于gnu汇编程序,但根据您的错误消息,您似乎不是在使用gnu汇编程序,而是在使用其他东西。汇编是特定于工具而不是目标的,因此您需要为正在使用的汇编程序(ARM、Kiel、gas等)编写汇编语言

对于汇编语言,你需要知道语法。很可能您不想将变量的地址加在一起,而是将它们的值加在一起


你想从这个函数中返回什么吗?

你能用以下信息补充你的问题吗:-你正在使用的汇编软件(GNU AS,Keil assembler,…)-你正在为之编写程序的Arm CPU(Cortex-A,Cortex-M,…)-GNU assembler@FrantYour当前代码将添加地址。不确定
=symbol
是否与
ldrb
/
ldrh
一起使用。另外,您确定汇编程序支持将
/
作为注释字符吗?通常是
@
。虽然我的桌面上的GNU Binutils 2.34中的
/
确实可以与
arm none eabi as
一起工作。还要注意的是
C=A+B
只进行加法运算。您正在实现
C+=A+B
。是否可以发布用于汇编的命令(即,makefile运行的汇编程序命令)?
.text

.type main, %function
.globl main
main:

    push {r4,r5,r6,r7}

    ldr  r4,=C @ copy address of C to r4
    ldrb r5,=A @ copy address of A to r5
    ldrh r6,=B @ copy address of B to r6
    add  r4,r5 @ &C = &C + &A, r4 = address of C plus address of A
    add  r4,r6 @ &C = &C + &B, r4 = r4 plus address of B

    pop {r4,r5,r6,r7}

    bx lr

.data

      .align
A:    .byte     123

      .align
B:    .short    47587

      .align
C:    .word     ~0