我正在尝试将字符串写入文件,但一直无法弄清楚如何使用多个约束。例如:
// write(3, "This is a test.\n", 16);
asm volatile (
"movq $4,%%rax\n\t"
"movq $3,%%rdi\n\t"
"movq %0,%%rsi\n\t"
"movq $0x10,%%rdx\n\t"
"int $0x80\n\t"
:"=g"(ret)
:"0"(msg)
);
上面的代码适用于我的字符串,虽然我不知道如何为长度做同样的事情。我的第一个想法是使用'1'约束,但这不起作用。我非常肯定在这里使用编号的约束并不是最好的想法,但到目前为止,这是我成功编写的唯一方法。
我查看了各种在线资源和指南,内容包括内联汇编,但我仍然无法弄清楚如何正确地完成它。
**编辑**:我在命名约束方面没有太多运气:
asm volatile (
"movq $4,%%rax\n\t"
"movq $3,%%rdi\n\t"
"movq %[msg],%%rsi\n\t"
"movq %[len],%%rdx\n\t"
"int $0x80\n\t"
::[msg]"g"(msg), [len]"g"(len)
:"cc"
);
运行时这是'truss'输出:write(3,0x4,16)ERR#22'无效参数'。这真的很奇怪,因为现在长度正在工作,但字符串没有进入调用。
如果有人能告诉我我做错了什么,我会非常感激。
谢谢。