LINUX.ORG.RU

[fpu + inline asm] Тупняк


0

1

Делаю так:


#include <stdio.h>

float res = 0.0f;

int main(int argc, char **argv)
{
	asm(".intel_syntax noprefix\n");
	asm("finit\n");
	asm("fldpi\n");
	asm("fmul st(0),st(0)\n");
	asm("fst res\n");
	
	printf("res = %f",res);
	
	return 0;
}

А оно говорит мне:

main.c: Assembler messages:
main.c:20: Error: ambiguous operand size for `fst'

Вроде всё правильно, поэтому вот сижу туплю.

З.Ы: Кстати LORCODE не обрабатывает [code = c]. Это баг или фича?


> Кстати LORCODE не обрабатывает [code = c]. Это баг или фича?

Асм не обрабатывает?

anonymous ()

Добавьте dword ptr

anonymous ()
#include <stdio.h>

float res = 0.0f;

int main()
{
  printf("%d\n", sizeof(float));
  asm(".intel_syntax noprefix\n\
  finit\n\
  fldpi\n\
  fmul st(0), st(0)\n\
  fst dword ptr [res]           # <-----\n\
  .att_syntax noprefix");      // <-----

  printf("res = %f\n", res);

  return 0;
}
anon_666 ()
Ответ на: комментарий от anon_666

И это заместо добавления суффикса для размера операнда?

anonymous ()
Ответ на: комментарий от anonymous

Для ответа на вопрос ТСа достаточно указать размер операнда, но чтобы программа скомпилировалась этого недостаточно.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.