我使用 xv6,它在 x86 机器上实现了原始 UNIX。我在 C 程序中编写了非常简单的内联汇编:
register int ecx asm ("%ecx");
printf(1, "%d\n", ecx);
__asm__("movl 16(%esp), %ecx\t\n");
printf(1, "%d\n", ecx);
__asm__("add $0, %ecx\t\n");
printf(1, "%d\n", ecx);
__asm__("movl %ecx, 16(%esp)\t\n");
我通常会得到第二个打印语句打印的 434 之类的值。但是,在添加命令之后它会打印 2。如果我改用 addl 命令,它也会打印 2。我使用的是 xv6 的最新稳定版本。所以,我真的不怀疑这是问题所在。有没有其他方法可以在内联汇编中添加两个数字?
本质上,我需要将 16(%esp) 增加 4。
将代码编辑为:
__asm__("addl $8, 16(%esp)\t\n");