Переведите встроенный ассемблерный код для поддержки x64

Возможно, можно преобразовать код C/C++ здесь в C#:

http://www.firstpr.com.au/dsp/pink-noise/

самый легкий способ стать звуковым на звуковую карту состоит в том, чтобы генерировать wav (выложите некоторые hardcoded заголовки и затем демонстрационные данные). Тогда можно играть .wav файл.

6
задан Eldad 12 October 2009 в 12:37
поделиться

1 ответ

Я думаю, вы просто нашли причину, по которой встроенная сборка - заноза в заднице - это совершенно непереносимо (и не только между архитектурами; компиляторы часто имеют разный и несовместимый синтаксис). Напишите внешний файл сборки и сделайте то, что вам нужно. Передача параметров в ассемблерные подпрограммы точно такая же, как и в C-функциях; просто вперед объявите свою подпись функции где-нибудь, и вызывающий код (в C) будет делать правильные вещи. Затем реализуйте подпрограмму во внешнем файле сборки (обязательно соблюдайте соглашение о вызовах) и экспортируйте соответствующий символ, чтобы компоновщик все правильно связал. Presto - рабочая сборка!

Пример по запросу. Я не пытался скомпилировать или протестировать это каким-либо образом, так что это может быть не на 100%. Удачи.

myHeader.h:

void *someOperation(void *parameter1, int parameter2);

myAssemblyFile.s:

.text
.globl someOperation

someOperation:
    add %rdx, %rcx
    mov %rcx, %rax
    ret

.end

mySourceCode.c:

#include "myHeader.h" 

void someFunction(void)
{
  void *arg1 = (void *)0x80001000;
  int  arg2  = 12;
  void *returnValue;

  printf("Calling with %x %x\n", arg1, arg2);

  // call assembly function
  returnValue = someOperation(arg1, arg2);

  printf("Returned: %x\n", returnValue);
}
6
ответ дан 17 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: