#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;
}
這個宏,處理的時候,就會把「ABCD」 EAX寄存器。但不知何故,我得到了一個垃圾值。有沒有不同的方式將字符串移動到EAX寄存器?
您通常不會將'strings'移動到一個寄存器中,但通常會移動一個字符串的地址。目前還不清楚你想在這裏做什麼。 –
@ MichaelPetch - 我試圖使用系統調用的名稱撥打系統調用。所以我需要把字符串放在eax寄存器中,稍後在內核代碼中使用它。 –
我會認爲這是一個xv6任務? –