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