コードの一部がCで書かれ、アセンブリのコードの一部が混在した言語プログラムを書いてみたいと思います。私はサンプルコードを与えられたので、私は自分の仕事がどのように見えるかを知っています。混合言語プログラムを実行するには
.globl _addArrayinA
_addArrayinA:
pushl %ebp
movl %esp,%ebp
subl $8,%esp
movl 8(%ebp), %ebx
xorl %esi,%esi
xor %eax,%eax
bak:
addl (%ebx),%eax
addl $4,%ebx
incl %esi
cmpl $10, %esi
jne bak
movl %ebp, %esp
popl %ebp
ret
# Return value is in %ea
上記はアセンブリ部品です。
int addArrayinC(int *myArray, int num)
{
int c;
int i;
c = 0;
for (i=0; i<num; i++)
{c += *myArray;
myArray++;
}
return (c);
}
これはC. で書かれた第二の機能であり、以下、上記二つの機能を使用することになっているメインファイル、です。
#include <stdio.h>
#include <stdlib.h>
extern int addArrayinC(int *numbers,int count);
extern int addArrayinA(int *numbers, int count);
int main(void) {
int mynumbers[10]={1,2,3,4,5,6,7,8,9,0};
int sum;
sum = addArrayinC(mynumbers, 10);
printf("\nThe sum of array computed in C is : %d ",sum);
sum = addArrayinA(mynumbers, 10);
printf("\nThe sum of array computed in assembly is : %d ",sum);
return EXIT_SUCCESS;
}
これら3つのファイルをcodeblocksで開こうとしましたが、実行できませんでした。私はどのように混合言語プログラムを動かすか分かりません。一般に、コードのコンパイルにはcloud9を使用します。とにかく...どうすればこのようなコードを実行できますか?
cでインラインアセンブリを試すことができます。 https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html –
ありがとうございました!今はすべてが動作します... –
asmをインライン化することはできませんでした。 これは正確に私が探していたものではありませんが、うまく動作すると思います... ありがとう! :) –