1
アセンブリでコードを実行するC言語の主な機能があります。CからGNUへのパラメータの受け渡し64bitのアセンブリ関数
main.cの
#include <stdio.h>
extern int addByAssembly(int first_number, int second_number);
int main (int argc, char **argv)
{
int sum=0;
sum = addByAssembly(5,4);
printf ("%d\n",sum);
return 0;
}
addByAssembly.s
.data
SYSREAD = 0
SYSWRITE = 1
SYSEXIT = 60
STDOUT = 1
STDIN = 0
EXIT_SUCCESS = 0
.text
#.global main
#main:
#call write
#movq $SYSEXIT, %rax
#movq $EXIT_SUCCESS, %rdi
#syscall
#********
.globl addByAssembly
addByAssembly:
pushq %rbp
movq %rsp, %rbp
movq 16(%rsp), %rax
addq 24(%rsp), %rax
movq %rbp, %rsp
popq %rbp
しかし、私は、私の合計に混乱を得た:私は、単純な合計を作りたいです。
movq $123, %rax
戻り値私は多くの方法を試してみました「VEの123ですが、合計に適切にこれを作る方法を見つけることができません:それは、私はこれを行う場合beause私はひどく、引数を渡すように見えます。
はあなたが、実際には、適切な引数をキャプチャしていることを確認するために、デバッガでステップ実行しようとしたことがありますか? –
あなたはABIを読んで理解し、それに従っていましたか?引数がスタックに渡されるとは思わない。一般的に、インラインアセンブラを使用する方が効果的です。 – Olaf
まあ、私はしませんでした。私の言葉にはほとんど情報がありません。英語の芸術家は、よく、技術的なものです。私はCからレジストリにintを渡すことは間違っていると思っていますが、私はそれが適切であるべきかどうかわかりません。私は例を見つけませんでしたので、私はここで尋ねています。 32ビットのお尻で – user2678074