簡體   English   中英

混合c和匯編(ARM)子例程

[英]mixing c and assembly (ARM) subroutine

我必須在兩個文件中做一個surbroutine,我在構建項目時遇到問題,有一個錯誤:

未定義對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

extern int c; 在您的c文件中是小寫字母和.extern C; 在您的匯編文件中是大寫的,請更改extern int c; extern int C; (當然,您還必須更改int C[3];數組)

變量c在哪里定義? 寫作

extern int c;

聲明 c ,您仍然需要在某個地方定義它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM