Есть такой код на асме, не особо понимаю, что он делает , и, соответственно, как его перевести в Intel синтаксис
xorl %%ebx, %%ebx ;xor ebx,ebx
negl %%eax ;neg eax
rcl $3, %%ebx ;rcl ebx,3
movl 0f( , %%ebx ), %%eax ;тут непонятно
jmp *%%eax ;тут тоже - переход на то, что указывает еах?
0:
.long 1f ;тоже неясно, и ниже все неясно
.long 2f
1:
: : "a" (val) : "%ebx"
jmp 3f
2:
3:
в оригинале это макрос для Си
#define IF_ZERO(val) \
asm(" xorl %%ebx, %%ebx\n\t" \
" negl %%eax\n\t" \
" rcl $3, %%ebx\n\t" \
" movl 0f( , %%ebx ), %%eax \n\t" \
" jmp *%%eax \n" \
"0: \n\t" \
" .long 1f\n\t" \
" .long 2f\n" \
"1: \n" \
: : "a" (val) : "%ebx");
#define ELSE_ZERO \
asm(" jmp 3f\n\t" \
"2: \n");
#define ENDIF_ZERO \
asm("3: \n");