私は64ビットLinuxシステムのために私自身の読み込みシステムコールを作ろうとしています。それは私が悪いタイプを持っていることを私に伝え続けます。コンパイラが間接的にbufに対処しようとしていますか?私は自分の入力制約の中でうんざりしている気がします。私はちょうど%2
でbufのアドレスが必要です。インラインasmタイプの不一致
エラー:
test.c: Assembler messages:
test.c:28: Error: operand type mismatch for `movq'
static int myread(int fd, char *buf, int size) {
register int bytes;
asm(
"movq $0, %%rax\n"
"movq %1, %%rdi\n"
"movq %2, %%rsi\n"
"movq %3, %%rdx\n"
"syscall\n"
"movq %%rax, %0"
: "=r" (bytes)
: "m" (fd), "m" (buf), "m" (size)
: "%rax", "%rdi", "%rsi", "%rdx"
);
return bytes;
}
'int'が32ビット整数の場合、これらのエラーが発生します。 – Mysticial