#define SYS_abcd abcd
#define SYSCALL1(name) \
.globl name; \
name: \
mov $SYS_ ## name, %eax; \
int $T_SYSCALL1; \
ret
SYSCALL1(abcd)
私はそれがどのように見える処理するために使用したシステムコールのコード:x86アセンブリコードはEAXレジスタに文字列を入れて
char ptr="abcd";
char arg;
arg = (char*)proc->tf->eax;
cprintf(arg);
if(strncmp(ptr, arg, strlen(ptr)) == 0)
proc->tf->eax = 1;
else {
cprintf("unknown call:");
proc->tf->eax = -1;
}
このマクロは、処理されたときに、EAXレジスタに「ABCD」を入れます。しかし、どういうわけか私はゴミ値を得ています。文字列をEAXレジスタに移動する別の方法はありますか?
あなたは通常、文字列をレジスタに移動しませんが、通常は文字列のアドレスを移動します。ここで何をしようとしているのかは不明です。 –
@ MichaelPetch-I mシステムコールの名前を使用してシステムコールを呼び出そうとしています。ですから、文字列をeaxレジスタに入れて、後でカーネルコードで使用する必要があります。 –
これはxv6の割り当てだと思いますか? –