【发布时间】:2017-02-16 04:04:35
【问题描述】:
考虑以下程序:
#include <stdio.h>
int main(void) {
int foo = 10, bar = 15;
__asm__ __volatile__("add %%ebx,%%eax"
:"=a"(foo)
:"a"(foo), "b"(bar)
);
printf("foo+bar=%d\n", foo);
}
我知道add 指令用于加法,sub 指令用于减法等等。但我不明白这些行:
__asm__ __volatile__("add %%ebx,%%eax"
:"=a"(foo)
:"a"(foo), "b"(bar)
);
:"=a"(foo) :"a"(foo), "b"(bar) ); 的确切含义是什么?它能做什么 ?当我尝试在这里使用mul 指令时,我收到以下程序的以下错误:
#include <stdio.h>
int main(void) {
int foo = 10, bar = 15;
__asm__ __volatile__("mul %%ebx,%%eax"
:"=a"(foo)
:"a"(foo), "b"(bar)
);
printf("foo*bar=%d\n", foo);
}
错误:“mul”的操作数数量不匹配
那么,为什么我会收到此错误?我该如何解决这个错误?我在谷歌上搜索过这些,但我找不到我的问题的解决方案。我使用的是 Windows 10 操作系统,处理器是 intel core i3。
【问题讨论】:
标签: c assembly syntax-error inline-assembly