Почему ошибка создания узла nasm командной строки Xcode: неизвестное использование мнемоники инструкции без суффикса размера - PullRequest
0 голосов
/ 10 февраля 2019

Моя цель - использовать Xcode (10.2-beta) для написания C и Assembly для MacOS (14.1);Я хочу использовать NASM вместо стандартного компилятора GNU, синтаксис GAS довольно ужасен.

Кстати, хотя я настроил Xcode для использования NASM, как вы увидите ниже, я подозреваю,он не используется!

Я построил свой проект с использованием компилятора GNU.Работает нормально.

// main.c
# include <stdio.h>

int myOperation(int a, int b);

int main(int argc, char * argv[]) {
    // insert logic here
    int x = 10;
    int y = 12;
    int z = myOperation(x, y);
    printf("The sum of %d and %d is %d\n", x, y, z);
    return 0;
}

//  assembly.s
.text
.globl _myOperation

_myOperation:
    add %esi, %edi
    mov %edi, %eax
    ret

Я установил инструменты командной строки XCode и изменил правила сборки для компиляции файлов NASM.Файл C такой же:

//  assembly.s
.text
.globl _myOperation

_myOperation:
    add edi, esi
    mov eax, edi
    ret

Строительные правила Xcode build rule

Я получаю следующие ошибки:

/Users/rodrigomattososilveira/projects/asm/NASM Tutorial/Tutorial_01AA/Tutorial_01AA/assembly.s:12:5: error: unknown use of instruction mnemonic without a size suffix
    add edi, esi
    ^
/Users/rodrigomattososilveira/projects/asm/NASM Tutorial/Tutorial_01AA/Tutorial_01AA/assembly.s:13:5: error: unknown use of instruction mnemonic without a size suffix
    mov eax, edi
    ^
Command CompileC failed with a nonzero exit code

Некоторые изссылки, которые я проверил:

1 Ответ

0 голосов
/ 18 февраля 2019

Я нашел подсказку в этой публикации Reddit :

Похоже, что газ может принимать синтаксис Intel, но вы должны указать его с помощью .intel_syntax flag.

Теперь этот код компилируется:

.intel_syntax // THIS DID THE TRICK

.text
.global _myOperation

_myOperation:
    add edi, esi
    mov eax, edi
    ret
...