混合 c 和汇编 (ARM) 子程序
mixing c and assembly (ARM) subroutine
我必须在两个文件中制作一个 surbroutine,我在构建项目时遇到问题,出现错误:
undefined reference to c
我不知道发生了什么,我正在尝试发送 C[0] 内存方向,这就是为什么 c=C[0],可以吗?我也必须使用 "i" 吗?谢谢大家。
#include <stdio.h>
const int N = 3;
extern int abs_escalar(int,int,int);
extern int abs(int x){
if(x<0){
x=0-x;
}
return x;
}
extern int c;
extern int i;
int main() {
int A[3][3]={{1,2,3},{5,7,3},{1,5,9}};
int B[3][3]={{3,5,7},{4,2,6},{1,8,3}};
int C[3];
c = C[0];
for(i=0;i<N;i++){
C[i] = abs_escalar(A[N][N],B[N][N],N);
}
return 0;
}
.asm(请忽略西班牙语注释)
.extern abs;
.extern C;
.extern i;
.global abs_escalar;
.text
abs_escalar:
ldr r4,=C;
ldr r5,=i;
mov r6,#0; //hace la vez de j y de cero en c[i] = 0;
str r6,[r4,r5,lsl#2];
for: cmp r6,r2 //r2 es n
beq finfor
mul r7,r2,r5 //mult ncolumnas * i
add r7,r7,r6 //suma para el indice
ldr r7,[r0,r7,lsl#2] //Cargo el dato de A[i][j]
push {r0-r2} //guardo la dir de memoria de A , de B y n porque lo voy a necesitar
mov r0,r7 //envio el dato en r0
bl abs
mov r7,r0 //guardo el dato en r0
pop {r0-r2} //recupero la dir de A
ldr r8,[r1,r7,lsl#2] //cargo el dato de B[i][j]
push {r0-r2}
mov r0,r8
bl abs
mov r8,r0
pop {r0-r2}
ldr r9,[r4,r5,lsl#2]
mul r10,r7,r8
add r9,r9,r10
add r6,r6,#1 //aumento el indice j
b for
finfor: //str r9,[r4,r5,lsl#2] solo enviamos el dato la funcion principal la guarda
mov r0,r9
mov pc,lr
.end
变量c
在哪里定义的?写作
extern int c;
只声明c
,你还需要在某处定义它。
extern int c;
在你的c文件中是小写的,.extern C;
在你的汇编文件中是大写的,将extern int c;
更改为extern int C;
(当然你会有也更改您的 int C[3];
数组)
我必须在两个文件中制作一个 surbroutine,我在构建项目时遇到问题,出现错误:
undefined reference to c
我不知道发生了什么,我正在尝试发送 C[0] 内存方向,这就是为什么 c=C[0],可以吗?我也必须使用 "i" 吗?谢谢大家。
#include <stdio.h>
const int N = 3;
extern int abs_escalar(int,int,int);
extern int abs(int x){
if(x<0){
x=0-x;
}
return x;
}
extern int c;
extern int i;
int main() {
int A[3][3]={{1,2,3},{5,7,3},{1,5,9}};
int B[3][3]={{3,5,7},{4,2,6},{1,8,3}};
int C[3];
c = C[0];
for(i=0;i<N;i++){
C[i] = abs_escalar(A[N][N],B[N][N],N);
}
return 0;
}
.asm(请忽略西班牙语注释)
.extern abs;
.extern C;
.extern i;
.global abs_escalar;
.text
abs_escalar:
ldr r4,=C;
ldr r5,=i;
mov r6,#0; //hace la vez de j y de cero en c[i] = 0;
str r6,[r4,r5,lsl#2];
for: cmp r6,r2 //r2 es n
beq finfor
mul r7,r2,r5 //mult ncolumnas * i
add r7,r7,r6 //suma para el indice
ldr r7,[r0,r7,lsl#2] //Cargo el dato de A[i][j]
push {r0-r2} //guardo la dir de memoria de A , de B y n porque lo voy a necesitar
mov r0,r7 //envio el dato en r0
bl abs
mov r7,r0 //guardo el dato en r0
pop {r0-r2} //recupero la dir de A
ldr r8,[r1,r7,lsl#2] //cargo el dato de B[i][j]
push {r0-r2}
mov r0,r8
bl abs
mov r8,r0
pop {r0-r2}
ldr r9,[r4,r5,lsl#2]
mul r10,r7,r8
add r9,r9,r10
add r6,r6,#1 //aumento el indice j
b for
finfor: //str r9,[r4,r5,lsl#2] solo enviamos el dato la funcion principal la guarda
mov r0,r9
mov pc,lr
.end
变量c
在哪里定义的?写作
extern int c;
只声明c
,你还需要在某处定义它。
extern int c;
在你的c文件中是小写的,.extern C;
在你的汇编文件中是大写的,将extern int c;
更改为extern int C;
(当然你会有也更改您的 int C[3];
数组)