Gcc 使用 AT&T 语法,而这段代码是 Intel 语法,怎么在我的 C 语言程序中作为一个宏函数使用它呢
inline unsigned int Div_TEN9_2(unsigned long x,unsigned int *pRemainder ) { _asm { mov eax,unsigned int ptr [x] mov edx,unsigned int ptr [x+4] mov ebx,TEN9 div ebx mov ebx,pRemainder mov [ebx],edx } }
![]() | 1 yanaraika 2019-04-06 10:50:56 +08:00 via Android 手动翻译下就好,右转 stackoverflow |
![]() | 2 secondwtq 2019-04-06 11:25:47 +08:00 1. GCC 不是什么 AT&T 语法,只是默认 AT&T 语法,可以换成 intel 语法,是 GCC 和 MSVC 的 InlineAsm 扩展的区别,并且也不只是语法层面的 2. 这好像没啥可 port 的,就一个 divrem,其实编译器优化应该直接就能搞定 |
![]() | 3 icyalala 2019-04-06 11:32:07 +08:00 用 C 来写的话,开了优化后编译器会把 div 优化成 mul 和 shr,你自己手写汇编用 div 反而可能会更慢 |
![]() | 4 hx1997 2019-04-06 13:20:58 +08:00 via Android gcc -masm=intel 了解一下 |
![]() | 5 ipwx 2019-04-06 13:22:15 +08:00 这种函数 -O3 不就行了,还手动汇编。。。 |
6 ccpp132 2019-04-06 14:29:17 +08:00 via Android 这汇编写的估计还不如编译优化的速度 |
7 glishijie 2019-04-06 19:39:05 +08:00 via Android 想要性能 inline 就好了,不需要一定宏函数,加 always inline ;另外汇编最好加上 volatile |