#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任务? –