C语言 内联程序集错误:“asm”中的寄存器名称未知“%%ebx”



>我正在尝试创建read()包装器,但收到此错误:

错误:第 23 行"ASM"中的未知寄存器名称"%%ebx"//(粗体行)

这是代码:

#include <sys/syscall.h>
typedef unsigned int size_t;
typedef signed ssize_t;
extern int errno;
int main(void) {
    int fd = 0;
    char buf[128];
    size_t count = 128;
    my_read(fd, buf, count);
    return 0;
}
int my_read(int fd, void *buf, size_t count) {
    long ret;
    asm("pushl %%ebxnt" // Line 23
        "movl %%esi,%%ebxnt"
        "int $0x80nt"
        "popl %%ebx"
        : "=a" (ret)/* output */
        : "0"(SYS_read), "S"((long) fd), "c"((long) buf), "d"((long) count)/* input */
        : "%%ebx"/* clobbered register */
        );
    if (ret >= 0) {
        return (int) ret;
    }
    errno = -ret;
    return -1;
}

有人可以帮忙吗?

从被破坏的行中删除一个%

: "%%ebx"/* clobbered register */
   ^

您必须将其保留在所有其他行中。

编辑

删除extern int errno;并包括errno.h

最新更新